逆向工程 打造免杀后门

  • 发布于:2023-11-09
  • 140 人围观
以前在x上发表过一篇《逆向工程 打造隐蔽后门》的文章,讲述了如何在一个可执行文件中嵌入后门代码的方法。但是这种方法很有可能被杀毒软件给查到,因此这次我们要打造免杀的后门。

  先看看我们需要什么“家伙”:

Olly debug 1.10b 汉化版 —— 逆向的主要工具
UltraEdit —— 经典的16进制编辑器
PEDITOR v1.7 —— PE文件编辑工具
dcmd —— 一个简单的邦定81端口的后门,会被瑞星查杀
                         
一、原理简介


其实方法有点和上一篇打造隐蔽后门中的方法类似:首先需要在可执行文件中找到一些“空”地,这里添加我们的加/解密代码,然后修改入口地址处的指令,使用一个jmp指令调转到我们添加的代码处执行,这样就可以对前面的后门代码进行加/解密。执行完我们的代码后,再跳回到程序入口处的未被修改的第一条指令。如图一:

大家可以参考《逆向工程 打造隐蔽后门》。


                            二、打造实战

原理简单介绍完了,俗话说光说不练假把式,那咱们就操练起来。首先用olly debug打开我们的后门程序dcmd,如图二。

好了,我们先把入口处的一小段数据备份出来(以防万一嘛,至于复制多少你自己看着办吧^_^),如图三。

接着我们需要看看我们是否具有对该代码段的写权限,如何检测呢?向后托动olly的窗口滚动条,找到如图四的地方(前篇文章中提到的“dead space”),

在004011f0地址处按空格键打开汇编窗口,输入下面的指令:
mov dword ptr ds:[4011f0],90909090
这条指令运行后会往004011f0地址出写入4字节的90,如果写入成功说明是可以写入的,否则就是不可写入的。那么不可写入怎么办呢?稍后我们再说。OK,右键单击我们输入的指令->“此处新建IP”,如图五。

然后按下F7键来运行这条指令,结果如图六。

呵呵,是可以写入的。那么我们接下来就就可以继续打造了,下面我们要确定需要加密的代码部分了。回到程序入口处,因为我们后面还要修改入口处的指令为一个跳转指令,因此需要加/解密的开始部分应该往后选,找到0040101F   $ 55         PUSH EBP,我们就从这里开始加密吧。接着确定加/解密的结束部分,往后翻看代码到如图七的部分。

看到下面的一行了:
结构 'IMAGE_IMPORT_DESCRIPTOR'
这个结构就是IAT了(Import Address Table)就是PE文件格式中的导入表了。我们加/解密是不能包括IAT的(详细情况读者朋友可以去翻越PE方面的资料),因此结束部分我们就选择004010fe吧。到此为止,我们已经确定了需要加/解密的部分,接下来要确定我们的加密算法了。这里我们可以使用非常简单的异或作为我们的算法,因为异或有以下特性是不错的:

XOR SOURCE,KEY=DEST
XOR DEST,KEY=SOURCE

也就是说我们对SOURCE异或两次得到的结果还是SOURCE。算法确定后,我们在olly窗口中的004011f0处开始我们的加/解密程序吧,如下:

004011F0   B8 1F104000   MOV EAX,dcmd.0040101F     ;需要加/解密部分的起始地址          
004011F5   8030 0F     XOR BYTE PTR DS:[EAX],0F   ;与0f进行异或,这个0f读者朋友可以自由替换
004011F8   40         INC EAX               ;递增eax
004011F9   3D FE104000   CMP EAX,dcmd.004010FE     ;看看是不是到了加/解密部分的结束地址
004011FE   ^7E F5       JLE SHORT dcmd.004011F5   ;如果没到继续循环了


程序就这么简单,看上去很容易哦。。。这还没完呢继续回到olly上来,来到程序的入口地址处按空格键进行汇编,输入:jmp 004011f0,如图八。

这个时候拿出我们先前备份的那段代码进行比较,看看有哪些指令被覆盖了,如图九。

只有 SUB ESP,190一条指令被覆盖了,那么我们就要在加/解密代码的最后处把覆盖的指令添上,而且还要添加一条跳转指令,跳转回入口地址的下一条地址,完整代码如图十。


到这里,我们先保存一下吧。右键单击任意代码处选择复制到可执行文件->“全部修正”,结果如图十一。

好像出错了!这个错误的意思是我们的文件不够大无法保存我们修改的代码,那么我们得手工为这个文件增加点体积了。关掉olly,用ultraedit打开该文件,在文件的最后单击鼠标右键选择HEX插入与删除,弹出如图十二的对话框,

在字节数量的文本框中输入256,确定后如图十三,然后保存退出。接着用PEDITOR打开这个文件,单击Section按钮,弹出节表窗口里面只有一个.h4x节,右键单击这个节选择edit section,如图十四。

在弹出的对话框中在New Values栏中的Raw size改成00002e4(即加上256的16进制数0x100),如图十五。点击apply changes按钮后退出。


到此,我们已经给这个程序增加了100h个字节的长度了,下面我们再重复前面的步骤来修改这个文件,修改完后我们在dump一次看看,这次就没有错误提示了。OK!最后一项工作,我们需要先把这个文件进行加密,然后再dump到一个可执行文件里,这样下次它在运行的时候就会自动异或而还原回到原来的代码从而顺利执行。于是我们在olly中,找到我们添加的代码的第一条指令,在此新建EIP,然后往后在“SUB ESP,190”指令处设置断点,如图十六。

然后单击ollydebug的运行按钮,运行结束后如图十七。

看到了吗?我们制定的代码全部被异或了,OK!我们右键单击任意代码处选择复制到可执行文件->“全部修正”,这个时候出现了一个新的调试窗口,关闭它,会提示你是否保存,选择是,保存为“修改后的dcmd.exe”。下面我们分别用瑞星对dcmd.exe 和修改后的dcmd.exe杀毒,结果如图十八。

哈哈,是不是成功躲过了杀毒软件的追杀?我们运行一下修改后的dcmd.exe看看还能运行不?如图十九。

到此,整个过程都介绍完了。向心读者朋友应该可以打造自己的免杀后门了,如果碰到无法写入怎么办呢?这个也很好说,有一下两个办法可供读者参考:

1.使用VirtualProtect API函数。使用这种方法,需要读者在添加的加解密代码的前面使用此函数修改保护属性,使之可写,剩下的和上面介绍的一样了。这个函数的具体用法可以参阅MSDN,很简单的。我就不多说了。

2.使用PE编辑工具进行修改。这个方法应该比较适合一些新手朋友,还是用PEDITOR,我拿咱们这个修改后的dcmd.exe为例简单介绍一下吧。首先打开PEDITOR,打开我们的文件“修改后的dcmd.exe”,单击section按钮打开节表对话框,右键你想修改的节表,选择edit section弹出一个新的对话框,单击“char. wizard”按钮打开特性对话框,如图二十。

看到我红框框起的属性了吗?其中“writable”就是是否可写的,在这里已经是可写了,那么我们去掉它会怎么样呢?试试看,把“writable”前面的勾去掉,然后单击“take it”按钮,然后选择“apply changes”,退出PEDITOR,运行程序,如图二十一。

啊哦,引发了写保护错误。读者朋友看到这里,你应该会修改了吧?


三、结束语


又到了该说再见的时候了,青山不改,绿水常流,咱们后会有期了!欢迎大家来邪恶八进制交流!
万企互联
标签: