[原创]两种姿势过formbook(上)
2022-8-15 19:45:0 Author: bbs.pediy.com(查看原文) 阅读量:21 收藏

[原创]两种姿势过formbook(上)

2022-8-15 19:45 8281

目录

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

2

3

4

5

6

7

8

9

10

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

[2022夏季班]《安卓高级研修班(网课)》月薪两万班招生中~


文章来源: https://bbs.pediy.com/thread-274039.htm
如有侵权请联系:admin#unsafe.sh