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
|
||
| 解释 |
奇偶位相等则跳转
|
奇偶位不等则跳转
|

浙公网安备 33010602011771号