| 注册算法分析 |
| 责任编辑:admin 更新日期:2005-8-6 |
|
|
目的:属技术交流,无其它目的,请不要任意散布或用用商业用途。初学破解,如有不对的地方欢迎批评指出。
工具:softice,w32Dasm,ollydbg
试炼码:
机器码:558109930
注册码:654321
一看是VB程序,心里就有点怕,而且还用到浮点运算,心里更怕,但看了一下,注册算法还算简单,于是就凑合着写篇教程。用log大法,定位
注册核心模块。
以下为从od中摘取的代码,“;”后是我加的注解。
00999837 . 50 PUSH EAX
00999838 . 57 PUSH EDI
00999839 . 8B17 MOV EDX,DWORD PTR DS:[EDI]
0099983B . FF92 A0000000 CALL DWORD PTR DS:[EDX+A0] ; 取输入的注册码654321
00999841 . 3BC6 CMP EAX,ESI
00999843 . DBE2 FCLEX ; 清除所有异常标志
00999845 . 7D 12 JGE SHORT mj.00999859
00999847 . 68 A0000000 PUSH 0A0
0099984C . 68 0CE84500 PUSH mj.0045E80C
00999851 . 57 PUSH EDI
00999852 . 50 PUSH EAX
00999853 . FF15 58104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaHresu>; MSVBVM60.__vbaHresultCheckObj
00999859 > 8B4D E8 MOV ECX,DWORD PTR SS:[EBP-18] ; 输入的注册码入ecx
0099985C . 51 PUSH ECX
0099985D . FF15 8C114000 CALL DWORD PTR DS:[<&MSVBVM60.#581>] ; MSVBVM60.rtcR8ValFromBstr
00999863 . FF15 8C104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFpR8>>; MSVBVM60.__vbaFpR8
00999869 . DD9D 20FFFFFF FSTP QWORD PTR SS:[EBP-E0] ; 上面注册码转换为浮点数。此句为把转换注册码存入[ebp-
e0]
0099986F . DB85 4CFFFFFF FILD DWORD PTR SS:[EBP-B4] ; 取机器码,此为558109930
00999875 . DD9D 18FFFFFF FSTP QWORD PTR SS:[EBP-E8] ; 保存
0099987B . DD85 18FFFFFF FLD QWORD PTR SS:[EBP-E8] ; 取机器码,入st0
00999881 . 833D 00209A00>CMP DWORD PTR DS:[9A2000],0 ; 判断机器码是否为0
00999888 . 75 08 JNZ SHORT mj.00999892
0099988A . DC35 A0114000 FDIV QWORD PTR DS:[4011A0] ; 机器码除以44221(d)
00999890 . EB 11 JMP SHORT mj.009998A3 ; 得数12620.925126071323579294905135569
00999892 > FF35 A4114000 PUSH DWORD PTR DS:[4011A4]
00999898 . FF35 A0114000 PUSH DWORD PTR DS:[4011A0]
0099989E . E8 817EA6FF CALL <JMP.&MSVBVM60._adj_fdiv_m64>
009998A3 > DC05 98114000 FADD QWORD PTR DS:[401198] ; 然后加上427616(d)
009998A9 . DFE0 FSTSW AX ; 保存浮点状态字
009998AB . A8 0D TEST AL,0D
009998AD . 0F85 31040000 JNZ mj.00999CE4
009998B3 . FF15 78114000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFPInt>; MSVBVM60.__vbaFPInt
009998B9 . FF15 8C104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFpR8>>; MSVBVM60.__vbaFpR8
009998BF . DC9D 20FFFFFF FCOMP QWORD PTR SS:[EBP-E0] ; 上面为将浮点数转换为整数,这句是比较与输入的注册码是
否相等
009998C5 . DFE0 FSTSW AX ; 保存浮点状态字
009998C7 . F6C4 40 TEST AH,40
009998CA . 74 07 JE SHORT mj.009998D3
009998CC . B8 01000000 MOV EAX,1
009998D1 . EB 02 JMP SHORT mj.009998D5
009998D3 > 33C0 XOR EAX,EAX
009998D5 > F7D8 NEG EAX
009998D7 . 66:8BF8 MOV DI,AX
009998DA . 8D55 E4 LEA EDX,DWORD PTR SS:[EBP-1C]
009998DD . 8D45 E8 LEA EAX,DWORD PTR SS:[EBP-18] ; 注册码入eax
009998E0 . 52 PUSH EDX
009998E1 . 50 PUSH EAX
009998E2 . 6A 02 PUSH 2
009998E4 . FF15 30114000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeS>; MSVBVM60.__vbaFreeStrList
009998EA . 83C4 0C ADD ESP,0C
009998ED . 8D4D D4 LEA ECX,DWORD PTR SS:[EBP-2C]
009998F0 . FF15 88114000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeO>; MSVBVM60.__vbaFreeObj
009998F6 . 66:3BFE CMP DI,SI
009998F9 0F84 8E020000 JE mj.00999B8D &[1] [2] [3] [4] 下一页 |
|
| 上一篇文章: ShowDep 4.0 beta 1 |
| 下一篇文章: 大名鼎鼎II V2.12 算法分析 |
|
|
|
|