【免杀技术】借壳上线之Patch PE文件

admin 2025年2月12日08:53:16评论23 views字数 1921阅读6分24秒阅读模式

免责声明:由于传播、利用本公众号所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!

文章作者:奇安信攻防社区(XYZF)

文章来源:https://forum.butian.net/share/4085

patch即补丁的意思,对原始文件进行打patch操作后就可以变成修改后的文件了。其原理为修改程序本身的执行流程使其跳转至攻击者自身编写好的代码中进行执行,与这种技术类似的还有蠕虫感染、新建区段并修改oep执行、将恶意代码写入区段空白或无关紧要处执行等等,因为通过此种方式制作好的恶意文件会带有大量正常文件的字符串,且带有大量正常程序的函数代码,在做好反沙箱、反调试的情况下,其免杀效果较好。

一、.text区段执行

1.使用CFF Explorer加载需要patch的pe文件

【免杀技术】借壳上线之Patch PE文件

取消掉文件的ASLR

【免杀技术】借壳上线之Patch PE文件

查看文件text段的Raw size和Raw offset,然后可以计算出text段的结尾地址: 0x96200 + 0x400 = 0x96600

【免杀技术】借壳上线之Patch PE文件

2.通过winhex查看0x96600处

【免杀技术】借壳上线之Patch PE文件

接着就可以开始选择我们插入shellcode的位置,这里笔者编写的测试shellcode需要3E0也就是992 bytes大小的空间。(关于shellcode的编写,可以使用此模板:https://github.com/clownfive/CppDevShellcode,开发较为快速)

【免杀技术】借壳上线之Patch PE文件

笔者这里选择在pe文件的0x96600处向上将2048 bytes大小的空间置零以方便填入shellcode

【免杀技术】借壳上线之Patch PE文件

然后选择在0x96210处开始写入shellcode

【免杀技术】借壳上线之Patch PE文件

随后计算新的OEP地址,将之前的OEP替换成新的,新的OEP为:0x96210 – 0x400 + 0x1000 = 0x96E10

【免杀技术】借壳上线之Patch PE文件

3.运行测试

【免杀技术】借壳上线之Patch PE文件

通过查找text区段尾部来插入shellcode,随后修改执行程序的OEP来执行我们自身的shellcode,这种方式同样也能够借用原程序本身的正常特征,一定程度上能够避免杀软的查杀,但同样,直接修改程序OEP存在的问题也非常明显:

来看看此时patch后的文件

【免杀技术】借壳上线之Patch PE文件

【免杀技术】借壳上线之Patch PE文件

此时我们是直接修改程序的OEP来完成的pacth,patch的shellcode执行痕迹非常明显,再者是本身我们shellcode使用的空间有限,且这种方式添加shellcode会影响程序本身正常功能的执行,执行流程在调试工具中一览无遗。所以通过如果通过OEP来更改程序的执行流程,最好是准备两段shellcode,通过第一段shellcode来跳转到第二段shellcode上来执行,那么第二段shellcode应该放在什么位置才比较合适呢?

二、查找合适的函数写入shellcode

我们这里可以使用两段shellcode,第一段shellcode根据整体思路设计需要小巧精致,第一段shellcode可以适量添加一些花指令或者代码量不多的反沙箱函数,其主要功能还是让程序的执行流能够跳转到我们第二段shellcode所在的地址。

1、寻找写入第二段shellcode合适的函数

这里笔者写好的第二段上线shellcode大小为7984 bytes,其功能主要是反沙箱以及下载加密bin文件并解密执行。

【免杀技术】借壳上线之Patch PE文件

【免杀技术】借壳上线之Patch PE文件

那么笔者就需要寻找目标exe文件中是否存在有这么大空间的函数,如果是单个exe文件,可以使用ida进行查看

【免杀技术】借壳上线之Patch PE文件

但这种方法如果是在批量找寻哪些exe具备大空间函数的情况下会比较麻烦,这里可以写一个简单的脚本来帮助寻找,其核心主要是检查是否为函数的开头,以及是否是函数的结尾,这里只是提供一个简单的思路,毕竟每个函数的开头和结尾都不一定是这种格式,所以需要对大量的程序进行分析,以匹配出合适的检查规则

【免杀技术】借壳上线之Patch PE文件

【免杀技术】借壳上线之Patch PE文件

这里的0x429cef实际是sub_429CE4函数

【免杀技术】借壳上线之Patch PE文件

2、制作第一段shellcode

这里我们需要找到sub_429CE4函数的RVA

【免杀技术】借壳上线之Patch PE文件

笔者代码如下:

delay_300_seconds()函数是延时300秒,可以自己实现,而ExeBase函数实际就是获取当前基址,然后加上偏移即可到第二段shellcode的位置

【免杀技术】借壳上线之Patch PE文件

【免杀技术】借壳上线之Patch PE文件

【免杀技术】借壳上线之Patch PE文件

3、写入目标文件

第一段shellcode如下

【免杀技术】借壳上线之Patch PE文件

然后还是按照上面的方法将此shellcode放入.text区段的尾部

【免杀技术】借壳上线之Patch PE文件

新的OEP为0x95F50 - 0x400 + 0x1000 = 0x96B50

【免杀技术】借壳上线之Patch PE文件

然后来到sub_429CE4函数偏移处

【免杀技术】借壳上线之Patch PE文件

写入第二段shellcode

【免杀技术】借壳上线之Patch PE文件

运行测试,先是延时300秒

【免杀技术】借壳上线之Patch PE文件

延时完成后成功上线

【免杀技术】借壳上线之Patch PE文件

【免杀技术】借壳上线之Patch PE文件

4、ida中查看

【免杀技术】借壳上线之Patch PE文件

可以看到此时查看静态代码已经相对好一些了。

原文始发于微信公众号(七芒星实验室):【免杀技术】借壳上线之Patch PE文件

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年2月12日08:53:16
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【免杀技术】借壳上线之Patch PE文件https://cn-sec.com/archives/3729788.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息