VM虚拟机逆向---[羊城杯 2021]Babyvm 复现【详解】

news2024/9/28 9:15:59

文章目录

  • 前言
  • 题目分析
  • 汇编脚本
    • 分析汇编
    • exp
  • 后言

前言

题目分析

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

&unk_804B0C0里面是opcode,sub_1C8里面有个mprotect,用了一个SMC加密。

我使用的是动态调试,因为是ELF文件,链接一下linux,进行动调,断点下在第九行就可以了,之后F7进入,sub_80487A8里面

选中,函数起始处一直到第一个retn的所有内容用U重定义下,然后C转换成代码就可以了。

在这里插入图片描述

这样就得到各个指令的实现了,接下来就是根据代码写脚本

汇编脚本

opcode = [0xA1, 0xC1, 0x00, 0xB1, 0x77, 0xC2, 0x4A, 0x01, 0x00, 0x00,
          0xC1, 0x01, 0xB2, 0x77, 0xC2, 0x19, 0x01, 0x00, 0x00, 0xC1,
          0x02, 0xB4, 0x77, 0xC2, 0xDD, 0x01, 0x00, 0x00, 0xC1, 0x03,
          0xB3, 0x77, 0xC2, 0x0F, 0x01, 0x00, 0x00, 0xC1, 0x04, 0xB2,
          0x77, 0xC2, 0x1B, 0x01, 0x00, 0x00, 0xC1, 0x05, 0xB4, 0x77,
          0xC2, 0x89, 0x01, 0x00, 0x00, 0xC1, 0x06, 0xB1, 0x77, 0xC2,
          0x19, 0x01, 0x00, 0x00, 0xC1, 0x07, 0xB3, 0x77, 0xC2, 0x54,
          0x01, 0x00, 0x00, 0xC1, 0x08, 0xB1, 0x77, 0xC2, 0x4F, 0x01,
          0x00, 0x00, 0xC1, 0x09, 0xB1, 0x77, 0xC2, 0x4E, 0x01, 0x00,
          0x00, 0xC1, 0x0A, 0xB3, 0x77, 0xC2, 0x55, 0x01, 0x00, 0x00,
          0xC1, 0x0B, 0xB3, 0x77, 0xC2, 0x56, 0x01, 0x00, 0x00, 0xC1,
          0x0C, 0xB4, 0x77, 0xC2, 0x8E, 0x00, 0x00, 0x00, 0xC1, 0x0D,
          0xB2, 0x77, 0xC2, 0x49, 0x00, 0x00, 0x00, 0xC1, 0x0E, 0xB3,
          0x77, 0xC2, 0x0E, 0x01, 0x00, 0x00, 0xC1, 0x0F, 0xB1, 0x77,
          0xC2, 0x4B, 0x01, 0x00, 0x00, 0xC1, 0x10, 0xB3, 0x77, 0xC2,
          0x06, 0x01, 0x00, 0x00, 0xC1, 0x11, 0xB3, 0x77, 0xC2, 0x54,
          0x01, 0x00, 0x00, 0xC1, 0x12, 0xB2, 0x77, 0xC2, 0x1A, 0x00,
          0x00, 0x00, 0xC1, 0x13, 0xB1, 0x77, 0xC2, 0x42, 0x01, 0x00,
          0x00, 0xC1, 0x14, 0xB3, 0x77, 0xC2, 0x53, 0x01, 0x00, 0x00,
          0xC1, 0x15, 0xB1, 0x77, 0xC2, 0x1F, 0x01, 0x00, 0x00, 0xC1,
          0x16, 0xB3, 0x77, 0xC2, 0x52, 0x01, 0x00, 0x00, 0xC1, 0x17,
          0xB4, 0x77, 0xC2, 0xDB, 0x00, 0x00, 0x00, 0xC1, 0x18, 0xB1,
          0x77, 0xC2, 0x19, 0x01, 0x00, 0x00, 0xC1, 0x19, 0xB4, 0x77,
          0xC2, 0xD9, 0x00, 0x00, 0x00, 0xC1, 0x1A, 0xB1, 0x77, 0xC2,
          0x19, 0x01, 0x00, 0x00, 0xC1, 0x1B, 0xB3, 0x77, 0xC2, 0x55,
          0x01, 0x00, 0x00, 0xC1, 0x1C, 0xB2, 0x77, 0xC2, 0x19, 0x00,
          0x00, 0x00, 0xC1, 0x1D, 0xB3, 0x77, 0xC2, 0x00, 0x01, 0x00,
          0x00, 0xC1, 0x1E, 0xB1, 0x77, 0xC2, 0x4B, 0x01, 0x00, 0x00,
          0xC1, 0x1F, 0xB2, 0x77, 0xC2, 0x1E, 0x00, 0x00, 0x00, 0xC1,
          0x20, 0x80, 0x02, 0x18, 0x00, 0x00, 0x00, 0x23, 0x10, 0xC1,
          0x21, 0x80, 0x02, 0x10, 0x00, 0x00, 0x00, 0x23, 0xF7, 0xC1,
          0x22, 0x80, 0x02, 0x08, 0x00, 0x00, 0x00, 0x23, 0xF7, 0xC1,
          0x23, 0xF7, 0xFE, 0x80, 0x02, 0x05, 0x00, 0x00, 0x00, 0x22,
          0x77, 0x10, 0x80, 0x02, 0x07, 0x00, 0x00, 0x00, 0x23, 0x80,
          0x02, 0x23, 0x77, 0xF1, 0x98, 0x31, 0x77, 0x10, 0x80, 0x02,
          0x18, 0x00, 0x00, 0x00, 0x23, 0x80, 0x02, 0x20, 0xB9, 0xE4,
          0x35, 0x31, 0x77, 0x10, 0x80, 0x02, 0x12, 0x00, 0x00, 0x00,
          0x22, 0x77, 0xA0, 0xC1, 0x24, 0x80, 0x02, 0x18, 0x00, 0x00,
          0x00, 0x23, 0x10, 0xC1, 0x25, 0x80, 0x02, 0x10, 0x00, 0x00,
          0x00, 0x23, 0xF7, 0xC1, 0x26, 0x80, 0x02, 0x08, 0x00, 0x00,
          0x00, 0x23, 0xF7, 0xC1, 0x27, 0xF7, 0xFE, 0x32, 0x20, 0x43,
          0x33, 0x77, 0x80, 0x02, 0x11, 0x00, 0x00, 0x00, 0x22, 0x35,
          0x37, 0x38, 0x77, 0x80, 0x02, 0x0D, 0x00, 0x00, 0x00, 0x23,
          0x77, 0x38, 0x39, 0x10, 0x32, 0x20, 0x43, 0x33, 0x77, 0x80,
          0x02, 0x11, 0x00, 0x00, 0x00, 0x22, 0x35, 0x37, 0x38, 0x77,
          0x80, 0x02, 0x0D, 0x00, 0x00, 0x00, 0x23, 0x77, 0x38, 0x39,
          0xC7, 0xC1, 0x28, 0x80, 0x02, 0x18, 0x00, 0x00, 0x00, 0x23,
          0x10, 0xC1, 0x29, 0x80, 0x02, 0x10, 0x00, 0x00, 0x00, 0x23,
          0xF7, 0xC1, 0x2A, 0x80, 0x02, 0x08, 0x00, 0x00, 0x00, 0x23,
          0xF7, 0xC1, 0x2B, 0xF7, 0xFE, 0x32, 0x20, 0x43, 0x33, 0x77,
          0x80, 0x02, 0x11, 0x00, 0x00, 0x00, 0x22, 0x35, 0x37, 0x38,
          0x77, 0x80, 0x02, 0x0D, 0x00, 0x00, 0x00, 0x23, 0x77, 0x38,
          0x39, 0x10, 0x32, 0x20, 0x43, 0x33, 0x77, 0x80, 0x02, 0x11,
          0x00, 0x00, 0x00, 0x22, 0x35, 0x37, 0x38, 0x77, 0x80, 0x02,
          0x0D, 0x00, 0x00, 0x00, 0x23, 0x77, 0x38, 0x39, 0xC8, 0x99]

