formbook脱壳记
本文为看雪论坛优秀文章
看雪论坛作者ID:大河向东流哇
formbook简介
最近看了个formbook的木马,整理了一下笔记作为学习使用。我将formbook分成两个部分,上半部分是C#部分(可以看作他的壳),下半部分是后门部分。我用2种方法获取到最终的后门,记录一下。
第一种方法
第一层 .exe
找到了关键位置,创建新对象。
最后发现这个位置并不是真正的调用第二层的地方,作用是load函数加载资源和解密资源。
出来之后继续跟:
在invoke里面可以看到调用的模块的函数。
进入模块内断下来:
第二层:
调用第三层模块的函数
第三层释放的c++
然后dump下来 就是后门部分。
第二种方法
第一层
在解密完资源之后直接在内存中用去混淆后的pe进行替换。
method_12:
这里涉及到一个知识点,如何在C#中使用内嵌资源文件。(http://t.zoukankan.com/vic_lu-p-2055613.html)
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、删除原有资源
2、创建新资源,命名为Rara3
3、将新资源指向去混淆后的第二层dll
创建好的空白资源Rara3
4、因为第二层dll已经去混淆了,所以第一层里面的解密函数可以直接删掉
解密函数
右键-编辑类-删除解密部分,直接返回数组,让他怎么进来就怎么出去。
然后文件-保存模块!这步很重要,不然就白操作一通了。
这么做的目的是因为c#不能直接调dll,而第二层是带混淆的,如果想调没有混淆的dll就需要进行资源替换。
然后开始调试,在第二层入口下了断点之后发现可读性更强了。
第二层:
解密资源名:
保存好后重新调试,进入第二层dll:
第二层的目的依旧是加载并解密资源,调用第三层。
第二层各个函数的含义如下:
看雪ID:大河向东流哇
https://bbs.pediy.com/user-home-878276.htm
# 往期推荐
球分享
球点赞
球在看
点击“阅读原文”,了解更多!
[广告]赞助链接:
关注数据与安全,洞悉企业级服务市场:https://www.ijiandao.com/
让资讯触达的更精准有趣:https://www.0xu.cn/