首先要谢谢吾爱的@Youngs提供的样本,我用自己的思路在分析一遍
首先对行为进行分析,发现他在运行本身的同时还释放了一个小程序
程序本身创建了开机自启动项
还原一部分代码如下:
void AddReg()
{
char RegName[]="SoftWare\\Microsoft\\Windows \\CurrentVersion\\Run";
char szBuffer[MAX_PATH];
char hKey=NULL;
strcpy(szBuf,"%windir%\\2.exe");
RegOpenKey(HKEY_CURRERNT_USER,RegName,&hkey);
RegSetValueEx(hkey,
"2",
0,
REG_EXPAND_SZ,
(LPBYTE)szBuf,
strlen(szBuf)+1);
RegCloseKey(hkey);
}
在c盘用户目录下创建了desktop.ini的配置文件和其他的DLL文件,个人认为它们为病毒运行所需的文件
接下来载入OD,IDA进行调试
我发现程序中call sub_40E58中调用了GetModuleHandleA,GetCommandLineA,GetProcAddress等函数,所以应该是对病毒进行获取路径或者句柄进行操作
F8单步运行程序,会发现GetModuleHandleA对文件的路径进行了读取,在F8单步运行,我发现了一个cmp的比较函数,用'22',作为对病毒初始化的结束
接下来继续通过,继续分析call_sub405684,发现了一个CharNext函数,这个函数将病毒的路径重新的读取一遍,至此出现‘’‘’结束,这个函数应该和刚才的cmp相连
通过IDA继续分析,发现一个路径为 C:\DOCUME~1\ADMINI~1.GON\LOCALS~1\Temp\nst13.tmp的临时文件,说句实话,我也不知道他有什么用,先放一边,call00403208为提供路径的主要call(关键call)
接下来是字符串的链接起来,将C://WINDOWS和\temp链接起来
发现又重建了nss14.tmp的文件,然后又删除了,不过这样分析也分析不出什么有价值的东西,继续向下。
发现了一些新出现的东西C:\Documents and Settings\Administrator.GONG-EE1FB81712\Local Settings\Application Data\NVIDIA Corpo,我们跟过去看看
一路跟过去,发现出现的地方,可以明显的看到在C:\Documents and Settings\Administrator.GONG-EE1FB81712\Local Settings\Application Data\NVIDIA Corpo\update
,而copyfile则将母体进去进去
关闭句柄
00403502 |. 50 |push eax ; /hObject
00403503 |. FF15 EC704000 |call dword ptr ds:[<&KERNEL32.CloseHandle>] ; \CloseHandle
设置注册表的键值
.text:00402333 push ebx ; lpSecurityAttributes
.text:00402334 push ecx ; samDesired
.text:00402335 push ebx ; dwOptions
.text:00402336 push ebx ; lpClass
.text:00402337 push ebx ; Reserved
.text:00402338 push eax ; lpSubKey
.text:00402339 push edi ; hKey
.text:0040233A mov [ebp+var_4], 1
.text:00402341 call ds:RegCreateKeyExA
.text:00402347 test eax, eax
.text:00402349 jnz loc_40288B ; jumptable 00401489 default case
.text:0040234F cmp esi, 1
.text:00402352 mov edi, offset Data
.text:00402357 jnz short loc_402367
利用SHFILEOperationA使母体变名,变成C:\Documents and Settings\Administrator\Local Settings\Application Data\Microsoft\WinUpdate
删除母体
004055A0 |. 57 |push edi ; /FileName
004055A1 |. FF15 44714000 |call dword ptr ds:[<&KERNEL32.DeleteFil>; \DeleteFileA
这就是我的分析
编写一个小的查杀伪代码
void Kill2File()
{
char szWindows2[MAX_PATH] = {0};
char szSystem2[MAX_PATH] = {0};
GetWindowsDirectory(szWindows2,MAX_PATH);
GetSystemDirectory(szSystem2,MAX_PATH);
strcat(szWindows2,"\\2.exe");
strcat(szSystem2,"\\2.exe");
DeleteFile(szWindows2);
DeleteFile(szSystem2);
如有不足,还请多指教。