i = 0
while opcode[i] != 0x99:
    match opcode[i]:
        case 0x71:
            print(f"{i} push %d" % (opcode[i+1]))
            i += 5
        case 0x41:
            print(f"{i} add reg[1] reg[2]")
            i += 1
        case 0x42:
            print(f"{i} sub reg[1] reg[4]")
            i += 1
        case 0x43:
            print(f"{i} mul reg[1] reg[3]")
            i += 1
        case 0x37:
            print(f"{i} mov reg[1] reg[5]")
            i += 1
        case 0x38:
            print(f"{i} xor reg[1] reg[4]")
            i += 1
        case 0x39:
            print(f"{i} xor reg[1] reg[5]")
            i += 1
        case 0x35:
            print(f"{i} mov reg[5] reg[1]")
            i += 1
        case 0xF7:
            print(f"{i} add reg[9] reg[1]")
            i += 1
        case 0x44:
            print(f"{i} div reg[1] reg[5]")
            i += 1
        case 0x80:
            int_val = int.from_bytes(bytes(opcode[i + 2:i + 6]), 'little')
            print(f"{i} mov reg[?] {int_val}")
            i += 6
        case 0x77:
            print(f"{i} xor reg[1] reg[9]")
            i += 1
        case 0x53:
            print(f"{i} put reg[3]")
            i += 2
        case 0x22:
            print(f"{i} shr reg[1] reg[2]")
            i += 1
        case 0x23:
            print(f"{i} shl reg[1] reg[2]")
            i += 1
        case 0x76:
            print(f"{i} pop reg[3]")
            i += 5
        case 0x54:
            print(f"{i} get")
            i += 2
        case 0x30:
            print(f"{i} or reg[1] reg[2]")
            i += 1
        case 0x31:
            print(f"{i} and reg[1] reg[2]")
            i += 1
        case 0x32:
            print(f"{i} mov reg[3] %d" % (opcode[i+1]))
            i += 2
        case 0x09:
            print(f"{i} mov reg[1] 0x6FEBF967")
            i += 1
        case 0x10:
            print(f"{i} mov reg[9] reg[1]")
            i += 1
        case 0x33:
            print(f"{i} mov reg[4] reg[1]")
            i += 1
        case 0x34:
            print(f"{i} mov reg[2] %d" % (opcode[i+1]))
            i += 2
        case 0xFE:
            print(f"{i} mov reg[1] reg[9]")
            i += 1
        case 0x11:
            print(f"{i} print reg[1]")
            i += 1
        case 0xA0:
            print(f"{i} cmp reg[1] 0x6FEBF967")
            i += 1
        case 0xA1:
            print(f"{i} cmp len 44")
            i += 1
        case 0xB1:
            print(f"{i} mov reg[9] v[0]")
            i += 1
        case 0xB2:
            print(f"{i} mov reg[9] v[1]")
            i += 1
        case 0xA4:
            print(f"{i} mov v[%d] reg[1]" % (opcode[i + 1]))
            i += 4
        case 0xB3:
            print(f"{i} mov reg[9] v[2]")
            i += 1
        case 0xB4:
            print(f"{i} mov reg[9] v[3]")
            i += 1
        case 0xC1:
            print(f"{i} mov reg[1] s[%d]" % (opcode[i + 1]))
            i += 2
        case 0xC7:
            print(f"{i} cmp d[0] reg[1]")
            i += 1
        case 0xC8:
            print(f"{i} cmp d[1] reg[1]")
            i += 1
        case 0xC2:
            print(f"{i} cmp %d reg[1]" % (opcode[i+1]))
            i += 5



