通用加花免杀方案
我以windows自带的记事本程序为例,介绍基本的加花方法。
由于windows自带的记事本在块表后面紧跟着Bound Import数据,增加区块时会提示"PE空间不足"。
在这种情况下就需要清除Bound Import结构。大多数程序都没有Bound Import结构,除了少数windows自带的程序。
下面简单介绍一下清除Bound Import结构的方法:
1.用Stud_PE打开notepad.exe按照pic1的标记顺序依次点击.
观察"(3)",文件偏移0x1B0处被选中的数据是 50 02 00 00 D0 00 00 00 八个字节.
前4字节表示文件偏移地址0x00000250,后面4字节0x000000D0表示数据的长度.记好这8字节的数据
2.打开16进制编辑器,我用的是Hex Workshop,打开notepad.exe.
来到文件偏移0x1B0处正好是50 02 00 00 D0 00 00 00 这8个字节.
将这个8字节全部填充为0.修改好后如图pic2
3.再来到文件偏移地址0x00000250,选取0x000000D0长度的数据.
0x250+0xD0=0x320,选取数据从0x250开始到0x320结束.如图pic3,全部填充为0.
填充好后保存文件.保存好后再用Stud_PE查看notepad.exe的Bound Import结构,如图pic4已经清除成功了.
我们来运行一下notepad.exe,看有没有破坏文件.OK,运行程序未出现任何异常.说明修改成功.
清除Bound Import结构,现在增加区块就不会出现"PE空间不足"的提示了.
运行ZeroAdd.单击"Pack a file"按钮打开刚刚修改好的notepad.exe,输入区块名".hdh",
增加的字节数为0X1000.单击"Add new section!"就可以增加一个新块.如图pic5
用PEID查看一下notepad.exe,如图pic6可以看出已经成功增加了一个区块,区块名是".hdh",相对虚拟偏移是0x13000.
区块添加好了,那我们下面要做的就是向区块中添加花指令了.由于花指令尾部需要跳转到真正的入口点,
先查看一下notepad.exe真正的入口点是0x0000739D,镜象基址是0x01000000,这两个值很重要。如图pic7
接着用OllyDbg打开notepad.exe。OllyDbg停在下面代码处
0100739D > $ 6A 70 push 70 ;停在这里
0100739F . 68 98180001 push 01001898
010073A4 . E8 BF010000 call 01007568
010073A9 . 33DB xor ebx, ebx
010073AB . 53 push ebx ; /pModule => NULL
0x0100739D 这个就是入口点的内存地址,记下它。是怎么得来的呢?
是用入口点的偏移地址0x0000739D加上镜象基址0x01000000得来的。
刚刚添加的区块.hdh的相对虚拟偏移是0x13000,在图pic6中可看到。
相对虚拟偏移0x13000加上镜象基址0x01000000得到
0x01013000,这个就是.hdh区块在内存中的地址了。
在OllyDbg里按CTRL+G 输入地址0x01013000来到.hdh区块。。。可以看到里面是一片全0的空间,
花指令就写在这里面。
我在下面就用这段花指令作试范。
【深层】伪装 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
============================
这段花指令是从网上找来的,网上遍地都是花指令,以后免杀就不用愁了,
你可以找自己感兴趣的花指令。
花指令添加好后,如图pic8,单击鼠标右键“复制到可执行文件”,保存即可。
花指令虽然添加好了,但是入口点依然是0x0100739D ,此时,
需要把入口指向我们刚刚输入的花指令地址就可以让花指令先运行。
修改入口点我用的是LordPE.EXE。用LordPE.EXE载入notepad.exe,
将其入口点修改为0x13000,在图pic8中可以看到花指令
在内存中的起始地址是0x01013000,用0x01013000减去镜象基址0x01000000得到0x13000。 如图pic9。
保存好后,再次用PEID查壳。显示如图pic10,入口点变成了我们刚输入的地址。EP段也变成了我们的区块名。
这个刚刚是Microsoft Visual C++ 7.0 Method2 [调试],此时变成了PEtite 2.x [Level 1/9] -> Ian Luck 。
说明加花成功。运行程序也没遇到任何异常。
附件
-
pic1.JPG
(109.13 KB)
-
2007-5-20 14:06
-
pic2.JPG
(4.3 KB)
-
2007-5-20 14:06
-
pic3.JPG
(28.61 KB)
-
2007-5-20 14:06
-
pic4.JPG
(4.83 KB)
-
2007-5-20 14:06
-
pic5.JPG
(21.11 KB)
-
2007-5-20 14:06
-
pic6.JPG
(15.91 KB)
-
2007-5-20 14:06
-
pic7.JPG
(42.8 KB)
-
2007-5-20 14:06
-
pic8.JPG
(21.83 KB)
-
2007-5-20 14:06
-
pic9.JPG
(29.46 KB)
-
2007-5-20 14:06
-
pic10.JPG
(15.09 KB)
-
2007-5-20 14:06