- UID
- 58584
注册时间2009-1-25
阅读权限30
最后登录1970-1-1
龙战于野
TA的每日心情 | 慵懒 2015-10-9 11:25 |
---|
签到天数: 1 天 [LV.1]初来乍到
|
本帖最后由 老万 于 2010-7-18 22:10 编辑
今天我破解了一个PYG软件库里边一个软件,分析了它的算法,推出了注册码,注册后显示“注册成功”,软件重启后进行网络验证,仍显示未注册,修改启动验证时的跳转,可以得到完美的破解版,但是如果电脑不联网的话,软件就启动不了,希望高手分析一下,我的分析过程如下:
【目标程序:】机动车驾驶人考试培训系统2010(速成版)
【下载地址:】http://down.qiannao.com/space/file/zgmap/share/2010/7/13/Setup(2010.4.1all).rar
【PEID査壳:】 Borland Delphi 6.0 - 7.0
【破解过程:】
下面直接来到关键地方:
005FAC6A . 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C]
005FAC6D . E8 EEE4FFFF CALL jzks.005F9160 ; 启动时验证算法
005FAC72 . 8B95 54FEFFFF MOV EDX,DWORD PTR SS:[EBP-1AC] ; 机器码
005FAC78 . 8B45 F0 MOV EAX,DWORD PTR SS:[EBP-10] ; 注册码加密计算后的值
005FAC7B . E8 04A1E0FF CALL jzks.00404D84 ; 机器码与注册码加密计算后的值进行比较,如果相等的话,就注册成功
005FAC80 0F85 9A000000 JNZ jzks.005FAD20 ; 关键跳
005FAC86 . 8B45 E8 MOV EAX,DWORD PTR SS:[EBP-18]
005FAC89 . BA DCAE5F00 MOV EDX,jzks.005FAEDC ; pass
005FAC8E . E8 F1A0E0FF CALL jzks.00404D84 ; 判断验证是否通过
005FAC93 . 74 0F JE SHORT jzks.005FACA4 ; 软件注册码如果网络验证通过的话,此处就跳,成为全功能版
005FAC95 . 8B45 EC MOV EAX,DWORD PTR SS:[EBP-14]
005FAC98 . BA DCAE5F00 MOV EDX,jzks.005FAEDC ; pass
005FAC9D . E8 E2A0E0FF CALL jzks.00404D84
005FACA2 75 7C JNZ SHORT jzks.005FAD20 ; 关键跳
005FACA4 > 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
注册时的验证:
005EB07C . E8 B7FCFFFF CALL jzks.005EAD38 ; 注册时候验证算法
此外,软件还有加密和解密注册码算法,如下:
005FAB15 . E8 46E6FFFF CALL jzks.005F9160 ; 启动时解密注册码算法
005EB1CB . E8 10FAFFFF CALL jzks.005EABE0 ; 注册成功后加密注册码算法
进入启动时算法CALl 005F9160
。。。。。。。。。。。。。
005F915D ? 3A5C00 55 CMP BL,BYTE PTR DS:[EAX+EAX+55]
005F9161 |. 8BEC MOV EBP,ESP
005F9163 |. 83C4 D0 ADD ESP,-30
005F9166 |. 53 PUSH EBX
005F9167 |. 56 PUSH ESI
005F9168 |. 57 PUSH EDI
005F9169 |. 33DB XOR EBX,EBX
005F916B |. 895D D0 MOV DWORD PTR SS:[EBP-30],EBX
005F916E |. 895D D8 MOV DWORD PTR SS:[EBP-28],EBX
005F9171 |. 895D D4 MOV DWORD PTR SS:[EBP-2C],EBX
005F9174 |. 895D E0 MOV DWORD PTR SS:[EBP-20],EBX
005F9177 |. 895D DC MOV DWORD PTR SS:[EBP-24],EBX
005F917A |. 895D E8 MOV DWORD PTR SS:[EBP-18],EBX
005F917D |. 894D F4 MOV DWORD PTR SS:[EBP-C],ECX
005F9180 |. 8955 F8 MOV DWORD PTR SS:[EBP-8],EDX ; 字符串"bigfish1"
005F9183 |. 8945 FC MOV DWORD PTR SS:[EBP-4],EAX ; 注册码
005F9186 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
005F9189 |. E8 9ABCE0FF CALL jzks.00404E28
005F918E |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
005F9191 |. E8 92BCE0FF CALL jzks.00404E28
005F9196 |. 33C0 XOR EAX,EAX
005F9198 |. 55 PUSH EBP
005F9199 |. 68 BD925F00 PUSH jzks.005F92BD
005F919E |. 64:FF30 PUSH DWORD PTR FS:[EAX]
005F91A1 |. 64:8920 MOV DWORD PTR FS:[EAX],ESP
005F91A4 |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
005F91A7 |. E8 8CBAE0FF CALL jzks.00404C38 ; 取长度
005F91AC |. 8945 F0 MOV DWORD PTR SS:[EBP-10],EAX
005F91AF |. 837D F0 00 CMP DWORD PTR SS:[EBP-10],0
005F91B3 |. 75 0D JNZ SHORT jzks.005F91C2
005F91B5 |. 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8]
005F91B8 |. BA D4925F00 MOV EDX,jzks.005F92D4 ; bigfish1
005F91BD |. E8 4EB8E0FF CALL jzks.00404A10
005F91C2 |> 33FF XOR EDI,EDI
005F91C4 |. 8D45 DC LEA EAX,DWORD PTR SS:[EBP-24]
005F91C7 |. 50 PUSH EAX
005F91C8 |. B9 02000000 MOV ECX,2
005F91CD |. BA 01000000 MOV EDX,1
005F91D2 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
005F91D5 |. E8 BEBCE0FF CALL jzks.00404E98 ; 从第1位取注册码2位
005F91DA |. 8B4D DC MOV ECX,DWORD PTR SS:[EBP-24]
005F91DD |. 8D45 E0 LEA EAX,DWORD PTR SS:[EBP-20]
005F91E0 |. BA E8925F00 MOV EDX,jzks.005F92E8 ; $
005F91E5 |. E8 9ABAE0FF CALL jzks.00404C84
005F91EA |. 8B45 E0 MOV EAX,DWORD PTR SS:[EBP-20]
005F91ED |. E8 860CE1FF CALL jzks.00409E78
005F91F2 |. 8945 EC MOV DWORD PTR SS:[EBP-14],EAX
005F91F5 |. BE 03000000 MOV ESI,3 ; ESI=3
005F91FA |> 8D45 D4 /LEA EAX,DWORD PTR SS:[EBP-2C]
005F91FD |. 50 |PUSH EAX
005F91FE |. B9 02000000 |MOV ECX,2
005F9203 |. 8BD6 |MOV EDX,ESI
005F9205 |. 8B45 FC |MOV EAX,DWORD PTR SS:[EBP-4]
005F9208 |. E8 8BBCE0FF |CALL jzks.00404E98 ; 从第ESI位取注册码2位
005F920D |. 8B4D D4 |MOV ECX,DWORD PTR SS:[EBP-2C]
005F9210 |. 8D45 D8 |LEA EAX,DWORD PTR SS:[EBP-28]
005F9213 |. BA E8925F00 |MOV EDX,jzks.005F92E8 ; $
005F9218 |. E8 67BAE0FF |CALL jzks.00404C84
005F921D |. 8B45 D8 |MOV EAX,DWORD PTR SS:[EBP-28]
005F9220 |. E8 530CE1FF |CALL jzks.00409E78
005F9225 |. 8945 E4 |MOV DWORD PTR SS:[EBP-1C],EAX
005F9228 |. 3B7D F0 |CMP EDI,DWORD PTR SS:[EBP-10]
005F922B |. 7D 03 |JGE SHORT jzks.005F9230
005F922D |. 47 |INC EDI
005F922E |. EB 05 |JMP SHORT jzks.005F9235
005F9230 |> BF 01000000 |MOV EDI,1
005F9235 |> 8B45 F8 |MOV EAX,DWORD PTR SS:[EBP-8] ; "bigfish1"
005F9238 |. 33DB |XOR EBX,EBX
005F923A |. 8A5C38 FF |MOV BL,BYTE PTR DS:[EAX+EDI-1] ; 依次取字符串 "bigfish1"的ASCII码值依次送入BL
005F923E |. 335D E4 |XOR EBX,DWORD PTR SS:[EBP-1C] ; 注册码2位与上面的ASCII码值异或
005F9241 |. 3B5D EC |CMP EBX,DWORD PTR SS:[EBP-14] ; 异或值与注册码前两位值进行比较
005F9244 |. 7F 0B |JG SHORT jzks.005F9251
005F9246 |. 81C3 FF000000 |ADD EBX,0FF ; 如果小的话,加上0FF
005F924C |. 2B5D EC |SUB EBX,DWORD PTR SS:[EBP-14] ; 减去前2位的值
005F924F |. EB 03 |JMP SHORT jzks.005F9254
005F9251 |> 2B5D EC |SUB EBX,DWORD PTR SS:[EBP-14] ; 减去注册码前2位的值
005F9254 |> 8D45 D0 |LEA EAX,DWORD PTR SS:[EBP-30]
005F9257 |. 8BD3 |MOV EDX,EBX ; 差值送入EDX
005F9259 |. E8 02B9E0FF |CALL jzks.00404B60
005F925E |. 8B55 D0 |MOV EDX,DWORD PTR SS:[EBP-30]
005F9261 |. 8D45 E8 |LEA EAX,DWORD PTR SS:[EBP-18]
005F9264 |. E8 D7B9E0FF |CALL jzks.00404C40
005F9269 |. 8B45 E4 |MOV EAX,DWORD PTR SS:[EBP-1C]
005F926C |. 8945 EC |MOV DWORD PTR SS:[EBP-14],EAX
005F926F |. 83C6 02 |ADD ESI,2 ; ESI+2
005F9272 |. 8B45 FC |MOV EAX,DWORD PTR SS:[EBP-4] ; 注册码送入EAX
005F9275 |. E8 BEB9E0FF |CALL jzks.00404C38
005F927A |. 3BF0 |CMP ESI,EAX
005F927C |.^ 0F8C 78FFFFFF \JL jzks.005F91FA
005F9282 |. 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C]
005F9285 |. 8B55 E8 MOV EDX,DWORD PTR SS:[EBP-18]
005F9288 |. E8 3FB7E0FF CALL jzks.004049CC
。。。。。。。。。。。。。。。。。
算法总结:
1,取注册码前2位,记为L,变量i初始化为1
2,从注册码第(i+2)位取2位,记为M
3,依次取字符串 "bigfish1"的ASCII码值,与M异或
4,异或值与L进行比较(如果小于L的话,异或值加上加上0FF,再进行下面计算),异或值减去L,结果转换为字符,记为S(i)
5,令L=M,变量i=i+2
6,重复2~5的过程,最后把S(i)连接起来,组成一个字符串,记为SZ
7,机器码与SZ进行比较,如果相同,就注册成功。
我的机器码:4MT257LQ ,逆算出来一组注册码:1224180B5BF942E609
下面是我用注册码注册成功的插图
重新启动后,打开题库显示如下:
如果爆破的话,只需修改
005FAC80 JNZ jzks.005FAD20
为:
005FAC80 JMP jzks.005FACA4
就能爆破成功,但是电脑不连网 的话,软件就打不开,希望高手帮忙解决一下,让我这样的菜鸟学习一下? |
|