打印出来:

0 cmp len 44
1 mov reg[1] s[0]
3 mov reg[9] v[0]
4 xor reg[1] reg[9]
5 cmp 74 reg[1]
10 mov reg[1] s[1]
12 mov reg[9] v[1]
13 xor reg[1] reg[9]
14 cmp 25 reg[1]
19 mov reg[1] s[2]
21 mov reg[9] v[3]
22 xor reg[1] reg[9]
23 cmp 221 reg[1]
28 mov reg[1] s[3]
30 mov reg[9] v[2]
31 xor reg[1] reg[9]
32 cmp 15 reg[1]
37 mov reg[1] s[4]
39 mov reg[9] v[1]
40 xor reg[1] reg[9]
41 cmp 27 reg[1]
46 mov reg[1] s[5]
48 mov reg[9] v[3]
49 xor reg[1] reg[9]
50 cmp 137 reg[1]
55 mov reg[1] s[6]
57 mov reg[9] v[0]
58 xor reg[1] reg[9]
59 cmp 25 reg[1]
64 mov reg[1] s[7]
66 mov reg[9] v[2]
67 xor reg[1] reg[9]
68 cmp 84 reg[1]
73 mov reg[1] s[8]
75 mov reg[9] v[0]
76 xor reg[1] reg[9]
77 cmp 79 reg[1]
82 mov reg[1] s[9]
84 mov reg[9] v[0]
85 xor reg[1] reg[9]
86 cmp 78 reg[1]
91 mov reg[1] s[10]
93 mov reg[9] v[2]
94 xor reg[1] reg[9]
95 cmp 85 reg[1]
100 mov reg[1] s[11]
102 mov reg[9] v[2]
103 xor reg[1] reg[9]
104 cmp 86 reg[1]
109 mov reg[1] s[12]
111 mov reg[9] v[3]
112 xor reg[1] reg[9]
113 cmp 142 reg[1]
118 mov reg[1] s[13]
120 mov reg[9] v[1]
121 xor reg[1] reg[9]
122 cmp 73 reg[1]
127 mov reg[1] s[14]
129 mov reg[9] v[2]
130 xor reg[1] reg[9]
131 cmp 14 reg[1]
136 mov reg[1] s[15]
138 mov reg[9] v[0]
139 xor reg[1] reg[9]
140 cmp 75 reg[1]
145 mov reg[1] s[16]
147 mov reg[9] v[2]
148 xor reg[1] reg[9]
149 cmp 6 reg[1]
154 mov reg[1] s[17]
156 mov reg[9] v[2]
157 xor reg[1] reg[9]
158 cmp 84 reg[1]
163 mov reg[1] s[18]
165 mov reg[9] v[1]
166 xor reg[1] reg[9]
167 cmp 26 reg[1]
172 mov reg[1] s[19]
174 mov reg[9] v[0]
175 xor reg[1] reg[9]
176 cmp 66 reg[1]
181 mov reg[1] s[20]
183 mov reg[9] v[2]
184 xor reg[1] reg[9]
185 cmp 83 reg[1]
190 mov reg[1] s[21]
192 mov reg[9] v[0]
193 xor reg[1] reg[9]
194 cmp 31 reg[1]
199 mov reg[1] s[22]
201 mov reg[9] v[2]
202 xor reg[1] reg[9]
203 cmp 82 reg[1]
208 mov reg[1] s[23]
210 mov reg[9] v[3]
211 xor reg[1] reg[9]
212 cmp 219 reg[1]
217 mov reg[1] s[24]
219 mov reg[9] v[0]
220 xor reg[1] reg[9]
221 cmp 25 reg[1]
226 mov reg[1] s[25]
228 mov reg[9] v[3]
229 xor reg[1] reg[9]
230 cmp 217 reg[1]
235 mov reg[1] s[26]
237 mov reg[9] v[0]
238 xor reg[1] reg[9]
239 cmp 25 reg[1]
244 mov reg[1] s[27]
246 mov reg[9] v[2]
247 xor reg[1] reg[9]
248 cmp 85 reg[1]
253 mov reg[1] s[28]
255 mov reg[9] v[1]
256 xor reg[1] reg[9]
257 cmp 25 reg[1]
262 mov reg[1] s[29]
264 mov reg[9] v[2]
265 xor reg[1] reg[9]
266 cmp 0 reg[1]
271 mov reg[1] s[30]
273 mov reg[9] v[0]
274 xor reg[1] reg[9]
275 cmp 75 reg[1]
280 mov reg[1] s[31]
282 mov reg[9] v[1]
283 xor reg[1] reg[9]
284 cmp 30 reg[1]
289 mov reg[1] s[32]
291 mov reg[?] 24
297 shl reg[1] reg[2]
298 mov reg[9] reg[1]
299 mov reg[1] s[33]
301 mov reg[?] 16
307 shl reg[1] reg[2]
308 add reg[9] reg[1]
309 mov reg[1] s[34]
311 mov reg[?] 8
317 shl reg[1] reg[2]
318 add reg[9] reg[1]
319 mov reg[1] s[35]
321 add reg[9] reg[1]
322 mov reg[1] reg[9]
323 mov reg[?] 5
329 shr reg[1] reg[2]
330 xor reg[1] reg[9]
331 mov reg[9] reg[1]
332 mov reg[?] 7
338 shl reg[1] reg[2]
339 mov reg[?] 2565961507
345 and reg[1] reg[2]
346 xor reg[1] reg[9]
347 mov reg[9] reg[1]
348 mov reg[?] 24
354 shl reg[1] reg[2]
355 mov reg[?] 904182048
361 and reg[1] reg[2]
362 xor reg[1] reg[9]
363 mov reg[9] reg[1]
364 mov reg[?] 18
370 shr reg[1] reg[2]
371 xor reg[1] reg[9]
372 cmp reg[1] 0x6FEBF967
373 mov reg[1] s[36]
375 mov reg[?] 24
381 shl reg[1] reg[2]
382 mov reg[9] reg[1]
383 mov reg[1] s[37]
385 mov reg[?] 16
391 shl reg[1] reg[2]
392 add reg[9] reg[1]
393 mov reg[1] s[38]
395 mov reg[?] 8
401 shl reg[1] reg[2]
402 add reg[9] reg[1]
403 mov reg[1] s[39]
405 add reg[9] reg[1]
406 mov reg[1] reg[9]
407 mov reg[3] 32
409 mul reg[1] reg[3]
410 mov reg[4] reg[1]
411 xor reg[1] reg[9]
412 mov reg[?] 17
418 shr reg[1] reg[2]
419 mov reg[5] reg[1]
420 mov reg[1] reg[5]
421 xor reg[1] reg[4]
422 xor reg[1] reg[9]
423 mov reg[?] 13
429 shl reg[1] reg[2]
430 xor reg[1] reg[9]
431 xor reg[1] reg[4]
432 xor reg[1] reg[5]
433 mov reg[9] reg[1]
434 mov reg[3] 32
436 mul reg[1] reg[3]
437 mov reg[4] reg[1]
438 xor reg[1] reg[9]
439 mov reg[?] 17
445 shr reg[1] reg[2]
446 mov reg[5] reg[1]
447 mov reg[1] reg[5]
448 xor reg[1] reg[4]
449 xor reg[1] reg[9]
450 mov reg[?] 13
456 shl reg[1] reg[2]
457 xor reg[1] reg[9]
458 xor reg[1] reg[4]
459 xor reg[1] reg[5]
460 cmp d[0] reg[1]
461 mov reg[1] s[40]
463 mov reg[?] 24
469 shl reg[1] reg[2]
470 mov reg[9] reg[1]
471 mov reg[1] s[41]
473 mov reg[?] 16
479 shl reg[1] reg[2]
480 add reg[9] reg[1]
481 mov reg[1] s[42]
483 mov reg[?] 8
489 shl reg[1] reg[2]
490 add reg[9] reg[1]
491 mov reg[1] s[43]
493 add reg[9] reg[1]
494 mov reg[1] reg[9]
495 mov reg[3] 32
497 mul reg[1] reg[3]
498 mov reg[4] reg[1]
499 xor reg[1] reg[9]
500 mov reg[?] 17
506 shr reg[1] reg[2]
507 mov reg[5] reg[1]
508 mov reg[1] reg[5]
509 xor reg[1] reg[4]
510 xor reg[1] reg[9]
511 mov reg[?] 13
517 shl reg[1] reg[2]
518 xor reg[1] reg[9]
519 xor reg[1] reg[4]
520 xor reg[1] reg[5]
521 mov reg[9] reg[1]
522 mov reg[3] 32
524 mul reg[1] reg[3]
525 mov reg[4] reg[1]
526 xor reg[1] reg[9]
527 mov reg[?] 17
533 shr reg[1] reg[2]
534 mov reg[5] reg[1]
535 mov reg[1] reg[5]
536 xor reg[1] reg[4]
537 xor reg[1] reg[9]
538 mov reg[?] 13
544 shl reg[1] reg[2]
545 xor reg[1] reg[9]
546 xor reg[1] reg[4]
547 xor reg[1] reg[5]
548 cmp d[1] reg[1]

