我有一个非常混淆的Windows服务二进制文件。字段,类型和方法已重命名。尽管可以使用dnSpy反编译二进制文件,但是静态地识别重要/有趣的位置仍然非常麻烦。路径?我对CLR内部知识不了解很多,但我的理解是,由于IL指令的JIT编译,无法轻易进行检测。 d非常感谢您的投入。此外,如果以前有人看到过类似的混淆方案,请通知我: /?c = qrNky4(不是恶意软件; VPN软件的一部分)

评论

您是否可以共享二进制文件,以便在此实际示例中更容易展示潜在解决方案?

我已将二进制文件上传到gofile.io/?c=qrNky4-它是公开的,不是恶意的;它实际上是VPN服务的一部分。

小提示:使用的混淆器(可能是).NET Reactor,有一些公共工具可以对其进行模糊处理,但是它们可能不适用于较新的版本。

#1 楼


由于IL指令的JIT编译,无法轻易实现检测。


实际上是相反的。跟踪方法非常容易-如果我们想跟踪字段用法,则将很困难。 .NET程序集包含丰富的类型/方法信息,可用于检查/修改它们。还有一个很棒的库,它可以做更多的事情-Mono.Cecil。

如果有了这个库,我们可以帮助您实现想要的(主旨)。

/>
只是解释一下发生了什么。对于在程序集中找到的每种类型的每种方法,我们都会得到ILProcessor,它使我们可以修改代码。有了这些,我们就在第一个现有操作码之前插入一个字符串并调用Console.WriteLine,在方法结束之前插入一个类似的代码。最后,我们将新二进制文件保存为相同的名称,并添加了.modified

示例运行:运行
Inside Inside
MoreInside
OtherProgramRun
TraceIL.exe TestApp.exe
TestApp.modified.exe
-输入Main
-进入.ctor
-离开.ctor
-进入运行
内部运行
-进入内部
内部内部
-进入更多内部
MoreInside
-进入.ctor
-离开.ctor
-进入OtherProgramRun
OtherProgramRun
-离开OtherProgramRun
- Leaving MoreInside
--Leave Inside
--Leave Run
--Lemain Main


当然,在那里您可以做一些疯狂的事情,例如添加时间戳记和/或列出传递的参数等。由于您的示例被混淆了,因此从一开始就可能无法正常工作,但我想这段代码并不是很难根据需要进行修改。

评论


非常感谢您的明确解释。那绝对是我要研究的东西!

–DucatiNerd
19-10-26在18:55

@DucatiNerd我已经尝试过使用此文件,我可以看到为了进行检测工作,必须删除一些技巧。例如,跳过了一些无效的调用,这些无效的调用使仪器无法在检测后保存

–PawełŁukasik
19-10-28在19:34

#2 楼

您可以使用de4dot(https://github.com/0xd4d/de4dot)对二进制文件进行模糊处理。通过使用de4dot然后使用ILSpy创建一个Visual Studio项目,可以轻松完成dotnet二进制文件的静态分析,然后可以在Visual Studio中分析源代码。您还可以使用dnSpy,它使您可以轻松调试二进制文件。

关于工具,dotnet二进制文件仍在运行时使用所有常规Win32库运行本机代码。您可以使用Api Monitor(http://www.rohitab.com/downloads)在运行时监视os api调用,这是一个很棒的工具,可以通过挂钩库和解码参数来工作。使用procmon显示简单的信息,例如文件系统操作,注册表等。

祝您好运

评论


d4dot实际上是我尝试的首批工具之一。令人惊讶的是,在这种情况下,它没有检测到混淆方案,也无法对二进制文件进行混淆。

–DucatiNerd
19-10-26在18:51

可以分享样本吗? :)

–oridamari
19-10-26在20:35

检查我对以上问题的答复。我已经链接了文件:)

–DucatiNerd
19-10-26在23:02

这可能是.NET反应堆,我想我从de4dot确实检测到的先前样本中识别出控制流变平。

–约翰·艾丁巴斯(Johann Aydinbas)
19年11月1日,凌晨3:18