必威电竞|足球世界杯竞猜平台

花指令
來(lái)源:互聯(lián)網(wǎng)

花指令是,由設(shè)計(jì)者特別構(gòu)思,希望使反匯編的時(shí)候出錯(cuò),讓破解者無(wú)法清楚正確地反匯編程序的內(nèi)容,迷失方向。經(jīng)典的是,目標(biāo)位置是另一條指令的中間,這樣在反匯編的時(shí)候便會(huì)出現(xiàn)混亂。花指令有可能利用各種指令:jmp, call, ret的一些堆棧技巧,位置運(yùn)算,等等。

代碼區(qū)分部

【深層】偽裝 PEtite 2.2 -> Ian Luck 匯編代碼:

============================

偽裝代碼部分:

============================

mov eax,0040E000

push 004153F3

push dword ptr fs:

mov dword ptr fs:,esp

pushfw

pushad

push eax

xor ebx,ebx

pop eax

popad

popfw

pop dword ptr fs:

pop eax

JMP XXXXXXXX '執(zhí)行到程序的原有OEP

============================

【深層】偽裝 WCRT Library (Visual C++) DLL Method 1 -> Jibz 二進(jìn)制代碼 + 匯編代碼:

============================

偽裝代碼部分:

============================

使用二進(jìn)制粘貼以下代碼:

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行匯編語(yǔ)句:

JMP XXXXXXXX '執(zhí)行到程序的原有OEP

retn 0C

1。偽裝 vc

VC++程序的入口代碼:

PUSH EBP

MOV EBP,ESP

PUSH -1

push 415448 -\___

PUSH 4021A8 -/ 在這段代碼中類似這樣的操作數(shù)可以亂填

MOV EAX,DWORD PTR FS:

PUSH EAX

MOV DWORD PTR FS:,ESP

ADD ESP,-6C

PUSH EBX

PUSH ESI

PUSH EDI

ADD 字節(jié) PTR DS:[EAX],AL /這條指令可以不要!

JMP 跳轉(zhuǎn)到程序原來(lái)的入口點(diǎn)

******************************************************************************************

2。跳轉(zhuǎn)

somewhere:

nop /"胡亂"跳轉(zhuǎn)的開(kāi)始...

jmp 下一個(gè)jmp的地址 /在附近隨意跳

jmp ... /...

jmp 原入口的地址 /跳到原始o(jì)ep

新入口: push ebp

mov ebp,esp

inc ecx

push edx

nop

pop edx

dec ecx

pop ebp

inc ecx

loop somewhere /跳轉(zhuǎn)到上面那段代碼地址去!

3. 偽裝 C

融合

把A的代碼換成B的

push ebp

mov ebp,esp

push -1

push 111111

push 222222

mov eax,fs:

push eax

mov fs:,esp

pop eax

mov fs:,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:

push eax

mov fs:,esp

pop eax

mov fs:,eax

pop eax

pop eax

pop eax

pop eax

mov ebp,eax

5.微軟 Visual C++ 6.0

PUSH -1

PUSH 0

PUSH 0

MOV EAX,DWORD PTR FS:

PUSH EAX

MOV DWORD PTR FS:,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:,EAX

POP EAX

POP EAX

POP EAX

POP EAX

MOV EBP,EAX

JMP 原入口

6.

在mov ebp,eax

后面加上

PUSH EAX

POP EAX

7:

防殺精靈一號(hào)防殺代碼:

push ebp

mov ebp,esp

push -1

push 666666

push 888888

mov eax,dword ptr fs:

push eax

mov dword ptr fs:,esp

pop eax

mov dword ptr fs:,eax

pop eax

pop eax

pop eax

pop eax

mov ebp,eax

JMP 入口

8:

防殺精靈二號(hào)防殺代碼:

push ebp

mov ebp,esp

push -1

push 0

push 0

mov eax,dword ptr fs:

push eax

mov dword ptr fs:,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:,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:

木馬彩衣(金色魚(yú)錦衣)花代碼

push ebp

mov ebp,esp

add esp,-0C

add esp,0C

mov eax,原入口

push eax

retn

11:

木馬彩衣(蝦米披風(fēng))花代碼

