Pcshare输出表输出函数名加密法(图)
最近很多人说瑞星总是杀输出表的ServiceMain名称。最近由于很忙,论坛也不能天天上了。所以尽可能的上来帮大家解决点疑难问题,今天就教大家如何来加密我们的输出表函数名。
由于ServiceMain输出函数并不是提供给我们的loader来进行调用的,它是在dll内部调用的,这也是大家在loader中找不到ServiceMain字符串的原因。
那么如何修改ServiceMain输出函数名且正常运行呢,这里,我喜欢加密的方法。我们对我们的ServiceMain输出函数命进行一个简单的加密,然后在dll开始的部分在进行解密,这样不就做到了躲避杀软的方法吗。。
ok,废话不多说,给大家简要说明下。
首先ollydbg载入PcMain.dll,然后向下找0区域,然后我们加入我们的加密代码。
如图
这里我简要的说明下代码。
1. 首先保存我们的寄存器环境。
通过
pushad
popad
然后 我们加入代码
pushad
call $Content$5 ; 机器码为E8 00 00 00 00
pop eax
xor ax, ax ;这几句代码是求我们的基地址 但是由于我们写入的偏移量前面是以1001开头的,所以接下来我们加入rva的时候要减去10000。
add eax, 3b05h ;3b05h为ServiceMain输出函数名字符串的偏移
xchg eax, esi
mov edi, esi
@@:
lodsb
or al, al
je @f
xor al, 18h
stosb
jmp @b
@@:
popad
jmp 入口点
其实这里大家可以运行一遍,此时运行后我们的ServiceMain已经是加密了,然后我们在将.rdata区段数据保存。然后修改.rdata的区段属性为可读可写属性。
修改入口点位我们加入的代码的偏移,此时loader加载后就会进行解密。。
这里给出一个DLL的例子。。
有什么不懂的,请到此贴询问。
放着也是放着转到公共区吧。
加密后我们的输出函数名为此图。
注意:这个例子是为了演示输出函数名加密的方法, 例子是肯定被杀的,因为是随便拿一个版本演示。。