分析汇编

前三十二个字节就是取 数据 异或得出来的;

后 十二个字节就很复杂了,可以考虑直接爆破。

exp

前三十二个:

print(chr(0x7b ^ 74) + chr(0x2f ^ 25) + chr(0xe8 ^ 221) + chr(0x37 ^ 15) + chr(0x2f ^ 27) + chr(0xe8 ^ 137) + chr(
    0x7b ^ 25) + chr(0x37 ^ 84) + chr(0x7b ^ 79) + chr(0x7b ^ 78) + chr(0x37 ^ 85) + chr(0x37 ^ 86) + chr(
    0xe8 ^ 142) + chr(0x2f ^ 73) + chr(0x37 ^ 14) + chr(0x7b ^ 75) + chr(0x37 ^ 6) + chr(0x37 ^ 84) + chr(
    0x2f ^ 26) + chr(0x7b ^ 66) + chr(0x37 ^ 83) + chr(0x7b ^ 31) + chr(0x37 ^ 82) + chr(0xe8 ^ 219) + chr(
    0x7b ^ 25) + chr(0xe8 ^ 217) + chr(0x7b ^ 25) + chr(0x37 ^ 85) + chr(0x2f ^ 25) + chr(0x37 ^ 0) + chr(
    0x7b ^ 75) + chr(0x2f ^ 30))

