首页
论坛
课程
招聘
[求助] 反编译 raw C# assembly
2022-1-22 21:10 2743

[求助] 反编译 raw C# assembly

2022-1-22 21:10
2743

有些C#程序和powershell脚本中用Marshal.GetDelegateForFunctionPointer动态加载和调用代码,有什么工具能够逆向这些代码?

 

C#示例:

1
2
3
4
5
[UnmanagedFunctionPointer(CallingConvention.StdCall)]
delegate void pFunction();
Marshal.Copy(assembly_code, 0, baseAddress, shellcode.Length);
pFunction f = (pFunction)Marshal.GetDelegateForFunctionPointer( baseAddress,typeof(pFunction));
f();

powershell示例

1
2
3
4
5
6
7
8
9
$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, 0, $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)
  • ilspy/dnspy 只能逆向PE格式;
  • IDA pro Binary file 模式(MetaPC / Microsoft Visual Studio .Net) 都无法反汇编出指令;
  • libemu可以模拟执行。

有什么工具推荐?


【公告】看雪招聘大学实习生!看雪20年安全圈的口碑,助你快速成长!

最后于 2022-1-22 21:14 被technic_tec编辑 ,原因:
收藏
点赞0
打赏
分享
最新回复 (5)
雪    币: 241
活跃值: 活跃值 (949)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
wormfox 活跃值 2022-1-22 21:43
2
0
shellcode 直接x64dbg动态调试 
雪    币: 393
活跃值: 活跃值 (148)
能力值: ( LV6,RANK:95 )
在线值:
发帖
回帖
粉丝
technic_tec 活跃值 2022-1-22 22:10
3
0

不像是native x64 code,不然IDA也可以反汇编和动态调试。
这种情况x64dbg能够支持吗?


而且不少情况是malware analyze,所以还是希望找一个静态分析的方法。

最后于 2022-1-22 22:14 被technic_tec编辑 ,原因:
雪    币: 241
活跃值: 活跃值 (949)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
wormfox 活跃值 2022-1-23 14:53
4
0
VirtualAlloc 下断点去看不就知道了
雪    币: 393
活跃值: 活跃值 (148)
能力值: ( LV6,RANK:95 )
在线值:
发帖
回帖
粉丝
technic_tec 活跃值 2022-1-23 17:52
5
0
谢谢!
所以对于powershell case,只能运行.ps1脚本然后再attach上去是么?
雪    币: 241
活跃值: 活跃值 (949)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
wormfox 活跃值 2022-1-23 21:59
6
0
虚拟机
游客
登录 | 注册 方可回帖
返回