HRA33.DLL完整分析 LPK.DLL 的劫持 和感染ZIP RAR 实现细节
xp win7的时候 lpk.dll 是很常见的,如果非system32目录下有lpk.dll 那么你就需要好好检查下你的电脑了.之前听薛大神讲过关于LPK.DLL USP.DLL 的相关流程 自己分析后更深刻了.
Hra33.dll 就是利用EXE加载dll的先后顺序的机制 如果EXE运行的当前目录下有LPK.DLL 就直接载入 而不会去系统目录找.
属于这个远控的核心DLL 从0分析一款经典的感染型远控木马
其实从Hra33.dll做的事情比较简单
1.释放一个临时文件hraxx.tmp 运行
2.将有exe的目录下释放一个LPK.DLL文件(只是名字叫lpk.dll 而且具有系统lpk.dll的所有功能)
3.将没有密码的ZIP RAR 利用CMD命令 插入lpk.dll(同上)
先从DLL入口函数开始看:
if (fdwReason == 1) { hModule = hinstDLL; GetModuleFileNameW(hinstDLL, (LPWSTR)&Filename, 260u); DisableThreadLibraryCalls(hinstDLL); if (Get_ServerNameA() == 1) { if (!Check_tmp() && !CreateMutexAA()) // 判断自身进程是否为临时文件程序 && 判断是否可以创建互斥体 Create_NewTem(); // 创建一个新的临时文件并运行 还是之前的EXE if (Check_lpk() == 1) // 判断是否为lpk.dll { hEvent = CreateEventW(0, 1, 0, 0); if (hEvent) Create_Thread1(); // 主要搞事情的函数 } } // 自身载入真正的lpk.dll 并将导出函数的地址给获取 result = Transpond_lpk_start(); } else { if (!fdwReason) { if (hEvent) { SetEvent(hEvent); WaitForSingleObject(hObject, 0xFFFFFFFF); CloseHandle(hObject); CloseHandle(hEvent); } Freelib(); // 释放资源 } result = 1; } return result; |
Create_NewTem() 函数实现细节

Create_Thread1() 实现细节
hObject = CreateThread(0, 0, (LPTHREAD_START_ROUTINE)Start_Search, 0, 4u, 0);// 以挂起的状态创建线程 if (!SetThreadPriority(hObject, THREAD_PRIORITY_IDLE) || (result = ResumeThread(hObject), result == -1))// 判断线程是否正常恢复 套了一层.进去看看
StartAddress()函数实现细节 主要就是遍历文件 符合条件就copy个lpk.dll 继续遍历
EXE的处理方式是比较简单的 我们看看怎么实现RAR里面增加LPK.dll文件的 AppendLPK(&String2); // 将RAR路径传入
RunRarCmd() 传入的命令 和等待时间 创建进程来执行该命令 [图片:720407_xjmg5dbthoc8znv.png]
|
还有个挺有意思的 就是当EXE程序需要调用到系统DLL的时候 如何将值传递给EXE


将lpk.dll的导出函数一个个加载进来保存 假的的lpk.dll载入真正的lpk.dll 的导出函数 再运行就能达到这个效果了.之前没接触过 感觉很神奇..
Hra33.dll
WIN7环境下 zip文件和加密后的压缩文件 可能是系统版本的原因 不会被感染 打脸




OD