得到:16584abc45baff901c59dde3b1bb6701

后十二个:

第 33 34 35 36

start = 0x20202020

while start <= 0xffffffff:
    s = start
    reg9 = s
    s >>= 5
    s ^= reg9
    reg9 = s
    s <<= 7
    s &= 2565961507
    s ^= reg9
    reg9 = s
    s <<= 24
    s &= 904182048
    s ^= reg9
    reg9 = s
    s >>= 18
    s ^= reg9
    if s == 1877735783:
        print(start)
        exit(0)
    else:
        start += 1

爆破后结果是:1630680372 转换为ascii码 ‘a254’

第 37 38 39 40

#include <cstdio>

int main(){
    unsigned int record, reg1, reg2, reg3, reg4, reg5, reg6, unknown2;
    for(unsigned int unknown2=0x20202020;unknown2<0xffffffff;unknown2+=1){
        record = unknown2;
        reg1 = unknown2;
        reg3 = 32;
        reg1 *= reg3;
        reg4 = reg1;
        reg1 ^= unknown2;
        reg2 = 17;
        reg1 >>= reg2;
        reg6 = reg1;
        reg1 = reg6;
        reg1 ^= reg4;
        reg1 ^= unknown2;

        reg2 = 13;
        reg1 <<= reg2;
        reg1 ^= unknown2;
        reg1 ^= reg4;
        reg1 ^= reg6;

        unknown2 = reg1;
        reg3 = 32;
        reg1 *= reg3;
        reg4 = reg1;
        reg1 ^= unknown2;
        reg2 = 17;
        reg1 >>= reg2;
        reg6 = reg1;
        reg1 = reg6;
        reg1 ^= reg4;
        reg1 ^= unknown2;
        reg2 = 13;
        reg1 <<= reg2;
        reg1 ^= unknown2;
        reg1 ^= reg4;
        reg1 ^= reg6;

        unknown2 = record;
        if(reg1 == 0x0CF1304DC){
            printf("%u\n", record);
            break;
        }
    }
}

