formbook脱壳记

资讯 作者:看雪学院 2022-08-24 23:15:59 阅读:268


本文为看雪论坛优秀文章

看雪论坛作者ID:大河向东流哇


formbook简介


FormBook是一种非常活跃的商业窃密木马,可从各种 Web 浏览器中获取凭证、收集截图、监控和记录击键次数,并按照其 C&C 命令下载和执行文件。具备一定的对抗检测、对抗分析和反溯源能力。

最近看了个formbook的木马,整理了一下笔记作为学习使用。我将formbook分成两个部分,上半部分是C#部分(可以看作他的壳),下半部分是后门部分。我用2种方法获取到最终的后门,记录一下。


第一种方法


第一层 .exe


反着找,这个样本藏得很深,一眼没找到,就先给invoke下断点,然后从调用invoke的地方反着往回找调用处 一层一层往上回溯发现调用关系是InitializeComponent-this.nnn()-this.sss()-Form1.SponsorState()-Form1.smethod_54((Assembly)Form1.RefreshCode(array))[1]-创建对象。


找到了关键位置,创建新对象。

最后发现这个位置并不是真正的调用第二层的地方,作用是load函数加载资源和解密资源。



出来之后继续跟:
在invoke里面可以看到调用的模块的函数。

进入模块内断下来:


第二层:


调用第三层模块的函数



第三层释放的c++


然后dump下来 就是后门部分。


第二种方法


第一层


assembly:加载pe的地方
在解密完资源之后直接在内存中用去混淆后的pe进行替换。

InitializeComponent里面会对资源进行解密,然后加载资源,找到被解密的资源:


method_12:


这里涉及到一个知识点,如何在C#中使用内嵌资源文件。(http://t.zoukankan.com/vic_lu-p-2055613.html

由于这个样本中的资源名是加密的,需要解密后才能看到,所以需要对c#中使用资源的部分很熟悉才能快速找到关键点:
1、常用方法:pictureBox1.Image = Properties.Resources.Correct;2、使用 ResourceManager 类的方法(该样本中使用的就是此种方法):    1)首先获取一个 ResourceManager 类的实例:        ①ResourceManager resourceManager = newResourceManager("资源名称", Assembly.GetExecutingAssembly());        ②ResourceManager resourceManager = newResourceManager(typeof(About));//此样本所采取的方法        ③ResourceManager resourceManager = Properties.Resources.ResourceManager;    2)通过 ResourceManager 类的 GetObject() 方法:Object target = resourceManager.GetObject("资源文件名");  3、反射法4、资源文件读取类

将dump下来解密后的第二层dll替换掉这个资源。

替换方法:


1、删除原有资源

2、创建新资源,命名为Rara3

3、将新资源指向去混淆后的第二层dll


创建好的空白资源Rara3

4、因为第二层dll已经去混淆了,所以第一层里面的解密函数可以直接删掉


接下来就是寻找解密函数的地方。思路是加载完资源后紧跟着就会进行解密所以从加载资源的地方往后找。

将资源加载进来后放到array这个数组里。

解密函数

右键-编辑类-删除解密部分,直接返回数组,让他怎么进来就怎么出去。

然后文件-保存模块!这步很重要,不然就白操作一通了。

这么做的目的是因为c#不能直接调dll,而第二层是带混淆的,如果想调没有混淆的dll就需要进行资源替换。

然后开始调试,在第二层入口下了断点之后发现可读性更强了。

第二层:



解密资源名:


保存好后重新调试,进入第二层dll:
第二层的目的依旧是加载并解密资源,调用第三层。


第二层各个函数的含义如下:
我一开始如法炮制先dump第三层,再更换资源,然后删除解密资源部份,但是发现产生了异常,原因是第三层待解密的资源是bitmap图像形式的,而我dump出来的第三层模块是byte字节形式的。

对资源的十六进制进行替换,也失败了。这一层有很多的switch case形式的垃圾语句,BabelDeobfuscator和de4dot对他都不起作用,除了硬着头皮调找invoke,没找到别的办法。
 
至此上半部分就结束了。
 
附件于阅读原文查看,解压密码:pediy




看雪ID:大河向东流哇

https://bbs.pediy.com/user-home-878276.htm

*本文由看雪论坛 大河向东流哇 原创,转载请注明来自看雪社区



# 往期推荐

1.CobaltStrike ShellCode详解

2.Android APP漏洞之战——SQL注入漏洞初探

3.House of apple 一种新的glibc中IO攻击方法

4.so文件分析的一些心得

5.从PWN题NULL_FXCK中学到的glibc知识

6.指令级工具Dobby源码阅读






球分享

球点赞

球在看



点击“阅读原文”,了解更多!

在线申请SSL证书行业最低 =>立即申请

[广告]赞助链接:

关注数据与安全,洞悉企业级服务市场:https://www.ijiandao.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

#
公众号 关注KnowSafe微信公众号
随时掌握互联网精彩
赞助链接