程序破解基本知识
程式如何保护:
最通常是用你的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就行了。
[转]破解预备知识
一.机械码,又称机器码.
ultraedit打开,编辑exe文件时你会看到
许许多多的由0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F组成的数码,这些数码
就是机器码.
修改程序时必须通过修改机器码来修改exe文件.
二.需要熟练掌握的全部汇编知识(只有这么多)
不大容易理解,可先强行背住,混个脸儿熟,以后慢慢的就理解了
cmp a,b 比较a与b
mov a,b 把b的值送给a
ret 返回主程序
nop 无作用,英文“no operation”的简写,意思是“do nothing”(机器码90)***机器码的含义参看上面
(解释:ultraedit打开编辑exe文件时你看到90,等同于汇编语句nop)
call 调用子程序
je 或jz 若相等则跳(机器码74 或0F84)
jne或jnz 若不相等则跳(机器码75或0F85)
jmp 无条件跳(机器码EB)
jb 若小于则跳
ja 若大于则跳
jg 若大于则跳
jge 若大于等于则跳
jl 若小于则跳
jle 若小于等于则跳
pop 出栈
push 压栈
三.常见修改(机器码)
74=>75 74=>90 74=>EB
75=>74 75=>90 75=>EB
jnz->nop
75->90(相应的机器码修改)
jnz -> jmp
75 -> EB(相应的机器码修改)
jnz -> jz
75->74 (正常) 0F 85 -> 0F 84(特殊情况下,有时,相应的机器码修改)
四.两种不同情况的不同修改方法
1.修改为jmp
je(jne,jz,jnz) =>jmp相应的机器码EB (出错信息向上找到的第一个跳转)jmp的作用是绝对跳,无条件跳,从而跳过下面的出错信息
xxxxxxxxxxxx 出错信息,例如:注册码不对,sorry,未注册版不能...,"Function Not Avaible in Demo" 或 "Command Not Avaible" 或 "Can't save in Shareware/Demo"等 (我们希望把它跳过,不让它出现)
。。。
。。。
xxxxxxxxxxxx 正确路线所在
2.修改为nop
je(jne,jz,jnz) =>nop相应的机器码90 (正确信息向上找到的第一个跳转) nop的作用是抹掉这个跳转,使这个跳转无效,失去作用,从而使程序顺利来到紧跟其后的正确信息处
xxxxxxxxxxxx 正确信息,例如:注册成功,谢谢您的支持等(我们希望它不被跳过,让它出现,程序一定要顺利来到这里)
。。。
。。。
xxxxxxxxxxxx 出错信息(我们希望不要跳到这里,不让它出现)
。。。
。。。
五.爆破无敌口诀 背会此口诀,天下无敌,以后慢慢琢磨,仔细体会,收益多多。如此好的口诀,不要错过
一条(跳)就死,九筒(90)就胡 (对应上面的2.修改为nop)
一条(跳)就胡,一饼(EB)伺候 (对应上面的1.修改为jmp)
妻死(74)便妻无(75)
爸死(84)便爸无(85)