运行结果:1647326819 转换成ascii: b06c

第41 42 43 44

#include <cstdio>

int main(){
    unsigned int record, reg1, reg2, reg3, reg4, reg5, reg6, unknown2;
    for(unsigned int unknown2=0x20202020;unknown2<0xffffffff;unknown2+=1){
        record = unknown2;
        reg1 = unknown2;
        reg3 = 32;
        reg1 *= reg3;
        reg4 = reg1;
        reg1 ^= unknown2;
        reg2 = 17;
        reg1 >>= reg2;
        reg6 = reg1;
        reg1 = reg6;
        reg1 ^= reg4;
        reg1 ^= unknown2;
        reg2 = 13;
        reg1 <<= reg2;
        reg1 ^= unknown2;
        reg1 ^= reg4;
        reg1 ^= reg6;
        unknown2 = reg1;
        reg3 = 32;
        reg1 *= reg3;
        reg4 = reg1;
        reg1 ^= unknown2;
        reg2 = 17;
        reg1 >>= reg2;
        reg6 = reg1;
        reg1 = reg6;
        reg1 ^= reg4;
        reg1 ^= unknown2;
        reg2 = 13;
        reg1 <<= reg2;
        reg1 ^= unknown2;
        reg1 ^= reg4;
        reg1 ^= reg6;
        unknown2 = record;
        if(reg1 == 0x283B8E84){
            printf("%u\n", record);
            break;
        }
    }
}

运行结果:1684222515 转换成ascii码:dc23

全部拼接起来就是:16584abc45baff901c59dde3b1bb6701a254b06cdc23

后言

