序言
接着上回分析,这回分析释放出来的
EXE
文件.
功能
设置服务名对应的处理函数.
函数分析
-
0x401D00
GetModuleFileNameA(hModule, &Filename, 0x104u); //获取执行文件路径
v2 = CreateFileA(&Filename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, NULL, NULL); //
...
SetFilePointer(v2, -4500, 0, 2u); // 移动至距文件尾4500字节位置
v5 = operator new(4500u);
ReadFile(v3, v5, 4500u, &NumberOfBytesRead, 0);
CloseHandle(v3);
v6 = sub_401C90((int)v5, (const char *)a2, 4500, 0); //查找字符串"LOADER"所在的位置, 主要获取"LOADER"后面的内容,即"X6Remote"
-
0x401030
/*
* 别看这个函数很复杂, 但用上得只有很少一部分, 参数传进去, 功能相当于将字符串开头的空格
* 剔除
*/
sub_401030(HKEY_LOCAL_MACHINE, &SubKey, ValueName, 1u, String, 0, v5, 0);// URL, String = AAAAAA/87xz6eIiIuLp+TL/LOPiYmJiZk=
v6 = lstrlenA(byte_404218);
sub_401030(HKEY_LOCAL_MACHINE, &SubKey, aDll_name, 1u, byte_404218, 0, v6, 0);// return 0, byte_404218 = xxxxxx.dll
-
- 服务处理函数
0x401990
- 服务处理函数
/*
* CreateThread(0, 0, (LPTHREAD_START_ROUTINE)StartAddress, 0, 0, v2);
*/
---------------------------StartAddress Start-------------------------------------
SHGetSpecialFolderPathA(0, &pszPath, 38, 0); //获取"C:\Program Files"
GetModuleFileNameA(0, &Filename, 0x104u); // 获取当前可执行文件的路径
PathStripPath(&Filename, &v17, &String2, &v16);//0x401EF0 相当于Windows API PathStripPath, 将路径去除, 文件赋给String2.
...
while (1){
Sleep(0x64u);
if ( FindSpecifiedProcess(&DSMain.exe) ) // DSMain.exe, 360的实时监控程序, 出现DSMain.exe, 就会将当前文件移至C:\Program Files文件夹下.
break;
Sleep(0xBB8u);
}
-----------------------------StartAddress End--------------------------------------
执行DLL
代码
wsprintfA(&CmdLine, aRundll32SCodem, byte_404218);// rundll32 xxxxxx.dll,CodeMain
VersionInformation.dwOSVersionInfoSize = 0x94;
GetVersionExA(&VersionInformation);
if ( VersionInformation.dwMajorVersion >= 6 ) // win10
sub_401670(&CmdLine); // Windows 10, Windows 2016
else
WinExec(&CmdLine, 0); //Windows XP, Windows 7, Windows 8, Windows 8.1
-
0x401670
/*
* Windows 10 执行rundll32需要管理员权限.
*/
.......待续
总结
这个
EXE
就是要执行DLL
中的CodeMain
函数, 服务中的URL
项应该是个域名, 只不过是被加密的.