一、机械码,又称机器码.
许许多多的由0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F组成的数码,这些数码
就是机器码.
修改程序时必须通过修改机器码来修改exe文件.
二、需要熟练掌握的全部汇编知识(只有这么多)
不大容易理解,可先强行背住,混个脸儿熟,以后慢慢的就理解了
cmp a,b 比较a与b
test 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)就胡
一条(跳)就胡,一饼(EB)伺候
妻死(74)便妻无(75)
爸死(84)便爸无(85)
————————————————————————————————————
1.算术运算符
ADC:带进位加法
ADD:二进制数加法
DEC:减一
DIV:无符号数除法
IDIV:带符号数(整数)除法
IMUL:带符号数(整数)乘法
INC:加一
MUL:无符号书乘法
NEG:求补
SBB:带借位减法
SUB:二进制减法
XADD:交换并相加
2.ASCII-BCD转换
AAA:加后ASCII调整
AAD:除前ASCII调整
AAM:乘后ASCII调整
AAC:减后ASCII调整
DAA:加后十进制调整
DAS:减后十进制调整
3.移位
RCL:带进位循环左移
RCR:带进位循环右移
ROL:循环左移
ROR:循环右移
SAL:算术左移
SAR:算术右移
SHL:逻辑左移
SHR:逻辑右移
SHLD:双精度左移
SHRD:双精度右移
4.比较
BSF/BSR:位扫描
BT/BTC/BR/BB:位测试
CMP:比较
CMPSN:串比较
CMPXCHG:比较交换
CMPXCHG8B:比较并换?lt;br>TEST:测试位
5.数据传送
LDS:装如数据段寄存器
LEA:装入有效地址
LES:装入附加段寄存器
LODS:从串取
LSS:装入堆栈段寄存器
MOV:传送数据
MOVS:串传送
MOVSX:带符号扩展传送
MOVZX:带零扩展传送
STOS:存入串
XCHG:交换
XLAT:换码
6.标志操作
CLC:清除位标志
CLD:清除方向标志
CLI:清除中断标志
CMC:进位标志求反
LAHF:标志送AH
POPF:标志出栈
PUSHF:标志进栈
SAHF:AH送标志寄存器
STC:进位标志置1
CTD:方向标志置1
STI:中断标志置1
7.输入/输出
IN:输入字节或字
INSN:串输入
OUT:输出字节或字
OUTSN:穿输出
8.逻辑操作
AND:逻辑与
NOT:逻辑非
OR:逻辑或
XOR:异或
9.循环
LOOP:循环直到完成
LOOPE:相等时循环
LOOPZ:为零是循环
LOOPNE:不相等时循环
LOOPPNZ:不为零是循环
LOOPPNEW:不相等时循环
LOOPNZW:不为零时循环
10.处理器控制
HLT:进入暂停状态
LOCK:封锁总线
NOP:无操作
WAIT:置处理器于等待状态
11.堆栈操作
ENTER:建立堆栈帧
LEAVE:结束堆栈帧
POP:字出栈
POPF:标志出栈
POPA:所有通用寄存器出栈
PUSH:字进栈
PUSHA:所有通用积存器进栈
PUSHF:标志进栈
12.串操作
CMPS:串比较
LODS:从串取
MOVS:串传送
REP:串重复
REPE:相等时重复
REPZ:为零时重复
REPNE:不相等时重复
REPNZ:不为零时重复
SCAS:串扫描
STDS:存入串
13.转移(条件)
INT溢出中断
JA:高于则转移
JAE:高于或等于则转移
JB:低于则转移
JBE:低于或等于则转移
JC:进位为1则转移
JCXZ:CX为零则转移
JE:相等则转移
JG:大于则转移
JGE:大于或等于则转移
JL:小于则转移
JLE:小于或等于
JNC:进位为零则转移
JNE:不相等则转移
JNG:不大于则转移
JNGE:不大于或等于则转移
JNL:不小于则转移
JNLE:不小于或等于则转移
JNA:不高于则转移
JNB:不低于则转移
JNBE:不低于或等于则转移
JNAE:不高于或等于则转移
JN不溢出则转移
JNP:奇偶位为0则转移
JNZ:结果不为零则转移
JNS:结果为正则转移
J若溢出则转移
JP:奇偶位为1则转移
JPE:奇偶性为偶则转移
JP奇偶性为奇则转移
JS:结果为负则转移
JZ:结果为零则转移
14.转移(无条件)
CALL:调用过程
INT:中断
IRET:中断返回
JMP:无条件转移
RET:返回
RETN/RETF:近返回/远返回
15.类型转换
CBW:字节转换为字
CDQ:双字转换为四字
CWD:字转换为双字
CWDE:字转换为扩展的双字





加载中…