这里最后面爆破卡了好久,最后俩个爆破脚本是大佬的,一直想着用python,应该早点想到要限制数据的大小的,unsigned int 通常表示非负整数,最大到0xFFFFFFFF。。。一直没留意,爆破不出东西来。傻了。
来来回回写了大概五六题vm逆向,渐渐明白为什么没有人写详解了(wp点开全都只有exp),,,写怎么推导指令,,,还是多练,就明白了,()。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1181564.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android11修改连接WiFi后AP端显示的设备名

修改build.prop文件 1.修改 /system/build.prop 最后添加&#xff0c;xxx 为自己设置的设备名&#xff1a; net.hostnamexxx 2. 重启、重连wifi&#xff0c;从热点或路由器后台查看设备名即为修改后的名称 代码里动态配置 暴力手段&#xff1a;grep -rn “net.hostname” *…

matlab中的iddata函数的初步理解和使用程序举例

matlab中的iddata函数的初步理解和程序举例 一、iddata函数功能 iddata函数常用于系统识别分析领域数据分析方面。该函数在时域或频域中&#xff0c;将用于系统识别的输入输出数据及其特性数据的生成对象数据类型。即&#xff0c;可以使用iddata函数封装要标识的系统的输入和…

【Transformer从零开始代码实现】(一)输入部件:embedding+positionalEncoding

Transformer总架构图 输入相关组件 输入部分&#xff1a; 源文本嵌入层位置编码器目标文本嵌入层位置编码器 &#xff08;1&#xff09;Embedding 首先&#xff0c;需要对输入的内容进行向量化。 1&#xff09;先导示例 nn.Embedding示例&#xff1a; # 10代表嵌入的数…

即插即用篇 | YOLOv8 引入反向残差注意力模块 iRMB | 《ICCV 2023 最新论文》

论文地址:https://arxiv.org/abs/2301.01146 代码地址:https://github.com/zhangzjn/EMO 本论文着重于开发现代、高效、轻量级的模型,用于进行密集预测,同时在参数、FLOPs和性能之间进行权衡。倒置残差块(IRB)作为轻量级CNN的基础设施,但在基于注意力的研究中尚未找到对…

目标检测中的评价指标

目标检测中的评价指标 将检测目标分为正样本和负样本。 真阳性&#xff08;true positives , TP&#xff09; : 正样本被正确识别为正样本。 假阳性&#xff08;false positives, FP&#xff09;: 负样本被错误识别为正样本。 假阴性&#xff08;false negatives, FN&#…

技术分享 | app自动化测试(Android)-- 参数化用例

参数化是自动化测试的一种常用技巧&#xff0c;可以将测试代码中的某些输入使用参数来代替。以百度搜索功能为例&#xff0c;每次测试搜索场景&#xff0c;都需要测试不同的搜索内容&#xff0c;在这个过程里面&#xff0c;除了数据在变化&#xff0c;测试步骤都是重复的&#…

Java附件和base64相互转换

1 文件转base64 声明&#xff1a;我用的是Hutool的Base64下的api package cn.hutool.core.codec; 首先找一张图片 很简单&#xff0c;直接使用Base64的encode方法就可以拿到文件的base64码&#xff1a; File file new File("D:\\Tools\\Images\\北极熊.jpg");String…

软件测试面试题汇总,(测试技术+人力资源+进阶规划)含2023面试题和答案总结

什么是兼容性测试&#xff1f;单元测试的策略有哪些&#xff1f;当开发人员说不是BUG时&#xff0c;你如何应付&#xff1f;等&#xff0c;尾部有最新BAT的Python高级自动化工程师面试题目和答案福利&#xff0c;想要的就快来领走吧&#xff01;&#xff08;领取方式见文末&…

【机器学习3】有监督学习经典分类算法

1 支持向量机 在现实世界的机器学习领域&#xff0c; SVM涵盖了各个方面的知识&#xff0c; 也是面试题目中常见的基础模型。 SVM的分类结果仅依赖于支持向量&#xff0c;对于任意线性可分的两组点&#xff0c;它 们在SVM分类的超平面上的投影都是线性不可分的。 2逻辑回归 …

安装 MinGW

实际上是将 GCC&#xff08;C语言编译器&#xff09; 移植到了 Windows 平台下。 1、网上下载 下载安装器 mingw-get-setup.exe&#xff0c;路径https://osdn.net/projects/mingw/ 2、打开点击install 3、选择路径continue 4、文件加载完成之后选择continue 5、勾选这两个 6…

