输入假码
用户名:BeyondMe
注册码:1234567890
出现错误提示:“注册码不对,返回错误码:0”
注意还有“返回码”呢,第一印象,可能注册码经过网络检测。先不理,查ASCII到关键算法处。
00407710 . 6A FF PUSH -1 ; 注册按钮事件
00407712 . 68 90524E00 PUSH BurnCD.004E5290
00407717 . 64:A1 0000000>MOV EAX,DWORD PTR FS:[0]
0040771D . 50 PUSH EAX
0040771E . 83EC 18 SUB ESP,18
……省略N行代码……
004078B3 . 5E POP ESI
004078B4 . 5D POP EBP
004078B5 . 5B POP EBX
004078B6 . 83C4 24 ADD ESP,24 ; 以上检测用户名及注册码是否输入
004078B9 . C3 RETN
004078BA > 8D4C24 20 LEA ECX,DWORD PTR SS:[ESP+20]
004078BE . 6A 01 PUSH 1
004078C0 . 51 PUSH ECX
004078C1 . E8 0AFDFFFF CALL BurnCD.004075D0 ; 返回唯一ID,用于后面的网络验证
004078C6 . 83C4 08 ADD ESP,8
004078C9 . 8B4C24 20 MOV ECX,DWORD PTR SS:[ESP+20]
004078CD . 3959 F4 CMP DWORD PTR DS:[ECX-C],EBX
004078D0 . C64424 34 02 MOV BYTE PTR SS:[ESP+34],2
004078D5 . 75 3A JNZ SHORT BurnCD.00407911
004078D7 . 53 PUSH EBX ; /Arg3
004078D8 . 53 PUSH EBX ; |Arg2
004078D9 . 68 10A74E00 PUSH BurnCD.004EA710 ; |无法取得唯一id!
004078DE . E8 468C0A00 CALL BurnCD.004B0529 ; \BurnCD.004B0529
004078E3 . 8B4424 20 MOV EAX,DWORD PTR SS:[ESP+20]
004078E7 . 83C0 F0 ADD EAX,-10
004078EA . C64424 34 01 MOV BYTE PTR SS:[ESP+34],1
004078EF . 8D50 0C LEA EDX,DWORD PTR DS:[EAX+C]
004078F2 . 83C9 FF OR ECX,FFFFFFFF
004078F5 . F0:0FC10A LOCK XADD DWORD PTR DS:[EDX],ECX ; 锁定前缀
004078F9 . 49 DEC ECX
004078FA . 85C9 TEST ECX,ECX
004078FC .^ 0F8F 54FFFFFF JG BurnCD.00407856
00407902 . 8B08 MOV ECX,DWORD PTR DS:[EAX]
00407904 . 8B11 MOV EDX,DWORD PTR DS:[ECX]
00407906 . 50 PUSH EAX
00407907 . 8B42 04 MOV EAX,DWORD PTR DS:[EDX+4]
0040790A . FFD0 CALL EAX
0040790C .^ E9 45FFFFFF JMP BurnCD.00407856
00407911 > 8B4424 18 MOV EAX,DWORD PTR SS:[ESP+18] ; 用户名
00407915 . 8BF9 MOV EDI,ECX ; 唯一id
00407917 . 50 PUSH EAX
00407918 . 8D4C24 28 LEA ECX,DWORD PTR SS:[ESP+28]
0040791C . 51 PUSH ECX
0040791D . 8BF0 MOV ESI,EAX
0040791F . 895C24 30 MOV DWORD PTR SS:[ESP+30],EBX
00407923 . E8 E8FBFFFF CALL BurnCD.00407510 ; 核心算法
00407928 . 8B5424 24 MOV EDX,DWORD PTR SS:[ESP+24] ; EDX返回真正注册码
0040792C . 33C9 XOR ECX,ECX
0040792E . 83C4 08 ADD ESP,8
00407931 . 3BD3 CMP EDX,EBX
00407933 . 0F95C1 SETNE CL
00407936 . 3BCB CMP ECX,EBX
00407938 . 75 0A JNZ SHORT BurnCD.00407944
0040793A . 68 05400080 PUSH 80004005
0040793F . E8 8C9CFFFF CALL BurnCD.004015D0
00407944 > 8B00 MOV EAX,DWORD PTR DS:[EAX]
00407946 . 52 PUSH EDX
00407947 . 50 PUSH EAX
00407948 . E8 06480C00 CALL BurnCD.004CC153 ; 比较过程
0040794D . 83C4 08 ADD ESP,8
00407950 . 3BC3 CMP EAX,EBX
00407952 . 0F94C0 SETE AL
00407955 . 3AC3 CMP AL,BL
00407957 . 74 1D JE SHORT BurnCD.00407976 ; 如果注册码不正确则跳走
00407959 . 8D5424 28 LEA EDX,DWORD PTR SS:[ESP+28] ; 如果正确则进一步网络验证
0040795D . 52 PUSH EDX
0040795E . 57 PUSH EDI
0040795F . 56 PUSH ESI
00407960 . 68 04894E00 PUSH BurnCD.004E8904 ; burncd
00407965 . E8 36620A00 CALL BurnCD.004ADBA0 ; 网络验证注册码及唯一码
0040796A . 83C4 10 ADD ESP,10
0040796D . 85C0 TEST EAX,EAX
0040796F . C64424 17 01 MOV BYTE PTR SS:[ESP+17],1
00407974 . 75 04 JNZ SHORT BurnCD.0040797A
00407976 > 885C24 17 MOV BYTE PTR SS:[ESP+17],BL ; (初始 cpu 选择)
0040797A > 8D4C24 24 LEA ECX,DWORD PTR SS:[ESP+24]
0040797E . E8 0D97FFFF CALL BurnCD.00401090
00407983 . 385C24 17 CMP BYTE PTR SS:[ESP+17],BL
00407987 . 74 3C JE SHORT BurnCD.004079C5 ; 关键跳转
00407989 . 8B4424 18 MOV EAX,DWORD PTR SS:[ESP+18]
0040798D . 50 PUSH EAX
0040798E . E8 0DF9FFFF CALL BurnCD.004072A0
00407993 . 8B4C24 20 MOV ECX,DWORD PTR SS:[ESP+20]
00407997 . 51 PUSH ECX
00407998 . E8 93F9FFFF CALL BurnCD.00407330
0040799D . 83C4 08 ADD ESP,8
004079A0 . 53 PUSH EBX ; /Arg3
004079A1 . 53 PUSH EBX ; |Arg2
004079A2 . 68 04A74E00 PUSH BurnCD.004EA704 ; |注册成功!
004079A7 . C705 E8EF5000>MOV DWORD PTR DS:[50EFE8],1 ; |
004079B1 . E8 738B0A00 CALL BurnCD.004B0529 ; \BurnCD.004B0529
004079B6 . 8B55 00 MOV EDX,DWORD PTR SS:[EBP]
004079B9 . 8B82 50010000 MOV EAX,DWORD PTR DS:[EDX+150]
004079BF . 8BCD MOV ECX,EBP
004079C1 . FFD0 CALL EAX
004079C3 . EB 3A JMP SHORT BurnCD.004079FF
004079C5 > 8D4C24 24 LEA ECX,DWORD PTR SS:[ESP+24]
004079C9 . E8 52A8FFFF CALL BurnCD.00402220
004079CE . 8B4C24 28 MOV ECX,DWORD PTR SS:[ESP+28]
004079D2 . 51 PUSH ECX
004079D3 . 8D5424 28 LEA EDX,DWORD PTR SS:[ESP+28]
004079D7 . 68 E8A64E00 PUSH BurnCD.004EA6E8 ; 注册码不对,返回错误码: %d
……省略N行代码……
00407A2A . 83C4 24 ADD ESP,24
00407A2D . C3 RETN
------------
主过程先对用户名和注册码是否输入进行检测,然后获得唯一ID,再对注册码进行检测,如果注册码被接受,则进一步把
注册码和唯一ID发送到网上进一步验证,如果通过验证则返回注册成功。
我们先分析一下注册码的生成过程。
00407923 . E8 E8FBFFFF CALL BurnCD.00407510 ; 核心算法
00407510 /$ 6A FF PUSH -1 ; 核心算法
00407512 |. 68 D9514E00 PUSH BurnCD.004E51D9
004