全自动DLL挖掘

还是白加黑好对付360啊,攻防有大量白加黑的需求,写个了自动挖白加黑的工具,对付项目强度ok了,这里大概过一下思路。

全自动挖掘白程序EXE所调用DLL中可劫持的DLL文件与其正常流程调用的函数名称,一键化挖掘非初始化函数DLL的高安全高隐秘的白加黑程序。

设计思路

1.获取EXE所在根目录下的所有文件、子文件夹的树形结构。

2.根据树形结构图,将所有非dll文件复制到新目录下所对应的位置。

3.将DLL文件全部重构,并放置在对应目录的位置。重构思路:重写所有DLL的导出函数的具体方法,方法功能为执行本函数后将“EXE name”、“DLL name”、“Function name”写入当前时间的文件中。

4.执行新目录下所有的EXE,如果EXE正常调用了DLL中的执行函数,就可以详细记录在生成的文件中。

5.后续进行版本通用性测试。

使用场景

1.需要测试大批量EXE与DLL文件。

2.需要测试整个文件夹下所有的EXE与DLL。

优缺点

1.优点:解放双手,坐等收可利用DLL文件。

2.优点:拷贝整个目录结构,即使EXE调用了目录下五六个DLL文件,EXE也能够按逻辑把DLL都加载一遍。

3.缺点:当文件夹中EXE与DLL的比例差越大则效果越差。如整个目录下有3000个文件,其中EXE有20个而DLL有1000个。其实20个EXE的初始功能根本用不到所有的DLL,但是按照程序设计逻辑会将所有DLL都重构,导致该情境下时间与产出性价比极低。

4.缺点:当前只能复制文件夹中所有的文件,但如果EXE本身所在的目录就存在加载缺失DLL的情况,那么当前情况下也测试不出来。只能使用Procmon监测当前exe还会加载哪些DLL,最后使用半自动化的工具去实施。

tips

1.C++编译dll有很多的格式语法限制导致兼容性很差。所以为了全自动化基础的适配性,最好还是先使用GO编译。

流程

1.确认要爬取的文件夹目录,调用爬取目录的所有文件,生成json存储

随后会得到该目录的树形结构.json

2.将json里除了DLL的其他所有文件整体转移到另一个目录(例如c:\users\public\download\abc→c:\users\public\music\newdir)

此时就会在目标路径下创建一个newdir,会把对应树形结构中的所有非DLL文件全部放到newdir目录中去。

3.对原始目录的DLL通过go进行重构

为了方便看哪个DLL的哪个函数执行成功,重构的时候每个函数都执行调用getexedllname(),最终以exename+dllname+functionname写入到统一文本中。

    void getexedllname(string exeName, string dllName, string functionName) {
        // 获取当前日期
        time_t t = time(nullptr);
        tm currentDate;
        localtime_s(&currentDate, &t);
        char currentTime[9];
        strftime(currentTime, sizeof(currentTime), "%Y%m%d", &currentDate);

        // 定义输出文件名
        string outputFilename = currentTime;
        outputFilename += ".txt";

        // 打开输出文件
        ofstream f(outputFilename.c_str(), ios_base::out | ios_base::app);
        if (!f.is_open()) {
            cerr << "Failed to open output file " << outputFilename << endl;
            return;
        }

        // 将输出写入到文件中
        f << "exeName = \"" << exeName << "\"\t";
        f << "dllName = \"" << dllName << "\"\t";
        f << "functionName = \"" << functionName << "\"" << endl;

        f.close();
    }

4.将重构好的DLL整体转移到目标路径(例如:c:\users\public\music\newdir)

5.依次执行目标文件夹的所有EXE

6.如果当前python执行目录下出现"日期.txt",则证明发现了可劫持的DLL文件,后续进行版本通用性测试

  • Created 2024-10-21 00:24
  • Published 2023-12-03 00:25
  • Updated 2024-10-21 00:57