数据结构与算法之美学习笔记:17 | 跳表:为什么Redis一定要用跳表来实现有序集合?

目录 前言如何理解“跳表”&#xff1f;用跳表查询到底有多快&#xff1f;跳表是不是很浪费内存&#xff1f;高效的动态插入和删除跳表索引动态更新解答开篇内容小结 前言 本节课程思维导图&#xff1a; 二分查找底层依赖的是数组随机访问的特性&#xff0c;所以只能用数组来实…

润色论文Prompt

你好&#xff0c;我现在开始写论文了&#xff0c;我希望你可以扮演帮我润色论文的角色我写的论文是关于xxxxx领域的xxxxx&#xff0c;我希望你能帮我检查段落中语句的逻辑、语法和拼写等问题我希望你能帮我检查以下段落中语句的逻辑、语法和拼写等问题同时提供润色版本以符合学…

freeswich学习

写在前面 因为所在部分主要负责公司客服业务&#xff0c;需要了解freeswich相关内容&#xff0c;所以这里将学习内容记录下。 1&#xff1a;安装freesswich freeswich是一个实现了软交换协议的开源软件&#xff0c;可以对对接运营上的通话线路&#xff0c;实现拨打电话。 安…

编程未来规划笔记

编程思考 Python 自动化办公、深度学习、自然语言处理&#xff08;调用各种库&#xff09; Html Css 写网页 学习不要怕忘 为什么学的快、忘得快 Google、写代码、放文档 高度提炼 学什么&#xff1b;存在的意义是什么 更好的拓展性&#xff1b;可维护性 实践 原理 顶层设计…

建材行业微信小程序制作全攻略

随着移动互联网的发展&#xff0c;微信小程序成为各行各业推广和服务的新方式。对于建材行业来说&#xff0c;制作一个微信小程序商城能够提供更方便快捷的购买途径&#xff0c;提升用户体验。下面将为大家介绍建材行业微信小程序制作的全攻略。 第一步&#xff1a;注册登录账号…

人工智能一种现代的方法 第四章 非经典搜索 上(局部搜索)

文章目录 人工智能一种现代的方法 第四章 非经典搜索 上前言4.1 局部搜索4.1.1 爬山法4.1.2 爬山法变形4.1.3模拟退火搜索4.1.4 局部束搜索4.1.5 遗传算法 4.2 连续空间的局部搜索4.2.1 梯度下降4.2.2 约束优化 小结 人工智能一种现代的方法 第四章 非经典搜索 上 前言 在第三…

ASUS华硕灵耀X2 Duo UX481FA(FL,FZ)_UX4000F工厂模式原装出厂Windows10系统

下载链接&#xff1a;https://pan.baidu.com/s/1sRHKBOyc3zu1v0qw4dSASA?pwd7nb0 提取码&#xff1a;7nb0 带有ASUS RECOVERY恢复功能、自带所有驱动、出厂主题壁纸、系统属性专属LOGO标志、Office办公软件、MyASUS华硕电脑管家等预装程序所需要工具&#xff1a;16G或以上…

2023 年最佳 Android 数据恢复软件工具

Android 数据恢复软件将使您能够从 Android 智能手机中检索所有已删除的文件。您需要此类软件的原因是由于不同情况下会丢失数据。例如&#xff0c;病毒攻击会导致数据损坏和文件丢失。 Android 数据恢复软件工具清单 以下是十个最佳 Android 数据恢复软件工具&#xff0c;用于…

有哪些你直呼好用的科研效率神器?

今天来分享几款科研免费小工具&#xff0c;帮你读懂外刊、追踪文献、搞定翻译、解除限制……甚至轻松制作PPT。一身好装备&#xff0c;提高科研效率。 一、 浏览器插件 1.1 easyScholar 一款助力科研的浏览器扩展 一款助力科研的浏览器扩展 - easyScholar | 显示期刊等级\SC…

从0到1的Springcloud Alibaba项目,一篇入门!!!

1、新建项目 我们用maven管理项目 第一步&#xff1a;选择maven 第二步&#xff1a;项目命名&#xff0c;项目路径 第三步&#xff1a;进入项目&#xff0c;把src文件夹删掉&#xff08;不删也没事&#xff0c;主要是用不到这个文件夹&#xff09; 2、引入项目依赖 在父项目…