(1).数据寄存器: 存放数据
EAX、EBX、ECX、EDX
(2).指针寄存器: 主要用途就是在存储器寻址时,提供偏移地址.
ESP、EBP、EDI、ESI
ESP(堆栈指针寄存):是以“后进先出”方式工作的一个存储区,它必须存在于堆栈段中.
EBP(基址指针寄存器):
ESI(源变址寄存器):
EDI(目的变址寄存器):
2.数据传输指令:
MOV-------传送字或字节
PUSH------把字压入堆栈
POP-------把字弹出堆栈
PUSHA-----把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈.
POPA------把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈.
PUSHAD----把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈.
POPAD-----把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈.
3.算术运算指令:
ADD-------加法.
SUB-------减法.
INC-------加 1
DEC-------减 1
MUL-------无符号乘法
DIV--------无符号除法
4.逻辑运算指令
AND------与运算
OR-------或运算
XOR------异或运算
NOT------取反
5.无条件转移指令
JMP--------无条件转移指令
CALL-------过程调用
RET/RETF----过程返回
6.条件转移指令
jE--------等于转移
jNE-------不等于时转移
JZ---------等于转移
JNZ--------不等于时转移
JB---------小于转移
JNB--------大于或等于转移
JA---------不小于或不等于时转移
JNA--------小于或等于转移
JG--------大于转移
JNG-------小于或等于转移
JC-------有进位时转移
JNC------无进位时转移
JP------奇偶性为偶数时转移
JNP-----奇偶性为奇数时转移
7.其它
nop-----在汇编中代表空指令,不执行任何代码.
Mov edi,edi-----效果与nop一样.
注:编写花指令,可参考以下成双指令,可任意自由组合.达到免杀效果.
push ebp push eax push esp push 0 push 10 -------其中数字可以任意,注意与下面对应 nop -----------可任意在中间添加
add esp,1 --------其中数字可以任意,注意以下面对应 inc ecx sub eax, -2 ----------其中数字可任意,与dec的个数对应 add eax -2 ----------其中数字可任意,与inc的个数对应 sub eax,5------------其中数字可以任意,注意以下面对应 jmp 下一个jmp地址
jmp 入口地址 ------跳到程序入口地址 push 入口地址 jb 入口地址 mov eax,入口地址
手动编写例子 push ebp
花指令的变形技巧. ================= jz 若相等则跳 jnz 若不相等则跳 jb 若相等则跳 jnb 若不相等则跳 jmp 无条件跳 =================
加花方法 加花的方法: 修改方法 1.去除法
特征码修改的几种方法. 这里,我们就介绍几种常见的修改办法。 1. 大小写替换法(可识别的字符.当然 函数表是除外的) 2. 加1减1法 3. 用 00 填充 4. 跳转法 (把特征码用 汇编语言跳到空白区域) 5. 上下代码互换. 6. 改相等含义的代码.
|
收集花指令一:
往回跳转0040639B 00 db 00
xxxxxx: nop /
/|/ POP EAX |看了,其实这两部分就是花指令
| POP EAX |
| POP EAX /
| JMP yyyyyy (跳回旧入口点:406046)
|
|
| push ebp 004063AA <-新入口点:
| mov ebp,esp
| inc ecx
| push edx
| nop
| pop edx
| dec ecx
| pop ebp
| inc ecx
| MOV DWORD PTR FS:[0],EAX /
| POP EAX |
| POP EAX /
| MOV DWORD PTR FS:[0],EAX |(注意了。。花指令)
| POP EAX /
| POP EAX |
| MOV DWORD PTR FS:[0],EAX /
| loop xxxxxx
|_________________++++++(转到地址:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.
2。C++的花指令
push ebp
mov ebp,esp
push -1
push 111111
push 222222
mov eax,fs:[0]
push eax
mov fs:[0],esp
pop eax
mov fs:[0],eax
pop eax
pop eax
pop eax
pop eax
mov ebp,eax
jmp 跳转到程序原来入口点
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
3。VC++ 5.0
push ebp
mov ebp,esp
push -1
push 515448
push 6021A8
mov eax,dword ptr fs:[0]
push eax
mov dword ptr fs:[0],esp
add esp,-6c
push ebx
push esi
push edi
jmp 跳转到程序原来的入口点
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
跳转
somewhere:
nop /"胡乱"跳转的开始...
jmp 下一个jmp的地址 /在附近随意跳
jmp ... /...
jmp 原入口的地址 /跳到原始oep
--------------------------------------------------
新入口: push ebp
mov ebp,esp
inc ecx
push edx
nop
pop edx
dec ecx
pop ebp
inc ecx
loop somewhere /跳转到上面那段代码地址去!
跳转 花指令 加在c ++ 的后面,多跳几次过卡巴是最容易的了,呵呵·
算是一个小窍门吧·
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
1。 VC++ 5.0
PUSH EBP
MOV EBP,ESP
PUSH -1
push 515448
PUSH 6021A8
MOV EAX,DWORD PTR FS:[0]
PUSH EAX
MOV DWORD PTR FS:[0],ESP
ADD ESP,-6C
PUSH EBX
PUSH ESI
PUSH EDI
jmp 跳转到程序原来的入口点
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
2。c ++
push ebp
mov ebp,esp
push -1
push 111111
push 222222
mov eax,fs:[0]
push eax
mov fs:[0],esp
pop eax
mov fs:[0],eax
pop eax
pop eax
pop eax
pop eax
mov ebp,eax
jmp 跳转到程序原来的入口点
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
3。跳转
somewhere:
nop /"胡乱"跳转的开始...
jmp 下一个jmp的地址 /在附近随意跳
jmp ... /...
jmp 原入口的地址 /跳到原始oep
--------------------------------------------------
新入口: push ebp
mov ebp,esp
inc ecx
push edx
nop
pop edx
dec ecx
pop ebp
inc ecx
loop somewhere /跳转到上面那段代码地址去!
jmp somewhere
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
4。Microsoft Visual C++ 6.0
push ebp
mov ebp,esp
PUSH -1
PUSH 0
PUSH 0
MOV EAX,DWORD PTR FS:[0]
PUSH EAX
MOV DWORD PTR FS:[0],ESP
SUB ESP,68
PUSH EBX
PUSH ESI
PUSH EDI
POP EAX
POP EAX
POP EAX
ADD ESP,68
POP EAX
MOV DWORD PTR FS:[0],EAX
POP EAX
POP EAX
POP EAX
POP EAX
MOV EBP,EAX
JMP 原入口
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
5。
在mov ebp,eax
后面加上
PUSH EAX
POP EAX
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
6.
push ebp
mov ebp,esp
add esp,-0C
add esp,0C
mov eax,403D7D
push eax
retn
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
push ebp
mov ebp,esp
push -1
push 00411222
push 00411544
mov eax,dword ptr fs:[0]
push eax
mov dword ptr fs:[0],esp
add esp,-6C
push ebx
push esi
push edi
add byte ptr ds:[eax],al
jo 入口
jno 入口
call 下一地址
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
7.
push ebp
nop
nop
mov ebp,esp
inc ecx
nop
push edx
nop
nop
pop edx
nop
pop ebp
inc ecx
loop 任意地址
nop
nop
———————————————
nop
nop
jmp 下一个jmp的地址 /在附近随意跳
nop
jmp 下一个jmp的地址 /在附近随意跳
nop
jmp 下一个jmp的地址 /在附近随意跳
jmp 入口
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
PUSH EBP
MOV EBP,ESP
nop
nop
PUSH -1
nop
nop
push 515448
nop
nop
PUSH 6021A8
nop
nop
MOV EAX,DWORD PTR FS:[0]
PUSH EAX
MOV DWORD PTR FS:[0],ESP
nop
nop
MOV EAX,DWORD PTR FS:[1]
PUSH EAX
MOV DWORD PTR FS:[1],ESP
nop
nop
MOV EAX,DWORD PTR FS:[2]
PUSH EAX
MOV DWORD PTR FS:[2],ESP
nop
nop
mov eax,fs:[0]
push eax
mov fs:[0],esp
nop
nop
inc ecx
push eax
pop eax
push edx
nop
pop edx
dec ecx
pop ebp
inc ecx
nop
nop
ADD ESP,-6C
PUSH EBX
PUSH ESI
PUSH EDI
jmp 跳转到程序原来的入口点
-------------------------
UPX 花指令
pushad
mov esi,m.0044D000
lea edi,dword ptr ds:[esi+FFFB4000]
push edi
or ebp,FFFFFFFF
jmp short m.00477F2A
00477F00 m> 60 pushad
00477F01 > BE 00D04400 mov esi,m.0044D000
00477F06 . 8DBE 0040FBFF lea edi,dword ptr ds:[esi+FFFB4000>
00477F16 . 57 push edi
00477F17 . 83CD FF or ebp,FFFFFFFF
00477F1A . EB 0E jmp short m.00477F2A
花指令 收集2
全代码:
代码如下: 神话
nop
nop
nop
mov ebp,esp
push -1
push 111111
push 222222
mov eax,dword ptr fs:[0]
push eax
mov dword ptr fs:[0],esp
pop eax
mov dword ptr fs:[0],eax
pop eax
pop eax
pop eax
pop eax
mov ebp,eax
mov eax,原入口
push eax
retn
代码如下: 无极
nop
mov ebp, esp
push -1
push 0A2C2A
push 0D9038
mov eax, fs:[0]
push eax
mov fs:[0], esp
pop eax
mov fs:[0], eax
pop eax
pop eax
pop eax
pop eax
mov ebp, eax
mov eax, 原入口
jmp eax
代码如下: 金刚
nop
nop
mov ebp, esp
push -1
push 415448
push 4021A8
mov eax, fs:[0]
push eax
mov fs:[0], esp
add esp, -6C
push ebx
push esi
push edi
add [eax], al
mov eax,原入口
jmp eax
代码如下: 杀破浪
nop
mov ebp, esp
push -1
push 0
push 0
mov eax, fs:[0]
push eax
mov fs:[0], esp
sub esp, 68
push ebx
push esi
push edi
pop eax
pop eax
pop eax
add esp, 68
pop eax
mov fs:[0], eax
pop eax
pop eax
pop eax
pop eax
mov ebp, eax
mov eax, 原入口
jmp eax
代码如下: 痴情大圣
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
push ebp
mov ebp, esp
add esp, -0C
add esp, 0C
mov eax, 原入口
push eax
retn
代码如下: 如果*爱
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
push ebp
mov ebp, esp
inc ecx
push edx
nop
pop edx
dec ecx
pop ebp
inc ecx
mov eax, 原入口
jmp eax