PersonalCorpus 版 (精华区)
发信人: CF (网事随风), 信区: Hacker
标 题: 第三章 破解windows 95软件的方法
发信站: 哈工大紫丁香 (2000年09月18日09:14:34 星期一), 站内信件
特徵是当未注册时, 一进去会有延迟画面, 可能有时效限制(30天後不能用之类),
在某个地方有个注册功能, 打开之後是个对话框, 要求输入密码, 有时还有姓名和公司
名称.
程式如何判断注册与否?
通常两种方式:
1. 在程式码的某一处, 藏有 "注册印记". 如00表未注册, 01为已注册. 当然也有
很奇怪的数字, 如 f8 03 表已注册.
2. install 时程式开 *.ini, 或写入 win.ini, 把资料存在那里.
程式如何保护:
最通常是用你的name当作key, 经过复杂演算法, 算出注册码。但也有一些并不是
用你的name当作key算注册码的,而是name与注册码无关,注册码是固定,name是随便
输入就可以了。对于前者,较容易可算出注册码,而后者要算注册码就不是一件容易的
事了。关于两者的具体处理方法,会在下面文章详细介绍。
注册处理:
1. 当输入name, company, password 後, 立即比对, 正确的话立即做注册处理, 以後
再也不判断, 不正确要求再输入. 不输入 name 的话, 保持 shareware 版.
2. 同1, 但以後一执行程式还是会判断.
3. 输入时不比对, 只写入资料於 *.ini, 程式执行时再比对.
对于第一种情况,是最容易破解的了,因为只要找到软件注册时的比较失败窗口的call,
在向上找一找,就可以找到一个可以跳过这个call的jz或jnz,只要把这个jz改为jmp,
就可以随便注册了,因为它们的只进行一次性的比较,所以只要在注册时强行使它们注
册成功,则以后就不用管了。
它们的一般形式为:
xxxx:xxxxxxxx call 比较注册码的call
xxxx:xxxxxxxx test eax , eax
xxxx:xxxxxxxx jnz (或jz) xxxxxxxx 只要把这个jnz 改为jmp 就可以了
:
:
xxxx:xxxxxxxx call 比较失败的窗口的call
对于第二,第三种情况,就不能这么简单地破解了,而要追进比较注册码的call里去,
如果可以算出注册码的,就万事大吉了,如果不能,就比较地麻烦了,只有按下面介绍
的方法进行crack了,要知软件始终不是你写的,所以不可能所有的软件都可以crack的,
只能各凭功力了。对于不能简单地算出注册码的软件,我们的唯一的方法是先在比较注
册码的call里,设一个断点,然后再重新运行软件,如果软件被中断的,那么这个软件
就有八成可以破解了,只要在比较注册码的call里找到那些jz或jnz会导致eax的值变化,
把这些指令改为nop或jmp(视具体情况而定),则一般都可以迎韧而解了。
对于第一种情况的破解实例:
Hex32bit
这是一个多功能的编辑软件,有很强大的功能,是一个很好用的32位工具软件。
1.输入Registeration code:48484848(随意)
2.按CTRL-D 进入WIN S-ICE
3.下S 30:0 LFFFFFFF '48484848' 得一地址30:XXXXXXXX
4.下BPM 30:XXXXXXXX R
5.按F5 退出
6.用鼠标击Register
7.程序被WIN S-ICE 中断
8.按F12回到Hworks32的天空
9.直按F10至以下程式:
0137:0041635F CALL 00426A70 比较密码的CALL
0137:00416364 ADD ESP , 04
0137:00416367 MOV [EBP-10] , EAX
0137:0041636A CMP DWORD PTR [ EBP-10 ] , 00
0137:0041636E JZ 004163ED 错误时跳,只要改为nop…………就OK了
:
:
0137:004163E8 JMP 00416440
:
:
0137:0041640D CALL 004354EE 出现注册失败窗口的CALL
所以下code on 抄下机器代码,打开Hworks32.exe
找0f8479000000
改909090909090
OK!!!完工。
对于第二种情况的破解实例:
FLMASK3.00
1. 用WINSOFT-ICE载入FLMASK32.EXE
2. 输入Your Name :Ru Feng(随意)
Registration Key : 48484848(随意)
3. 按CTRL-D进入WINSOFT-ICE ,下S 30:0 LFFFFFFFF '48484848'得一地址30:XXXX
4. 下BPM 30:XXXX R
5. 按F5退出
6. 确定Registration
7. 程序被WINSOFT-ICE中断
8. 按F12跳到FLMASK32的天空
9. 按F10直到以下程式:
0137:00452D1F CALL 00443118 比较注册码CALL
0137:00452D24 TEST AL , AL
0137:00452D24 JZ 00452E89 不正确时就跳
:
:
0137:00452E89 MOV DX , 0030
0137:00452E8D MOV EAX , 00001CFC
0137:00452E92 CALL 00443A54 出现错误窗口
10. 所以我们追进0137:00452D1F CALL 00443118中去
一直走下支会见到以下程式:
0137:00443145 CALL 00403BCC
0137:0044314A CMP EAX , 08 比较注册码是否8个数字
0137:0044314D JNZ 00443209 不等则跳,跳就失败
:
:
0137:004431BF CALL 004076A4 比较注册码是否正确
0137:004431BF CMP ESI , EAX
0137:004431C6 JNZ 00443209 不正确则跳
所以由汇编知识可知,只要把CMP ESI,EAX改为MOV EAX,ESI
把JNZ 00443209 改为NOP NOP
把JNZ 00443209 改为NOP NOP
则随意输入数字都可以注册了。
赶快下CODE ON指令抄下程序代码:
码0F85B6000000
改909090909090
码3BF07541
改8BC69090
用ULTRAEDIT32改FLMASK32.EXE就行了。
对于第三种情况的破解实例:
winzip6.3
1. 输入Name:Ru Feng(随意)
2. 输入Registeration:48484848(随意)
3. 按CTRL—D 进入WIN S-ICE
4. 下S 30:0 LFFFFFFF '48484848' 得一地址30:XXXXXXXX
5. 下BPM 30:XXXXXXXX R
6. 按F5 退出
7. 用鼠标击Ok
8. 程序被WIN S-ICE 中断
9. 按F12回到WINZIP的天空
10. 直按F10至以下程式:
0137:00409D89 CALL 004096EA 比较注册码的CALL
0137:00409D8E TEST EAX,EAX 注册码不正确时EAX=00000000
0137:00409D90 JNZ 00409DD3 当注册码正确就跳
:
:
0137:00409DA8 CALL 004230FD 弹出注册失败的窗口
11.追进CALL 004096EA 按F10一直走,会见到以下程式
0137:004097FC PUSH EAX
0137:004097FD CALL 004465D0 比较注册码的CALL
0137:00409802 POP ECX
0137:00409803 POP ECX
0137:00409804 NEG EAX
0137:00409806 SBB EAX,EAX
0137:00409808 INC EAX
0137:00409809 MOV [004728F8],EAX 当EAX=00000001时注册码正确
0137:0040980E CMP DWORD PTR [004728F8] , 00
0137:00409815 JNZ 004098A6 正确时跳
12.追进CALL 004465D0 按F10一直走,会见到以下程式
0137:004465EC OR AL,AL
0137:004465EE JZ 0044661E
0137:004465F0 MOV AL,[ESI] 在此下D DS:ESI可看到所填写的注册码‘48484848’
0137:004465F2 INC ESI
0137:004465F3 MOV AH,[EDI] 在此下D DS:EDI 可看到正确的注册码‘8A0A07ab’
0137:004465F5 INC EDI
0137:004465F6 CMP AH,AL 比较注册码地方
0137:004465F8 JZ 004465EC
你用Ru Feng作名字可找到‘8A0A07ab’这组注册码。
而对于那些注册码是固定的软件,破解就不是那么有规律了,只能各凭技巧了,具体情
况具体分析了。
例:
winplay3 2.0
1. 输入Your Name:Ru Feng(随意)
2. 输入Registeration code:48484848(随意)
3. 按CTRL—D 进入WIN S-ICE
4. 下S 30:0 LFFFFFFF '48484848' 得一地址30:XXXXXXXX
5. 下BPM 30:XXXXXXXX R
6. 按F5 退出
7. 用鼠标击Register
8. 程序被WIN S-ICE 中断
9. 按F12回到WINPLAY3的天空
10. 直按F10至以下程式:
2C6F:XXXX CALL 2F17: 3D72 比较注册码
2C6F:XXXX OR DX,AX
2C6F:XXXX JNZ C632 不跳则显示成功窗口
至
2C6F:C632 PUSH 21
2C6F:C634 PUSH 0000FFFF
2C6F:C63A CALL 2C6F: 22AE 出现错误窗口
11. 按F8追进去CALL 2F17: 3D72
至
2F17:3E76 CALL 2F17: 357E
再追进去
至
2F17:35C6 PUSH DWORD PTR [BP+06]
2F17:35CA CALL 2F17: 340E
追进去至以下比较程式:
2F17:346F XOR AX,AX
REPNZ SCASB
NOT CX
DEC CX
CMP CX,12 表示正确注册码有18个数字
JNZ 3554 不等就跳,一跳就完了,所以改为四个NOP。
CMP BYTE PTR ES:[SI+06], 2D 说明正确注册码的格式为:
XXXXXX-XXXXXX-XXXX
JNZ 354E 不等就跳,一跳就完了,所以改为四个NOP。
CMP BYTE PTR ES:[SI+0D],2D
JNZ 354E 不等就跳,一跳就完了,所以改为四个NOP。
…………….
…………….
CALL 30F7: 25C0 比较注册码
ADD SP , 02
CMP AX , SI
JZ 34F6 相等就跳,所以改为JMP 34F6
……………..
……………..
CALL 30F7: 25C0
ADD SP , 02
MOV SI , AX
CMP SI, [1D36]
JGE 3522 跳则正确,不跳则错误,所以改为JMP 3522
…………….
…………….
12. 下CODE ON 把所有要改的机器码都抄下来,用ULTRAEDIT32在L3AUDIO.DLL中
修改。
机器码 改
0F85D700 90909090
0F85C800 90909090
0F85BF00 90909090
83C4023BC67406 83C4023BC6EB06
8BF03B36361D7D06 8BF03B36361D7D06
--
再不学习,你就要......
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.227.121]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:4.833毫秒