调试C#的.DLL文件
Dnspy调试的时候,进程是.NET加载.NETDLL可以直接调试,单独的.NETDLL在调试器中不能直接运行,需要加载器先加载。
基本信息
DEPT_NCOC.xlsm
1a2274608ec4a96c703652359f9147d5e214d9d361dce25a6b669ca562bc9bdb
样本分析
DEPT_NCOC.xlsm
运行后会提示部分内容有问题,但是点击信任后可以正常打开
诱饵文档是仿冒巴基斯坦国家指挥与作战中心(NCOC)利用COVID-19为话题,提示附带有宏代码
在Office 2013版本尝试运行宏代码会提示“ActiveX部件不能创建对象”,不知道什么原因,尝试了很多方法依然不能正常执行。但是在WPS下可以直接运行,关键时刻害得看国产软件。
文档内有多个隐藏表,宏代码主要内容是将其他隐藏表被的Base64编码的内容解码后释放并加载执行
通过代码可知,将附带的后续载荷释放到了“C:\ProgramData\Printer.config”并加载HP.Program.RunService()
QuasarRAT
后续释放的载荷为QuasarRAT,直接是.DLL文件通过反射加载执行,所以直接不能直接使用调试器调试,需要加载器加载DLL到同样的入口点HP.Program.RunService()
找了一个大佬的加载器:https://github.com/hexfati/SharpDllLoader
生成后拉入Dnspy调整参数,SharpDllLoader.exe -d DLL_PATH [-n NAMESPACE] -c DLL_CLASS -m METHOD [-a "ARG1 ARG2"]
在加载器main函数断下,执行过程中发现抛出异常,发现似乎是样本检测到了调试器
样本加了高强度混淆,在调试过程中比较麻烦,想着先去混淆,但是在样本内没有找到什么特征,在exeinfo查壳是IntelliLock,而exeinfo又经常把.NET Reactor误报IntelliLock,试了下.NET Reactor的反混淆,能直接去掉乱码的类,看起来似乎可以了实际上在加载调试过程中依然会出错。
最后用NET-Reactor-Cflow-Cleaner-6.7.0.0和d4d .NET Reactor 6.7_string cleaner反混淆了Control Flow和字符串,但是依然没什么卵用加载器加载会出问题。
后来用了.NET Reactor Slayer https://github.com/sychicboy/netreactorslayer,虽然在使用过程中告诉我已经去掉了antidebug,但在调试中还是因为检测到debug而退出,抛出异常时查看异常窗口,找到反调的代码下断
在反调的地方下断,再次运行,命中到断点,命中之后直接进行一个反反调
反调后回到加载器代码,单步成功进入DLL的入口
进入后先通过ip-api.com的api接口查询主机是否为hosting类型,并对抗调试
绕过反调后,先获取系统信息,再解密字符串,从字符串可以发现包含下载执行、上传文件、DLL注入、启动进程、杀死进程等操作
注册表设置自启
通过AES解密C2地址,连接C2地址,远控