複製鏈接
請複製以下鏈接發送給好友

花指令

鎖定
花指令是,由設計者特別構思,希望使反彙編的時候出錯,讓破解者無法清楚正確地反彙編程序的內容,迷失方向。經典的是,目標位置是另一條指令的中間,這樣在反彙編的時候便會出現混亂。花指令有可能利用各種指令:jmp, call, ret的一些堆棧技巧,位置運算,等等。
中文名
花指令
外文名
Junk Code
類    型
程序中有一些指令
經典實例
跳轉指令
編寫步驟
6步

花指令代碼

【深層】偽裝 PEtite 2.2 -> Ian Luck 彙編代碼:
============================
偽裝代碼部分:
============================
mov eax,0040E000
push 004153F3
push dword ptr fs:[0]
mov dword ptr fs:[0],esp
pushfw
pushad
push eax
xor ebx,ebx
pop eax
popad
popfw
pop dword ptr fs:[0]
pop eax
jmp XXXXXXXX '執行到程序的原有OEP
============================
【深層】偽裝 WCRT Library (Visual C++) DLL Method 1 -> Jibz 二進制代碼 + 彙編代碼:
============================
偽裝代碼部分:
============================
使用二進制粘貼以下代碼:
55 8B EC 83 7D 0C 01 75 41 A1 C0 30 00 10 85 C0 74 0A FF D0 85 C0 75 04 6A FE EB 17 68 0C 30 00 10 68 08 30 00 10 E8 89 00 00 00 85 C0 59 59 74 08 6A FD FF 15 08 20 00 10 68 04 30 00 10 68 00 30 00 10 E8 52 00 00 00 59 59
粘貼完畢後,再添加2行彙編語句:
jmp XXXXXXXX '執行到程序的原有OEP
retn 0C
1。偽裝 vc
VC++程序的入口代碼:
PUSH EBP
MOV EBP,ESP
PUSH -1
push 415448 -\___
PUSH 4021A8 -/ 在這段代碼中類似這樣的操作數可以亂填
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 /這條指令可以不要!
jmp 跳轉到程序原來的入口點
******************************************************************************************
2。跳轉
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 /跳轉到上面那段代碼地址去!
3. 偽裝 C
融合
把A的代碼換成B的
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 老入口
4. 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
5.Microsoft Visual C++ 6.0
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 原入口
6.
在mov ebp,eax
後面加上
PUSH EAX
POP EAX
7:
防殺精靈一號防殺代碼:
push ebp
mov ebp,esp
push -1
push 666666
push 888888
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
jmp 入口
8:
防殺精靈二號防殺代碼:
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 入口
9.
防殺精靈終極防殺代碼
push ebp
mov ebp,esp
add esp,-0C
add esp,0C
push eax
jmp入口
10:
木馬綵衣(金色魚錦衣)花代碼
push ebp
mov ebp,esp
add esp,-0C
add esp,0C
mov eax,原入口
push eax
retn
11:
木馬綵衣(蝦米披風)花代碼
push ebp
nop
nop
mov ebp,esp
inc ecx
nop
push edx
nop
nop
pop edx
nop
pop ebp
inc ecx
loopd /跳轉到下面那段代碼地址去!
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
nop /"胡亂"跳轉的開始...
jmp 下一個jmp的地址 /在附近隨意跳
jmp ... /...
jmp 原入口的地址 /跳到原始oep
12.
VC++5.0代碼(木馬綵衣無限復活袍):
PUSH EBP
MOV EBP,ESP
PUSH -1
push 415448 -\___
PUSH 4021A8 -/ 在這段代碼中類似這樣的操作數可以亂填
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 00401000 /原入口
jno 00401000 /原入口
db 0e8h /花代碼

花指令花指令生成器

一、寫花指令生成器必備知識
1、花指令原理
花指令是程序中的無用代碼,程序對它沒影響,少了它也能正常運行。加花指令後,殺毒軟件對木馬靜態反彙編時,木馬的代碼就不會正常顯示出來,加大殺毒軟件的查殺難度。
2、如何寫花指令
下面我們先看看一段花指令,分析理解它的原理:
PUSH EBP
MOV EBP,ESP
push edx
pop edx
inc ecx
dec ecx
add esp,21
add esp,-21
add esp,10
sub esp,10
JMP 附近空地址隨便亂跳
JMP 原入口點
花指令一般有三部分,開頭就是PUSH EBP和MOV EBP,ESP這兩句在大部分程序開頭可以經常看到。PUSH EBP是把EBP壓入堆棧,MOV EBP,ESP是把ESP的值賦給EBP,不懂沒關係,只要知道PUSH EBP和MOV EBP,ESP這兩句經常出現在文件開頭就可以了,隨便用OllyDbg打開一個不加殼的文件載入後經常停在PUSH EBP MOV EBP,ESP。
接下來就是花指令啦,push edx是把通用寄存器EDX壓入堆棧,pop edx是把通用寄存器EDX彈出堆棧,這兩句和起來就相當於什麼也沒做。接下來的inc ecx,ecx用來保存計數值,也是寄存器,INC是加1;下面的dec ecx中的dec是減1,加1減1相抵消,又是什麼也沒做。add esp,21這是寄存器esp加21,add是加上,下面一句add esp,-21是寄存器esp加-21,小學知識,+21+(-21)=0,還是什麼也沒做。再下來add esp,10寄存器esp加21,sub esp,10寄存器esp減10,sub是減去。一個+10,一個-10相互抵消了。
最後是跳轉語句,我用兩句JMP,第一句在花指令附近隨便跳到個空地址,第二個JMP是從空地址跳回文件的原入口點。
3、如何寫入花指令
我們來看看加花指令的一般步驟:
1、準備好要加的花指令;
2、準備未加殼的黑客軟件;
3、用OllyDbg打開這個黑客軟件,記下入口點的內存地址;
4、找到零地址,一句一句寫入花指令,再用JMP跳回程序入口點;(如果找不到空白地址,我們可以用zeroadd加區段,英文軟件,我漢化好的,操作簡單就不演示了。)
5、保存後用Peditor修改文件入口點為開始寫花指令的地址。這樣運行程序就先運行花指令再跳回程序的原始開頭執行程序了;
6、檢測程序是否正常運行和免殺效果。