在网上看到一个用 rundll32 调用 c# 的 dll 的案例, 感觉还不错, 就拿来复现一下
借助 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
选择自己系统相匹配的版本然后运行
来源: http://www.bubuko.com/infodetail-3400567.html