词条 | 花指令 |
释义 | 花指令是程序中有一些指令,由设计者特别构思,希望使反汇编的时候出错,让破解者无法清楚正确地反汇编程序的内容,迷失方向。经典的是一些跳转指令,目标位置是另一条指令的中间,这样在反汇编的时候便会出现混乱。花指令有可能利用各种指令:jmp, call, ret的一些堆栈技巧,位置运算,等等。 代码【深层】伪装 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加区段,E文软件,我汉化好的,操作简单就不演示了。) 5、保存后用Peditor修改文件入口点为开始写花指令的地址。这样运行程序就先运行花指令再跳回程序的原始开头执行程序了; 6、检测程序是否正常运行和免杀效果。 |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。