OD破解基本的认识

一、机械码,又称机器码.

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 压栈

 三、两种不同情况的不同修改方法

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 出错信息(我们希望不要跳到这里,不让它出现)

注:跳转指令分三类:
一、无条件跳转: JMP;
二、根据 CX、ECX 寄存器的值跳转: JCXZ(CX 为 0 则跳转)、JECXZ(ECX 为 0 则跳转);
三、根据 EFLAGS 寄存器的标志位跳转,

常见跳转
指令
JE  
JNE
JZ  
JNZ 
解释
等于则跳转
不等于则跳转
为 0 则跳转
不为 0 则跳转
指令
JS 
JNS 
JC
 
JNC
 
解释
为负则跳转
 
不为负则跳转
 
进位则跳转
 
不进位则跳转
 
指令
JO  
JNO
JA 
JNA
解释
溢出则跳转
不溢出则跳转
无符号大于则跳转
无符号不大于则跳转
指令
JAE
JNAE
JG 
JNG
解释
无符号大于等于则跳转
无符号不大于等于则跳转
有符号大于则跳转
有符号不大于则跳转
指令
JGE 
JNGE 
 
JB 
 
JNB 
 
解释
有符号大于等于则跳转
 
有符号不大于等于则跳转
 
无符号小于则跳转
 
无符号不小于则跳转
 
指令 
JBE
 
JNBE
 
JL  
JNL 
 
解释 
无符号小于等于则跳转
 
无符号不小于等于则跳转
 
有符号小于则跳转
 
有符号不小于则跳转
 
指令 
JLE
 
JNLE
 
JP 
 
JNP
 
解释 
有符号小于等于则跳转
 
有符号不小于等于则跳转
 
奇偶位置位则跳转
 
奇偶位清除则跳转
 
指令 
JPE
 
JPO
 
   
解释 
奇偶位相等则跳转
 
奇偶位不等则跳转
 
   


posted @ 2020-10-16 14:54  wenmo  阅读(215)  评论(0)    收藏  举报