如何去除连网限制?
本帖最后由 老万 于 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:
005FAC6D .E8 EEE4FFFF CALL jzks.005F9160 ;启动时验证算法
005FAC72 .8B95 54FEFFFF MOV EDX,DWORD PTR SS: ;机器码
005FAC78 .8B45 F0 MOV EAX,DWORD PTR SS: ;注册码加密计算后的值
005FAC7B .E8 04A1E0FF CALL jzks.00404D84 ;机器码与注册码加密计算后的值进行比较,如果相等的话,就注册成功
005FAC80 0F85 9A000000 JNZ jzks.005FAD20 ;关键跳
005FAC86 .8B45 E8 MOV EAX,DWORD PTR SS:
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:
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:
注册时的验证:
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:
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:,EBX
005F916E|.895D D8 MOV DWORD PTR SS:,EBX
005F9171|.895D D4 MOV DWORD PTR SS:,EBX
005F9174|.895D E0 MOV DWORD PTR SS:,EBX
005F9177|.895D DC MOV DWORD PTR SS:,EBX
005F917A|.895D E8 MOV DWORD PTR SS:,EBX
005F917D|.894D F4 MOV DWORD PTR SS:,ECX
005F9180|.8955 F8 MOV DWORD PTR SS:,EDX ;字符串"bigfish1"
005F9183|.8945 FC MOV DWORD PTR SS:,EAX ;注册码
005F9186|.8B45 FC MOV EAX,DWORD PTR SS:
005F9189|.E8 9ABCE0FF CALL jzks.00404E28
005F918E|.8B45 F8 MOV EAX,DWORD PTR SS:
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:
005F91A1|.64:8920 MOV DWORD PTR FS:,ESP
005F91A4|.8B45 F8 MOV EAX,DWORD PTR SS:
005F91A7|.E8 8CBAE0FF CALL jzks.00404C38 ;取长度
005F91AC|.8945 F0 MOV DWORD PTR SS:,EAX
005F91AF|.837D F0 00 CMP DWORD PTR SS:,0
005F91B3|.75 0D JNZ SHORT jzks.005F91C2
005F91B5|.8D45 F8 LEA EAX,DWORD PTR SS:
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:
005F91C7|.50 PUSH EAX
005F91C8|.B9 02000000 MOV ECX,2
005F91CD|.BA 01000000 MOV EDX,1
005F91D2|.8B45 FC MOV EAX,DWORD PTR SS:
005F91D5|.E8 BEBCE0FF CALL jzks.00404E98 ;从第1位取注册码2位
005F91DA|.8B4D DC MOV ECX,DWORD PTR SS:
005F91DD|.8D45 E0 LEA EAX,DWORD PTR SS:
005F91E0|.BA E8925F00 MOV EDX,jzks.005F92E8 ;$
005F91E5|.E8 9ABAE0FF CALL jzks.00404C84
005F91EA|.8B45 E0 MOV EAX,DWORD PTR SS:
005F91ED|.E8 860CE1FF CALL jzks.00409E78
005F91F2|.8945 EC MOV DWORD PTR SS:,EAX
005F91F5|.BE 03000000 MOV ESI,3 ;ESI=3
005F91FA|>8D45 D4 /LEA EAX,DWORD PTR SS:
005F91FD|.50 |PUSH EAX
005F91FE|.B9 02000000 |MOV ECX,2
005F9203|.8BD6 |MOV EDX,ESI
005F9205|.8B45 FC |MOV EAX,DWORD PTR SS:
005F9208|.E8 8BBCE0FF |CALL jzks.00404E98 ;从第ESI位取注册码2位
005F920D|.8B4D D4 |MOV ECX,DWORD PTR SS:
005F9210|.8D45 D8 |LEA EAX,DWORD PTR SS:
005F9213|.BA E8925F00 |MOV EDX,jzks.005F92E8 ;$
005F9218|.E8 67BAE0FF |CALL jzks.00404C84
005F921D|.8B45 D8 |MOV EAX,DWORD PTR SS:
005F9220|.E8 530CE1FF |CALL jzks.00409E78
005F9225|.8945 E4 |MOV DWORD PTR SS:,EAX
005F9228|.3B7D F0 |CMP EDI,DWORD PTR SS:
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: ;"bigfish1"
005F9238|.33DB |XOR EBX,EBX
005F923A|.8A5C38 FF |MOV BL,BYTE PTR DS: ;依次取字符串 "bigfish1"的ASCII码值依次送入BL
005F923E|.335D E4 |XOR EBX,DWORD PTR SS: ;注册码2位与上面的ASCII码值异或
005F9241|.3B5D EC |CMP EBX,DWORD PTR SS: ;异或值与注册码前两位值进行比较
005F9244|.7F 0B |JG SHORT jzks.005F9251
005F9246|.81C3 FF000000 |ADD EBX,0FF ;如果小的话,加上0FF
005F924C|.2B5D EC |SUB EBX,DWORD PTR SS: ;减去前2位的值
005F924F|.EB 03 |JMP SHORT jzks.005F9254
005F9251|>2B5D EC |SUB EBX,DWORD PTR SS: ;减去注册码前2位的值
005F9254|>8D45 D0 |LEA EAX,DWORD PTR SS:
005F9257|.8BD3 |MOV EDX,EBX ;差值送入EDX
005F9259|.E8 02B9E0FF |CALL jzks.00404B60
005F925E|.8B55 D0 |MOV EDX,DWORD PTR SS:
005F9261|.8D45 E8 |LEA EAX,DWORD PTR SS:
005F9264|.E8 D7B9E0FF |CALL jzks.00404C40
005F9269|.8B45 E4 |MOV EAX,DWORD PTR SS:
005F926C|.8945 EC |MOV DWORD PTR SS:,EAX
005F926F|.83C6 02 |ADD ESI,2 ;ESI+2
005F9272|.8B45 FC |MOV EAX,DWORD PTR SS: ;注册码送入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:
005F9285|.8B55 E8 MOV EDX,DWORD PTR SS:
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 JMPjzks.005FACA4
就能爆破成功,但是电脑不连网 的话,软件就打不开,希望高手帮忙解决一下,让我这样的菜鸟学习一下? 看看去。
向老万同志学习... 我太菜了!等高手. 学习,学习 本帖最后由 月之精灵 于 2010-7-18 13:28 编辑
跟着小吴的后面排队
说实话,我下载不了文件哈,楼主试下链接看
想学习都找不着门,哎 回复 5# 月之精灵
月老大,我已经修改连接,你试试吧 跟着高手学习。。。。 对send下断 --> 找检测网络连通的地方 分析下网络数据,做个本地验证服务器就行了。 回复 9# brightsm
希望高手做个详细的教程,学习一下?
页:
[1]
2