push ebp

nop

nop

mov ebp,esp

inc ecx

nop

push edx

nop

nop

pop edx

nop

pop ebp

inc ecx

loopd /跳轉(zhuǎn)到下面那段代碼地址去!

nop /"胡亂"跳轉(zhuǎn)的開(kāi)始...

JMP 下一個(gè)jmp的地址 /在附近隨意跳

jmp ... /...

jmp 原入口的地址 /跳到原始o(jì)ep

12.

VC++5.0代碼(木馬彩衣無(wú)限復(fù)活袍):

PUSH EBP

MOV EBP,ESP

PUSH -1

push 415448 -\___

PUSH 4021A8 -/ 在這段代碼中類似這樣的操作數(shù)可以亂填

MOV EAX,DWORD PTR FS:

PUSH EAX

MOV DWORD PTR FS:,ESP

ADD ESP,-6C

PUSH EBX

PUSH ESI

PUSH EDI

ADD 字節(jié) PTR DS:[EAX],AL /這條指令可以不要!

jo 00401000 /原入口

jno 00401000 /原入口

db 0e8h /花代碼

花指令生成器

一、寫花指令生成器必備知識(shí)

1、花指令原理

花指令是程序中的無(wú)用代碼,程序?qū)λ鼪](méi)影響,少了它也能正常運(yùn)行。加花指令后,殺毒軟件對(duì)木馬靜態(tài)反匯編時(shí),木馬的代碼就不會(huì)正常顯示出來(lái),加大殺毒軟件的查殺難度。

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 原入口點(diǎn)

花指令一般有三部分,開(kāi)頭就是PUSH EBP和MOV EBP,ESP這兩句在大部分程序開(kāi)頭可以經(jīng)常看到。PUSH EBP是把EBP壓入堆棧,MOV EBP,ESP是把ESP的值賦給EBP,不懂沒(méi)關(guān)系,只要知道PUSH EBP和MOV EBP,ESP這兩句經(jīng)常出現(xiàn)在文件開(kāi)頭就可以了,隨便用OllyDbg打開(kāi)一個(gè)不加殼的文件載入后經(jīng)常停在PUSH EBP MOV EBP,ESP。

接下來(lái)就是花指令啦,push edx是把通用寄存器EDX壓入堆棧,pop edx是把通用寄存器EDX彈出堆棧,這兩句和起來(lái)就相當(dāng)于什么也沒(méi)做。接下來(lái)的inc ecx,ecx用來(lái)保存計(jì)數(shù)值,也是寄存器,INC是加1;下面的dec ecx中的dec是減1,加1減1相抵消,又是什么也沒(méi)做。add esp,21這是寄存器esp加21,add是加上,下面一句add esp,-21是寄存器esp加-21,小學(xué)知識(shí),+21+(-21)=0,還是什么也沒(méi)做。再下來(lái)add esp,10寄存器esp加21,sub esp,10寄存器esp減10,sub是減去。一個(gè)+10,一個(gè)-10相互抵消了。

最后是跳轉(zhuǎn)語(yǔ)句,我用兩句JMP,第一句在花指令附近隨便跳到個(gè)空地址,第二個(gè)JMP是從空地址跳回文件的原入口點(diǎn)。

3、如何寫入花指令

我們來(lái)看看加花指令的一般步驟:

1、準(zhǔn)備好要加的花指令;

2、準(zhǔn)備未加殼的黑客軟件;

3、用OllyDbg打開(kāi)這個(gè)黑客軟件,記下入口點(diǎn)的內(nèi)存地址;

4、找到零地址,一句一句寫入花指令,再用JMP跳回程序入口點(diǎn);(如果找不到空白地址,我們可以用zeroadd加區(qū)段,英文軟件,我漢化好的,操作簡(jiǎn)單就不演示了。)

5、保存后用Peditor修改文件入口點(diǎn)為開(kāi)始寫花指令的地址。這樣運(yùn)行程序就先運(yùn)行花指令再跳回程序的原始開(kāi)頭執(zhí)行程序了;

6、檢測(cè)程序是否正常運(yùn)行和免殺效果。

參考資料 >

生活家百科家居網(wǎng)