还是白加黑好对付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(¤tDate, &t);
char currentTime[9];
strftime(currentTime, sizeof(currentTime), "%Y%m%d", ¤tDate);
// 定义输出文件名
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文件,后续进行版本通用性测试
History
- Created 2024-10-21 00:24
- Published 2023-12-03 00:25
- Updated 2024-10-21 00:57