[原创]两种姿势过formbook(上)
2022-8-15 19:45 8281
FormBook是一种非常活跃的商业窃密木马,可从各种 Web 浏览器中获取凭证、收集截图、监控和记录击键次数,并按照其 C&C 命令下载和执行文件。具备一定的对抗检测、对抗分析和反溯源能力。
最近看了个formbook的木马,整理了一下笔记作为学习使用。我将formbook分成两个部分,上半部分是C#部分(可以看作他的壳),下半部分是后门部分。我用2种方法获取到最终的后门,记录一下。
反着找,这个样本藏得很深,一眼没找到,就先给invoke下断点,然后从调用invoke的地方反着往回找调用处 一层一层往上回溯发现调用关系是InitializeComponent-this.nnn()-this.sss()-Form1.SponsorState()-Form1.smethod_54((Assembly)Form1.RefreshCode(array))[1]-创建对象
找到了关键位置,创建新对象
最后发现这个位置并不是真正的调用第二层的地方,作用是load函数加载资源和解密资源。
出来之后继续跟:
在invoke里面可以看到调用的模块的函数
进入模块内断下来:
然后dump下来 就是后门部分
assembly:加载pe的地方
在解密完资源之后直接在内存中用去混淆后的pe进行替换
InitializeComponent里面会对资源进行解密,然后加载资源,找到被解密的资源:
method_12:
这里涉及到一个知识点,如何在C#中使用内嵌资源文件(http://t.zoukankan.com/vic_lu-p-2055613.html)
由于这个样本中的资源名是加密的,需要解密后才能看到,所以需要对c#中使用资源的部分很熟悉才能快速找到关键点:
1 2 3 4 5 6 7 8 9 10 |
|
替换方法:
创建好的空白资源Rara3
接下来就是寻找解密函数的地方
思路是加载完资源后紧跟着就会进行解密 所以从加载资源的地方往后找
将资源加载进来后放到array这个数组里
解密函数
右键-编辑类-删除解密部分,直接返回数组 让他怎么进来就怎么出去
然后文件-保存模块!这步很重要 不然就白操作一通了
这么做的目的是因为c#不能直接调dll,而第二层是带混淆的,如果想调没有混淆的dll就需要进行资源替换。
然后开始调试,在第二层入口下了断点之后发现可读性更强了
解密资源名:
保存好后重新调试,进入第二层dll:
第二层的目的依旧是加载并解密资源,调用第三层
第二层各个函数的含义如下
我一开始如法炮制先dump第三层,再更换资源,然后删除解密资源部份,但是发现产生了异常,原因是第三层待解密的资源是bitmap图像形式的,而我dump出来的第三层模块是byte字节形式的。对资源的十六进制进行替换,也失败了。这一层有很多的switch case形式的垃圾语句,BabelDeobfuscator和de4dot对他都不起作用,除了硬着头皮调找invoke,没找到别的办法。
至此上半部分就结束了。
附件解压密码:pediy