OllyDBG 入门之二--破解预备知识

本文详细介绍了机器码的概念及用途,包括如何通过修改机器码来编辑exe文件,以及常见修改方法。同时,文章阐述了汇编语言的基本知识,如跳转命令、比较语句、子程序及算术运算,并提供了数据操作指令的实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、机械码,又称机器码
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)

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)

 

汇编语言的几条常用命令:


根据条件作出是否跳转的决定,通常前面会有一个判断语句,例如:
CMP AX,BX
JZ XX

上面两条命令意为用AX减BX,它的值如果为0则跳转到XX的标号行


常用的跳转命令有:

跳转命令

 

JZ/JE相等或为零为则跳转
JNZ/JNE不相等或不为零则跳转
JL/JLE小于/小于或等于则跳转
JG/JGE大于/大于或等于则跳转
JMP无条件跳转

 

比较语句

 

CMP AX,BXAX寄存器减去BX寄存器的内容
AND AX,BXAX与BX做"与运算"
OR AX,BXAX与BX做"或运算"
TEST AX,BX与 AND AX,BX 命令有相同效果
XOR AX,AX<?td>使AX的内容清零,每个寄存器与自己作异或运算等于清零动作.<?td>

 

子程式

一个子程的模样长得像这个样子:CALL 15F:334422,子程式是主程式的一个分支,用来做特定动作。
打个比方: 你要上班,先走路到车站,然后上车,然后下车,然后走到自己的办公室;
这里如果要把上班编为一段程式的话,那么就可以把"走路","搭车","走到办公室"做为分支程式来处理;
说得再通俗一点就是: 你要破解的程式不可能就是一条主程式到底,肯定会呼叫下面的子程式,由子程式来处理你发送的注册信息,然后比较,然后标记是否注册正确,这些都是靠它来完成的。
所以说,破解的关键在于,找准程式在哪儿将会作注册判断,并进入那个注册子程式,仔细观察,你就成功了,子程式的返回码是RET。

算术运算

 

ADD AX,BX加法运算 AX=AX+BX
SUB AX,BX减法运算 AX=AX-BX
INC AX寄存器加一 AX=AX+1
DEC AX寄存器减一 AX=AX-1
MUL乘法运算
DIV除法运算

 

数据操作

 

 

MOV AX,BX数据传送指令,将BX的值移送到AX中
XCHG AX,BX将AX与BX的值互换

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值