我试图反转显示为ENIGMA(5.X)压缩的Windows可执行文件:



如果以后我检查其UI元素之一的类名,何时该进程已解压缩并正在运行,它显示为.NET类WindowsForms10.BUTTON.app.0.378734a



但是如果我随后使用dnSpy附加到该进程,则可以暂停该.NET System.Windows.Forms.dll-Application函数中UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop()的某个可执行文件,但目标进程本身在.NET程序集上似乎没有任何信息:



我的目标是看到按下Start按钮后的.NET代码。知道我应该如何进行吗?

评论

您可以添加真正的压缩二进制文件吗?

@Biswapriyo:我不确定在此发布此链接的政策是什么。 (主持人:如果不允许的话,我将其删除。)就是这样,直接链接到7-Zip文件。作者在上面放了一个密码:kahusecurity-提醒一下:解压缩后,您的AV会将其报告为恶意软件。

#1 楼

好吧,我想我明白了。我需要的工具是MegaDumper。 (我无法在其Github上找到可执行文件,因此必须自己构建。)

然后是使用该文件的步骤:


(显然,我是在VM中完成所有这些工作。)启动打包的可执行文件,然后让它自己解压缩。 (在我的情况下,它是一个GUI应用程序,因此它可以继续运行。)
启动MegaDumper并在列表中找到.NET进程(这时它已经在内存中解压缩了。)

右键单击它,然后选择.NET dump,稍等片刻,它将在与转储的.NET文件相同的位置创建一个文件夹。



然后简单地从dnSpy的转储文件夹中打开.exe,它将可以正常进行反汇编,因此可以放置断点并对其进行调试:




最后,只是想说一眼,问题中打包的.NET可执行文件似乎并不恶意。多个AV的报告可能是由于使用了俄罗斯包装机。因此,这对于决定打包其合法软件的开发人员可能是一个提示。 (只是说...)

#2 楼

在按“暂停”后,您将在消息循环中结束-没关系。转到调用堆栈窗口,您应该在之前的帧中看到二进制文件。双击其中之一,dnSpy应该加载它并进行分析。

但是由于二进制文件已经打包(并且可能被混淆了),我认为您需要先解压缩二进制文件并运行此版本,以便正确地将指令映射到行。

评论


是的,从目标.NET进程中,调用栈可以引用Main()函数中的某个位置,但是在dnSpy中单击它则无济于事。 TBH,我从未解压缩.NET可执行文件。这是什么过程?它仅仅是通过先将内存转储到本机调试器中的手动过程。

–c00000fd
18年11月21日在21:15



尝试de4dot

–PawełŁukasik
18年11月22日在7:14

de4dot可以从内存访问文件吗?我得到的文件不是.NET PE文件,如果我只是通过它运行原始exe文件的话。

–c00000fd
18年11月22日在23:03

不,不是。看起来原始exe不是.net程序集,仅在解压缩后才成为一个。

–PawełŁukasik
18年11月23日在7:25