有些C#程序和powershell脚本中用Marshal.GetDelegateForFunctionPointer动态加载和调用代码,有什么工具能够逆向这些代码?
C#示例:
[UnmanagedFunctionPointer(CallingConvention.StdCall)]
delegate void pFunction();
Marshal.Copy(assembly_code,
0
, baseAddress, shellcode.Length);
pFunction f
=
(pFunction)Marshal.GetDelegateForFunctionPointer( baseAddress,typeof(pFunction));
f();
powershell示例
$var_va
[System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer((func_get_proc_address kernel32.dll VirtualAlloc), (func_get_delegate_type @([IntPtr], [UInt32], [UInt32], [UInt32]) ([IntPtr])))
$var_buffer
$var_va.Invoke([IntPtr]::Zero, $var_code.Length,
0x3000
,
0x40
)
[System.Runtime.InteropServices.Marshal]::Copy($var_code,
, $var_buffer, $var_code.length)
$var_runme
[System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer($var_buffer, (func_get_delegate_type @([IntPtr]) ([Void])))
$var_runme.Invoke([IntPtr]::Zero)
有什么工具推荐?
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
不像是native x64 code,不然IDA也可以反汇编和动态调试。这种情况x64dbg能够支持吗?
而且不少情况是malware analyze,所以还是希望找一个静态分析的方法。