[Asm] 纯文本查看 复制代码
0074AA72 5D POP EBP
0074AA73 C3 RETN
0074AA74 55 PUSH EBP ; 1、在提示 注册错误 的段首下断点
0074AA75 8BEC MOV EBP, ESP
0074AA77 83C4 F0 ADD ESP, -0x10
0074AA7A 33C9 XOR ECX, ECX
0074AA7C 894D F4 MOV DWORD PTR SS:[EBP-0xC], ECX
0074AA7F 894D F0 MOV DWORD PTR SS:[EBP-0x10], ECX
0074AA82 8955 F8 MOV DWORD PTR SS:[EBP-0x8], EDX
0074AA85 8945 FC MOV DWORD PTR SS:[EBP-0x4], EAX
0074AA88 33C0 XOR EAX, EAX
0074AA8A 55 PUSH EBP
0074AA8B 68 32AB7400 PUSH 0074AB32
0074AA90 64:FF30 PUSH DWORD PTR FS:[EAX]
0074AA93 64:8920 MOV DWORD PTR FS:[EAX], ESP
……
0074AAC5 E8 DEFEFFFF CALL 0074A9A8 ; 跟过以后,才知道这个CALL是验证的CALL
0074AACA 8B45 FC MOV EAX, DWORD PTR SS:[EBP-0x4]
0074AACD 8B90 F8030000 MOV EDX, DWORD PTR DS:[EAX+0x3F8]
0074AAD3 8B45 FC MOV EAX, DWORD PTR SS:[EBP-0x4]
0074AAD6 8B80 F4030000 MOV EAX, DWORD PTR DS:[EAX+0x3F4]
0074AADC E8 5FEDFFFF CALL 00749840 ; 2、这可能是验证的call
00749840 55 PUSH EBP
00749841 8BEC MOV EBP, ESP
00749843 33C9 XOR ECX, ECX
00749845 51 PUSH ECX
00749846 51 PUSH ECX
00749847 51 PUSH ECX
00749848 51 PUSH ECX
00749849 51 PUSH ECX
0074984A 51 PUSH ECX
0074984B 51 PUSH ECX
0074984C 51 PUSH ECX
0074984D 8955 F8 MOV DWORD PTR SS:[EBP-0x8], EDX
00749850 8945 FC MOV DWORD PTR SS:[EBP-0x4], EAX
00749853 8B45 F8 MOV EAX, DWORD PTR SS:[EBP-0x8]
00749856 E8 D1DECBFF CALL 0040772C
0074985B 33C0 XOR EAX, EAX
0074985D 55 PUSH EBP
0074985E 68 12997400 PUSH 00749912
00749863 64:FF30 PUSH DWORD PTR FS:[EAX]
00749866 64:8920 MOV DWORD PTR FS:[EAX], ESP
00749869 C645 F7 00 MOV BYTE PTR SS:[EBP-0x9], 0x0
0074986D A0 20997400 MOV AL, BYTE PTR DS:[0x749920]
00749872 50 PUSH EAX
00749873 8D45 F0 LEA EAX, DWORD PTR SS:[EBP-0x10]
00749876 50 PUSH EAX
00749877 33C9 XOR ECX, ECX
00749879 BA 30997400 MOV EDX, 00749930 ; -
0074987E 8B45 F8 MOV EAX, DWORD PTR SS:[EBP-0x8]
00749881 E8 22F7CDFF CALL 00428FA8
00749886 A0 20997400 MOV AL, BYTE PTR DS:[0x749920]
0074988B 50 PUSH EAX
0074988C 8D45 EC LEA EAX, DWORD PTR SS:[EBP-0x14]
0074988F 50 PUSH EAX
00749890 8D55 E8 LEA EDX, DWORD PTR SS:[EBP-0x18]
00749893 8B45 FC MOV EAX, DWORD PTR SS:[EBP-0x4]
00749896 E8 F9FDFFFF CALL 00749694 ; 3、此CALL产生了真码
00749694 55 PUSH EBP
00749695 8BEC MOV EBP, ESP
00749697 83C4 EC ADD ESP, -0x14
0074969A 33C9 XOR ECX, ECX
0074969C 894D EC MOV DWORD PTR SS:[EBP-0x14], ECX
0074969F 894D F4 MOV DWORD PTR SS:[EBP-0xC], ECX
007496A2 8955 F8 MOV DWORD PTR SS:[EBP-0x8], EDX
007496A5 8945 FC MOV DWORD PTR SS:[EBP-0x4], EAX
007496A8 33C0 XOR EAX, EAX
007496AA 55 PUSH EBP
007496AB 68 32977400 PUSH 00749732
007496B0 64:FF30 PUSH DWORD PTR FS:[EAX]
007496B3 64:8920 MOV DWORD PTR FS:[EAX], ESP
007496B6 A0 40977400 MOV AL, BYTE PTR DS:[0x749740]
007496BB 50 PUSH EAX
007496BC 8D45 F4 LEA EAX, DWORD PTR SS:[EBP-0xC]
007496BF 50 PUSH EAX
007496C0 8D55 EC LEA EDX, DWORD PTR SS:[EBP-0x14]
007496C3 8B45 FC MOV EAX, DWORD PTR SS:[EBP-0x4]
007496C6 E8 91F9FFFF CALL 0074905C
007496CB 8B45 EC MOV EAX, DWORD PTR SS:[EBP-0x14] ; 机器码给EAX
007496CE 33C9 XOR ECX, ECX
007496D0 BA 50977400 MOV EDX, 00749750 ; -
007496D5 E8 CEF8CDFF CALL 00428FA8
007496DA 8B45 F4 MOV EAX, DWORD PTR SS:[EBP-0xC]
007496DD 8945 F0 MOV DWORD PTR SS:[EBP-0x10], EAX
007496E0 837D F0 00 CMP DWORD PTR SS:[EBP-0x10], 0x0
007496E4 74 0B JE SHORT 007496F1
007496E6 8B45 F0 MOV EAX, DWORD PTR SS:[EBP-0x10]
007496E9 83E8 04 SUB EAX, 0x4
007496EC 8B00 MOV EAX, DWORD PTR DS:[EAX]
007496EE 8945 F0 MOV DWORD PTR SS:[EBP-0x10], EAX
007496F1 837D F0 10 CMP DWORD PTR SS:[EBP-0x10], 0x10 ; 检查机器码位数 要求是16位
007496F5 75 10 JNZ SHORT 00749707
007496F7 8B4D F8 MOV ECX, DWORD PTR SS:[EBP-0x8]
007496FA 8B55 F4 MOV EDX, DWORD PTR SS:[EBP-0xC]
007496FD 8B45 FC MOV EAX, DWORD PTR SS:[EBP-0x4]
00749700 E8 9BFDFFFF CALL 007494A0 ; 4、上面是检查机器码是否合法,又把机器码作为参数传进来,这个CALL必定和真码有关
007494A0 55 PUSH EBP
007494A1 8BEC MOV EBP, ESP
007494A3 51 PUSH ECX
007494A4 B9 08000000 MOV ECX, 0x8
007494A9 6A 00 PUSH 0x0
007494AB 6A 00 PUSH 0x0
007494AD 49 DEC ECX
007494AE ^ 75 F9 JNZ SHORT 007494A9
007494B0 51 PUSH ECX
007494B1 874D FC XCHG DWORD PTR SS:[EBP-0x4], ECX
007494B4 53 PUSH EBX
007494B5 894D F4 MOV DWORD PTR SS:[EBP-0xC], ECX
007494B8 8955 F8 MOV DWORD PTR SS:[EBP-0x8], EDX
007494BB 8945 FC MOV DWORD PTR SS:[EBP-0x4], EAX
007494BE 8B45 F8 MOV EAX, DWORD PTR SS:[EBP-0x8]
007494C1 E8 66E2CBFF CALL 0040772C
007494C6 33C0 XOR EAX, EAX
007494C8 55 PUSH EBP
007494C9 68 74967400 PUSH 00749674
007494CE 64:FF30 PUSH DWORD PTR FS:[EAX]
007494D1 64:8920 MOV DWORD PTR FS:[EAX], ESP
007494D4 A0 80967400 MOV AL, BYTE PTR DS:[0x749680]
007494D9 50 PUSH EAX
007494DA 8D45 BC LEA EAX, DWORD PTR SS:[EBP-0x44]
007494DD 50 PUSH EAX
007494DE 33C9 XOR ECX, ECX
007494E0 BA 90967400 MOV EDX, 00749690 ; -
007494E5 8B45 F8 MOV EAX, DWORD PTR SS:[EBP-0x8]
007494E8 E8 BBFACDFF CALL 00428FA8
007494ED 8B55 BC MOV EDX, DWORD PTR SS:[EBP-0x44]
007494F0 8D45 F8 LEA EAX, DWORD PTR SS:[EBP-0x8]
007494F3 E8 78E5CBFF CALL 00407A70
007494F8 8B45 F8 MOV EAX, DWORD PTR SS:[EBP-0x8]
007494FB 8945 C0 MOV DWORD PTR SS:[EBP-0x40], EAX
007494FE 837D C0 00 CMP DWORD PTR SS:[EBP-0x40], 0x0
00749502 74 0B JE SHORT 0074950F
00749504 8B45 C0 MOV EAX, DWORD PTR SS:[EBP-0x40]
00749507 83E8 04 SUB EAX, 0x4 ; EAX=01CD8B7C, (UNICODE "2203450100000001")
0074950A 8B00 MOV EAX, DWORD PTR DS:[EAX]
0074950C 8945 C0 MOV DWORD PTR SS:[EBP-0x40], EAX
0074950F 8B45 C0 MOV EAX, DWORD PTR SS:[EBP-0x40]
00749512 85C0 TEST EAX, EAX
00749514 7E 42 JLE SHORT 00749558
00749516 8945 C4 MOV DWORD PTR SS:[EBP-0x3C], EAX
00749519 C745 F0 0100000>MOV DWORD PTR SS:[EBP-0x10], 0x1
00749520 8B45 F8 MOV EAX, DWORD PTR SS:[EBP-0x8]
00749523 8B55 F0 MOV EDX, DWORD PTR SS:[EBP-0x10]
00749526 66:8B4450 FE MOV AX, WORD PTR DS:[EAX+EDX*2-0x2]
0074952B 66:8945 EA MOV WORD PTR SS:[EBP-0x16], AX ; AX=0032 机器码第一个字符:2 的ASCII码 32
0074952F 66:8B55 EA MOV DX, WORD PTR SS:[EBP-0x16]
00749533 8B45 FC MOV EAX, DWORD PTR SS:[EBP-0x4] ; 堆栈 SS:[0012F074]=01CAC5F0
00749536 E8 D9FEFFFF CALL 00749414 ; 5、算法CALL
00749414 55 PUSH EBP ; 6、真正的算法段首
00749415 8BEC MOV EBP, ESP
00749417 83C4 F4 ADD ESP, -0xC
0074941A 66:8955 FA MOV WORD PTR SS:[EBP-0x6], DX
0074941E 8945 FC MOV DWORD PTR SS:[EBP-0x4], EAX
00749421 0FB745 FA MOVZX EAX, WORD PTR SS:[EBP-0x6]
00749425 8945 F4 MOV DWORD PTR SS:[EBP-0xC], EAX
00749428 8B45 F4 MOV EAX, DWORD PTR SS:[EBP-0xC]
0074942B 83C0 D0 ADD EAX, -0x30
0074942E 83E8 0A SUB EAX, 0xA
00749431 72 12 JB SHORT 00749445
00749433 83C0 F9 ADD EAX, -0x7
00749436 83E8 1A SUB EAX, 0x1A
00749439 72 23 JB SHORT 0074945E
0074943B 83C0 FA ADD EAX, -0x6
0074943E 83E8 1A SUB EAX, 0x1A
00749441 72 34 JB SHORT 00749477
00749443 EB 49 JMP SHORT 0074948E
00749445 8B45 F4 MOV EAX, DWORD PTR SS:[EBP-0xC] ; 计算开始
00749448 8B55 FC MOV EDX, DWORD PTR SS:[EBP-0x4] ; 逐位取机器码
0074944B 8B4482 04 MOV EAX, DWORD PTR DS:[EDX+EAX*4+0x4] ; 查询密码表,每个0到9的数字都有一个对应的值
0074944F 0145 F4 ADD DWORD PTR SS:[EBP-0xC], EAX ; 0x32 + 0x9 =0x3B 数字的ASCII值 加上 对应的密码表值
00749452 837D F4 39 CMP DWORD PTR SS:[EBP-0xC], 0x39
00749456 7E 36 JLE SHORT 0074948E ; 如果结果小于0x39就跳转实现
00749458 836D F4 0A SUB DWORD PTR SS:[EBP-0xC], 0xA ; 0000003B-0xA=0x31 如果结果大于0x39 那么减0xA
0074945C EB 30 JMP SHORT 0074948E
0074945E 8B45 F4 MOV EAX, DWORD PTR SS:[EBP-0xC]
00749461 8B55 FC MOV EDX, DWORD PTR SS:[EBP-0x4]
00749464 8B4482 04 MOV EAX, DWORD PTR DS:[EDX+EAX*4+0x4]
00749468 0145 F4 ADD DWORD PTR SS:[EBP-0xC], EAX
0074946B 837D F4 5A CMP DWORD PTR SS:[EBP-0xC], 0x5A
0074946F 7E 1D JLE SHORT 0074948E
00749471 836D F4 1A SUB DWORD PTR SS:[EBP-0xC], 0x1A
00749475 EB 17 JMP SHORT 0074948E
00749477 8B45 F4 MOV EAX, DWORD PTR SS:[EBP-0xC]
0074947A 8B55 FC MOV EDX, DWORD PTR SS:[EBP-0x4]
0074947D 8B4482 04 MOV EAX, DWORD PTR DS:[EDX+EAX*4+0x4]
00749481 0145 F4 ADD DWORD PTR SS:[EBP-0xC], EAX
00749484 837D F4 7A CMP DWORD PTR SS:[EBP-0xC], 0x7A
00749488 7E 04 JLE SHORT 0074948E
0074948A 836D F4 1A SUB DWORD PTR SS:[EBP-0xC], 0x1A
0074948E 66:8B45 F4 MOV AX, WORD PTR SS:[EBP-0xC] ; 接下来就是把ASCII转换成十进制的数字
00749492 66:8945 F8 MOV WORD PTR SS:[EBP-0x8], AX
00749496 66:8B45 F8 MOV AX, WORD PTR SS:[EBP-0x8]
0074949A 8BE5 MOV ESP, EBP
0074949C 5D POP EBP
0074949D C3 RETN
……
00749608 FF75 D8 PUSH DWORD PTR SS:[EBP-0x28] ; 查完表后,还要重新排列下顺序,
0074960B FF75 CC PUSH DWORD PTR SS:[EBP-0x34] ; 具体来说就是两个数字为一组,共ABCDEFGH 8组
0074960E 68 90967400 PUSH 00749690 ; -
00749613 FF75 D4 PUSH DWORD PTR SS:[EBP-0x2C] ; 最后的顺序:DG-EB-FH-AC
00749616 FF75 E0 PUSH DWORD PTR SS:[EBP-0x20]
00749619 68 90967400 PUSH 00749690 ; -
0074961E FF75 D0 PUSH DWORD PTR SS:[EBP-0x30]
00749621 FF75 C8 PUSH DWORD PTR SS:[EBP-0x38]
00749624 68 90967400 PUSH 00749690 ; -
00749629 FF75 E4 PUSH DWORD PTR SS:[EBP-0x1C]
0074962C FF75 DC PUSH DWORD PTR SS:[EBP-0x24]
0074962F 8B45 F4 MOV EAX, DWORD PTR SS:[EBP-0xC]
00749632 BA 0B000000 MOV EDX, 0xB
00749637 E8 7CF0CBFF CALL 004086B8
……
……
0074989B 8B45 E8 MOV EAX, DWORD PTR SS:[EBP-0x18] ; 堆栈 SS:[0012F0C4]=012DB6CC, (UNICODE "2522-2222-2225-1198")
0074989E 33C9 XOR ECX, ECX
007498A0 BA 30997400 MOV EDX, 00749930 ; -
……
0074AAE1 84C0 TEST AL, AL
0074AAE3 74 25 JE SHORT 0074AB0A
0074AAE5 8B45 FC MOV EAX, DWORD PTR SS:[EBP-0x4]
0074AAE8 8B90 F8030000 MOV EDX, DWORD PTR DS:[EAX+0x3F8]
0074AAEE 8B45 FC MOV EAX, DWORD PTR SS:[EBP-0x4]
0074AAF1 8B80 F4030000 MOV EAX, DWORD PTR DS:[EAX+0x3F4]
0074AAF7 E8 38EEFFFF CALL 00749934
0074AAFC 84C0 TEST AL, AL
0074AAFE 74 14 JE SHORT 0074AB14
0074AB00 8B45 FC MOV EAX, DWORD PTR SS:[EBP-0x4]
0074AB03 E8 C88AE7FF CALL 005C35D0
0074AB08 EB 0A JMP SHORT 0074AB14
0074AB0A B8 4CAB7400 MOV EAX, 0074AB4C ; 注册码不正确,请重新输入!
0074AB0F E8 9CF8FFFF CALL 0074A3B0
0074AB14 33C0 XOR EAX, EAX
…………