首页
社区
课程
招聘
[原创]两种姿势过formbook(上)
发表于: 2022-8-15 19:45 14255

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

2022-8-15 19:45
14255

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#中使用资源的部分很熟悉才能快速找到关键点:

替换方法:

图片描述

图片描述

图片描述
创建好的空白资源Rara3
图片描述

接下来就是寻找解密函数的地方
思路是加载完资源后紧跟着就会进行解密 所以从加载资源的地方往后找
将资源加载进来后放到array这个数组里
图片描述
解密函数
图片描述
右键-编辑类-删除解密部分,直接返回数组 让他怎么进来就怎么出去
图片描述
然后文件-保存模块!这步很重要 不然就白操作一通了
图片描述
这么做的目的是因为c#不能直接调dll,而第二层是带混淆的,如果想调没有混淆的dll就需要进行资源替换。
然后开始调试,在第二层入口下了断点之后发现可读性更强了

图片描述
图片描述
解密资源名:
图片描述
图片描述
保存好后重新调试,进入第二层dll:
第二层的目的依旧是加载并解密资源,调用第三层
图片描述
图片描述
第二层各个函数的含义如下
图片描述

我一开始如法炮制先dump第三层,再更换资源,然后删除解密资源部份,但是发现产生了异常,原因是第三层待解密的资源是bitmap图像形式的,而我dump出来的第三层模块是byte字节形式的。对资源的十六进制进行替换,也失败了。这一层有很多的switch case形式的垃圾语句,BabelDeobfuscator和de4dot对他都不起作用,除了硬着头皮调找invoke,没找到别的办法。

至此上半部分就结束了。

附件解压密码:pediy

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、资源文件读取类
1、常用方法:pictureBox1.Image = Properties.Resources.Correct;
2、使用 ResourceManager 类的方法(该样本中使用的就是此种方法):
    1)首先获取一个 ResourceManager 类的实例:
        ①ResourceManager resourceManager = newResourceManager("资源名称", Assembly.GetExecutingAssembly());
        ②ResourceManager resourceManager = newResourceManager(typeof(About));//此样本所采取的方法

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

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

1

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