反汇编和调试在 C# 中通过委托执行的动态生成的代码

逆向工程 恶意软件 。网
2021-07-10 02:20:41

我正在尝试使用 dnSpy 逆向生成恶意软件,在某些时候这样做:

delegate IntPtr H7IREAEBYY(string path, IntPtr data);
byte[] array = new byte[]
        { 233, 151, ... }

IntPtr value = IntPtr.Zero;
IntPtr intPtr = W47PO0IHP8.VirtualAlloc(IntPtr.Zero, (uint)array.Length, 12288U, 64U);
Marshal.Copy(array, 0, intPtr, array.Length);
        W47PO0IHP8.H7IREAEBYY h7IREAEBYY = (W47PO0IHP8.H7IREAEBYY)Marshal.GetDelegateForFunctionPointer(intPtr, typeof(W47PO0IHP8.H7IREAEBYY));
h7IREAEBYY(path, intPtr2);  

当委托被执行时,调试器会跳过委托并且我无法分析这样的代码,我如何分析或反汇编通过委托执行的数组中的代码?

1个回答

您不能使用 dnSpy 做到这一点,因为存储在其中的代码array不是托管代码而是本机代码。因此,您必须提取这些字节,将它们保存在文件中,然后使用本机反汇编程序(如 r2、Ghidra、IDA 等)进行分析。

至于进入,也是一样。您必须使用本机调试器,而不是来自 dnSpy 的调试器。

由于这是一个混合二进制文件,以这样一种方式设置系统可能会很棘手,即您可以从 dnSpy 中调试的代码的一部分步进到本机的另一部分。