通过rundll32运行C#DLL转储内存
在网上看到一个用rundll32调用c#的dll的案例,感觉还不错,就拿来复现一下
原文:https://blog.xpnsec.com/rundll32-your-dotnet/
借助mimikatz的项目https://github.com/GhostPack/SafetyKatz
一、VS加载项目
由于SafetyKatz是.NET PE程序实现,所以在VS中的属性 -> 应用程序 -> 输出类型中更改为 “类库”
二、修改代码
首先需要将Main函数改成如下
[DllExport] static void RunSafetyCatz()
这时候已经定义好入口点之后,设置输出在父程序终端
[DllImport("Kernel32.dll")]
private static extern bool AttachConsole(int processId);
AttachConsole(-1);
如果不设置,在之后调用rundll32的时候是没有回显的
最后的代码大致如下
... [DllExport] static void RunSafetyCatz() { AttachConsole(-1); string[] args; if (!IsHighIntegrity()) { Console.WriteLine("\n[X] Not in high integrity, unable to grab a handle to lsass!\n"); } ...
三、Nuget下载DllExport依赖
在工具->Nuget包管理中下载DllExport
下载完后卸载掉,这时候在项目路径中会出现一个DllExport.bat,点击运行
按照上述参数进行配置,然后点击Apply再重新加载项目到VS中
照常编译后
在项目的生成目录下会出现两个版本的dll
选择自己系统相匹配的版本然后运行