汇编语言命令

一,破解时常用的汇编指令如下,汇编较弱者可先强行背住,以后就可慢慢理解了。 
cmp a,b //比较a与b 
mov a,b //把b的值送给a,使a=b 
ret //返回主程序 
nop //无作用,英文"no operation"的简写,意思是"do nothing"(机器码90) (解释:ultraedit打开编辑exe文件时看到90,等同于汇编语句nop) 
call //调用子程序,子程序以ret结尾 
je 或jz //若相等则跳(机器码74 或0F84) 
jne或jnz //若不相等则跳(机器码75或0F85) 
jmp //无条件跳(机器码EB) 
jb //若小于则跳 
ja //若大于则跳 
jg //若大于则跳 
jge //若大于等于则跳 
jl //若小于则跳 
jle //若小于等于则跳 
pop xx //xx出栈 
push xx //xx压栈 
更为详细的指令请查阅汇编书籍。 
4.破解常见修改,参看表1。 
汇编指令修改         相应的机器码修改(通过16进制编辑器实现) 
jnz/jne->nop         75->90 
jnz/jne -> jmp         75-> EB 
jz/je->nop         74->90 
jz/je -> jmp         74-> EB 
jnz -> jz         75->74 或 0F 85 -> 0F 84 
jz -> jnz         74->75 或 0F 84 -> 0F 85 
jnz -> jz         75->74 或 0F 85 -> 0F 84 
je-> jne         74->75 或 0F 84 -> 0F 85 
1 破解常见修改 
(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 正确路线所在,直接跳转到这里。(图3) 


(2)修改为nop 
je(jne,jz,jnz) =>nop相应的机器码90 (正确信息向上找到的第一个跳转),nop的作用是抹掉这个跳转,使这个跳转无效,失去作用,从而使程序顺利来到紧跟其后的正确信息处。例如: 
xxxxxxxxxxxx 正确信息,如注册成功,谢谢您的支持等,我们希望它不被跳过,让它出现,所以程序一定要顺利来到这里,不能跳转。在OD中,我们一般是把不需要设置NOP,只是把JE或者JNZ改为JNZ或者JE即可,也就是把相等则跳改为不相等则跳,或者不相等则跳改为相等则跳,把跳转过程相反,达到更改程序流程的目的。 
…… 
xxxxxxxxxxxx 出错信息,我们希望不要跳到这里,不让它出现!(图4) 



二,如何快速确定爆破物。 
1,确定目标有没有加壳。没有最好了,有的话看是不是常见壳,可不可以用现有脱壳软件快速脱掉。搞不定的话,暂时放弃它。“我吃定你了!”,不要这样,老兄。不就是一壳么,不要和他一般见识。记着,你今天的重点是爆破。不要主次不分、本末倒置,这也是初学者最易犯的错误。 
这方面,我用PEID。它可以整合到资源菜单,非常方便。 
2,确定用什么语言编写。我的经验是,DELPHI的程序结构清晰、紧凑,最好分析。其次是VC,BC,ASM,比较难的是VB,要有一定的经验才可搞定一两个。 

2,在反汇编文件中找到可疑点。   
经典语句自不用说,比如,“恭喜”,“注册成功”,“注册码错误”“无效的注册码”,“Thank You","Sorry"...找到后,一般向上不远处就可看到条件转移语句JZ、JNZ、JLE什么的。 
事实上,只有极少极少的软件只修改注册判断就OK的。所以我们要把更多的注意力转到其它的可疑点。如未注册标识,过期警告,次数标识,NAG对话框...,熟练使用各种工具的搜索功能是基本功之一。找到后再向上不远处找条件转移语句。 
三,如何爆破。 
当你找准爆破点后,你会发现有很多种爆破的方法都可以达目的。 

1,修改转移语句。 
我一般这样改: 
不需要跳,我就把JNE改为JE或者把JE改为JNZ 
需要跳,我就把JE或者JNZ改为JMP。 
这可避免万一你有正确的注册码反而会出错的事情发生。 
下面的附件我做了一个关于爆破的视频教程,希望对大家理解爆破有帮助。 
4.动态追踪破解技巧-破解经典句式 
以下是经典的比较组合,常常是注册码的出现处,所以被称为破解经典句式。 
(1) 
mov eax,[ ] //这里可以是地址,也可以是其他寄存器或mov eax [ ]。 
mov edx,[ ] //同上,通常这两个地址就储存着重要信息或者可以是pop edx。 
call XXXXXXXX //关键call。 
test eax,eax //eax为标志位。 
jz(jnz)或 jne(je) //关键跳转。 
(2) 
mov eax,[ ] //这里可以是地址,也可以是其他寄存器。 
mov edx,[ ] //或是pop edx,通常该地址就储存着重要信息。 
call XXXXXXXX //关键call。 
jne(je) //关键跳转。 
(3) 
mov eax,[ ] //这里可以是地址,也可以是其他寄存器 
mov edx,[ ] //同上,通常储存着重要信息 
cmp eax,edx //关键比较。 
jnz(jz) //关键跳转。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值