首页
论坛
课程
招聘
[原创]两种姿势过formbook(上)
2022-8-15 19:45 10288

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

2022-8-15 19:45
10288

目录

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
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


看雪招聘平台创建简历并且简历完整度达到90%及以上可获得500看雪币~

上传的附件:
收藏
点赞3
打赏
分享
打赏 + 50.00雪花
打赏次数 1 雪花 + 50.00
 
赞赏  Editor   +50.00 2022/08/25 恭喜您获得“雪花”奖励,安全圈有你而精彩!
最新回复 (8)
雪    币: 703
活跃值: 活跃值 (19343)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
shinratensei 活跃值 1 2022-8-16 09:51
2
2
你的用户名自带背景音乐
雪    币: 1302
活跃值: 活跃值 (1819)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
大河向东流哇 活跃值 2022-8-16 10:17
3
0
shinratensei 你的用户名自带背景音乐
没办法 改名太贵了
雪    币: 578
活跃值: 活跃值 (707)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
lracker 活跃值 2022-8-16 11:04
4
0
有没有可能,这个壳并不是属于formbook的。而是一种商业打包器,只是刚好和formbook搭配使用。
雪    币: 1302
活跃值: 活跃值 (1819)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
大河向东流哇 活跃值 2022-8-16 14:45
5
0

1

最后于 2022-8-16 14:46 被大河向东流哇编辑 ,原因:
雪    币: 1302
活跃值: 活跃值 (1819)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
大河向东流哇 活跃值 2022-8-16 14:46
6
0
lracker 有没有可能,这个壳并不是属于formbook的。而是一种商业打包器,只是刚好和formbook搭配使用。
有可能哇,我搜了下,找到了篇文章 把这种用C#加载的formbook称为它的变种  目的是为了躲避检测 
    https://www.4hou.com/index.php/posts/7Vpy
雪    币: 578
活跃值: 活跃值 (707)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
lracker 活跃值 2022-8-16 16:22
7
0
大河向东流哇 有可能哇,我搜了下,找到了篇文章 把这种用C#加载的formbook称为它的变种 目的是为了躲避检测 https://www.4hou.com/index.php/posts/7Vpy
所以,这C#部分不能算是formbook的内容,这壳太常见了。也经常搭配AgentTesla、AsyncRAT使用。搜一下安天的文章,关键字:ReZer0加载器
雪    币: 1302
活跃值: 活跃值 (1819)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
大河向东流哇 活跃值 2022-8-17 16:44
8
0
lracker 所以,这C#部分不能算是formbook的内容,这壳太常见了。也经常搭配AgentTesla、AsyncRAT使用。搜一下安天的文章,关键字:ReZer0加载器
ok 好的谢谢
雪    币: 181
活跃值: 活跃值 (274)
能力值: ( LV5,RANK:73 )
在线值:
发帖
回帖
粉丝
三猫 活跃值 1 2022-8-27 09:55
9
0
没那么麻烦,dnspy单步一会儿就到dump点了
游客
登录 | 注册 方可回帖
返回