首页
社区
课程
招聘
[旧帖] [调查]一个小病毒 0.00雪花
发表于: 2008-3-13 18:15 3776

[旧帖] [调查]一个小病毒 0.00雪花

2008-3-13 18:15
3776
本人太菜,
跟不上,
哪位高手看一下.

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
有脱壳前的吗?
2008-3-13 18:28
0
雪    币: 203
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
有,
是双壳,
也不是太难脱,
这个是没脱壳的.

没密码.

请小心!!!!!!!!!!!!!!!!!!!

再有这个病毒挺强的,只要它用过的目录,你一打开就会被关闭,

winrar也在其中,

cmd被修改了,attrib ,dir一些命令参数不好使了,

(就想看看它是如何在这里动的手脚的,哎,太菜,不知各位前辈有什么好办法让俺找到这里学习一下)

这是病毒的第一个call 00404558,

0040F328 >/$  55            push    ebp                               ;脱完壳后的oep
0040F329  |.  8BEC          mov     ebp, esp
0040F32B  |.  B9 32000000   mov     ecx, 32
0040F330  |>  6A 00         /push    0
0040F332  |.  6A 00         |push    0                               ;  12ffbc-12fe30
0040F334  |.  49            |dec     ecx
0040F335  |.^ 75 F9         \jnz     short 0040F330
0040F337  |.  51            push    ecx
0040F338  |.  53            push    ebx
0040F339  |.  56            push    esi
0040F33A  |.  57            push    edi
0040F33B  |.  B8 C0F24000   mov     eax, 0040F2C0
0040F340  |.  E8 1352FFFF   call    00404558                                ; 第一个call

00404558  /$  53            push    ebx
00404559  |.  8BD8          mov     ebx, eax
0040455B  |.  33C0          xor     eax, eax
0040455D  |.  A3 B0104100   mov     dword ptr ds:[4110B0], eax
00404562  |.  6A 00         push    0                                   ; /pModule = NULL
00404564  |.  E8 2BFFFFFF   call    <jmp.&kernel32.GetModuleHandleA>    ; \GetModuleHandleA
00404569  |.  A3 50264100   mov     dword ptr ds:[412650], eax                ;返回一个句柄 ASCII "MZP"
0040456E  |.  A1 50264100   mov     eax, dword ptr ds:[412650]
00404573  |.  A3 B8104100   mov     dword ptr ds:[4110B8], eax          ;[4110B8]=bindu.00400000 "MZP"
00404578  |.  33C0          xor     eax, eax
0040457A  |.  A3 BC104100   mov     dword ptr ds:[4110BC], eax                ;[4110BC]=0
0040457F  |.  33C0          xor     eax, eax
00404581  |.  A3 C0104100   mov     dword ptr ds:[4110C0], eax                ;[4110C0]=0
00404586  |.  E8 C1FFFFFF   call    0040454C                                ;[4110B4]存放是[411028]里的值,就是4110b4
0040458B  |.  BA B4104100   mov     edx, 004110B4                        ;4110b4里放的是
00404590  |.  8BC3          mov     eax, ebx                                ;4110b4=0040F2C0 (bindu.0040F2C0)
00404592  |.  E8 35F3FFFF   call    004038CC                                ;得到一些用到的信息,
00404597  |.  5B            pop     ebx
00404598  \.  C3            retn

==============call    0040454C

0040454C  /$  B8 B4104100   mov     eax, 004110B4
00404551  |.  E8 0AFDFFFF   call    00404260
00404556  \.  C3            retn
00404260  /$  8B15 28104100 mov     edx, dword ptr ds:[411028]                ;
00404266  |.  8910          mov     dword ptr ds:[eax], edx                ;
00404268  |.  A3 28104100   mov     dword ptr ds:[411028], eax                ;
0040426D  \.  C3            retn

==============call    004038CC

004038CC  /$  C705 10204100>mov     dword ptr ds:[412010], <jmp.&kernel32.RaiseException> ;异常
004038D6  |.  C705 14204100>mov     dword ptr ds:[412014], <jmp.&kernel32.RtlUnwind>           ;定义类型
004038E0  |.  A3 28264100   mov     dword ptr ds:[412628], eax                ;[412628]=040F2C0 (bindu.0040F2C0)    ×
004038E5  |.  33C0          xor     eax, eax
004038E7  |.  A3 2C264100   mov     dword ptr ds:[41262C], eax                ;[41262c]=0
004038EC  |.  8915 30264100 mov     dword ptr ds:[412630], edx                ;[412630]=4110b4
004038F2  |.  8B42 04       mov     eax, dword ptr ds:[edx+4]                ;4110b8=MZP
004038F5  |.  A3 1C204100   mov     dword ptr ds:[41201C], eax                 ;[41201C]=00400000    MZP
004038FA  |.  E8 C5FEFFFF   call    004037C4                                ;
004038FF  |.  C605 24204100>mov     byte ptr ds:[412024], 0                ;把412024置零
00403906  |.  E8 61FFFFFF   call    0040386C                                ;得到一些信息
0040390B  \.  C3            retn                                        ;

===============================call    004037C4

004037C4  /$  31D2          xor     edx, edx                         ;  bindu.004110B4
004037C6  |.  8D45 F4       lea     eax, dword ptr ss:[ebp-C]        ;  申请好的空间地址
004037C9  |.  64:8B0A       mov     ecx, dword ptr fs:[edx]          ;  fs[0] seh链尾
004037CC  |.  64:8902       mov     dword ptr fs:[edx], eax          ;  FS[0]得到空间地址
004037CF  |.  8908          mov     dword ptr ds:[eax], ecx          ;  把SEH写入空间头
004037D1  |.  C740 04 24374>mov     dword ptr ds:[eax+4], 00403724   ;  接着写入403724
004037D8  |.  8968 08       mov     dword ptr ds:[eax+8], ebp        ;  再EBP放入ebp=0012FFC0下个地址
004037DB  |.  A3 24264100   mov     dword ptr ds:[412624], eax       ;  把头地址放入412624
004037E0  \.  C3            retn
堆栈数据变为

0012FFB4   0012FFE0  指向下一个 SEH 记录的指针
0012FFB8   00403724  SE处理程序
0012FFBC   0012FFC0
0012FFC0   0012FFF0

================================call    0040386C

0040386C   $  55            push    ebp                              ;  保存EBP
0040386D   .  8BEC          mov     ebp, esp                         ;  保存栈顶
0040386F   .  53            push    ebx                              ;  压入数据ebx=0040F2C0 (bindu.0040F2C0)
00403870   .  56            push    esi                              ;  ESI=0
00403871   .  57            push    edi                              ;  EDI=0
00403872   .  A1 28264100   mov     eax, dword ptr ds:[412628]       ;  把数据放入EAX
00403877   .  85C0          test    eax, eax                         ;  是否为空      ;F2C0
00403879   .  74 4B         je      short 004038C6
0040387B   .  8B30          mov     esi, dword ptr ds:[eax]          ;  取数据 ESI=C
0040387D   .  33DB          xor     ebx, ebx
0040387F   .  8B78 04       mov     edi, dword ptr ds:[eax+4]        ;  取下一个ds:[0040F2C4]=0040F2C8 (bindu.0040F2C8)
00403882   .  33D2          xor     edx, edx
00403884   .  55            push    ebp                              ;  保存EBP
00403885   .  68 B2384000   push    004038B2                         ;  压入4038B2
0040388A   .  64:FF32       push    dword ptr fs:[edx]               ;  压入FS[0]=12FFB4
0040388D   .  64:8922       mov     dword ptr fs:[edx], esp          ;  FS[0]保存栈顶
00403890   .  3BF3          cmp     esi, ebx                         ;  比较
00403892   .  7E 14         jle     short 004038A8
00403894   >  8B04DF        mov     eax, dword ptr ds:[edi+ebx*8]    ;  ds:[0040F2C8]=004045CC (bindu.004045CC)
00403897   .  43            inc     ebx
00403898   .  891D 2C264100 mov     dword ptr ds:[41262C], ebx       ;  保存数值
0040389E   .  85C0          test    eax, eax
004038A0   .  74 02         je      short 004038A4
004038A2   .  FFD0          call    near eax                         ;  sub     dword ptr ds:[412654], 1;键盘,系统,线程
004038A4   >  3BF3          cmp     esi, ebx                         ;  
004038A6   .^ 7F EC         jg      short 00403894                     ;  循环,call near eax进入不同的bindu段,
004038A8   >  33C0          xor     eax, eax
004038AA   .  5A            pop     edx
004038AB   .  59            pop     ecx
004038AC   .  59            pop     ecx
004038AD   .  64:8910       mov     dword ptr fs:[eax], edx          ;  FS[0]=12FDF4=12FFB4
004038B0   .  EB 14         jmp     short 004038C6
004038B2   .^ E9 CDFBFFFF   jmp     00403484
004038B7   .  E8 50FFFFFF   call    0040380C
004038BC   .  E8 27FDFFFF   call    004035E8
004038C1   .  E8 76FDFFFF   call    0040363C
004038C6   >  5F            pop     edi
004038C7   .  5E            pop     esi
004038C8   .  5B            pop     ebx
004038C9   .  5D            pop     ebp
004038CA   .  C3            retn

=====================================call near eax进入不同的bindu段

俺的汇编太差,只能知其毛皮,说不出为什么要这样来取得信息?不知有没有大侠赐教一下!!!!!!

===================edx=1
004045CC   .  832D 54264100>sub     dword ptr ds:[412654], 1                ;ds:[00412654]=FFFFFFFF
004045D3   .  C3            retn
===================edx=2
004043C0   .  832D A4254100>sub     dword ptr ds:[4125A4], 1           ;  [4125A4]-1
004043C7   .  0F83 C5000000 jnb     00404492
004043CD   .  C605 0C104100>mov     byte ptr ds:[41100C], 2            ;  [41100C]=2
004043D4   .  C705 10204100>mov     dword ptr ds:[412010], <jmp.&kerne>
004043DE   .  C705 14204100>mov     dword ptr ds:[412014], <jmp.&kerne>
004043E8   .  C605 36204100>mov     byte ptr ds:[412036], 2            ;  [412036]=2
004043EF   .  C705 00204100>mov     dword ptr ds:[412000], 004041C0    ;  [412000]=4041C0
004043F9   .  E8 8AEEFFFF   call    00403288                           ;  的到键盘属性
004043FE   .  84C0          test    al, al                             ;  是否得到
00404400   .  74 05         je      short 00404407
00404402   .  E8 B1EEFFFF   call    004032B8                                ;
00404407   >  E8 70EFFFFF   call    0040337C                                ;初始化FPU,从ds:[411014]装入FPU的控制字
0040440C   .  66:C705 3C204>mov     word ptr ds:[41203C], 0D7B0
00404415   .  66:C705 08224>mov     word ptr ds:[412208], 0D7B0
0040441E   .  66:C705 D4234>mov     word ptr ds:[4123D4], 0D7B0
00404427   .  E8 60CCFFFF   call    <jmp.&kernel32.GetCommandLineA>    ; [GetCommandLineA
0040442C   .  A3 2C204100   mov     dword ptr ds:[41202C], eax         ;  返回当前路径
00404431   .  E8 C6CCFFFF   call    004010FC                           ;  检索要创建进程的信息
00404436   .  A3 28204100   mov     dword ptr ds:[412028], eax
0040443B   .  E8 A4CCFFFF   call    <jmp.&kernel32.GetVersion>         ;  得到系统版本
00404440   .  25 00000080   and     eax, 80000000                      ;  与,的零
00404445   .  3D 00000080   cmp     eax, 80000000
0040444A   .  74 2D         je      short 00404479
0040444C   .  E8 93CCFFFF   call    <jmp.&kernel32.GetVersion>
00404451   .  25 FF000000   and     eax, 0FF                           ;  取后两位
00404456   .  66:83F8 04    cmp     ax, 4                              ;  是98吗
0040445A   .  76 0C         jbe     short 00404468                     ;  不高于跳
0040445C   .  C705 A8254100>mov     dword ptr ds:[4125A8], 3           ;  [4125A8]=3
00404466   .  EB 20         jmp     short 00404488
00404468   >  E8 47CCFFFF   call    <jmp.&kernel32.GetThreadLocale>    ; [GetThreadLocale
0040446D   .  E8 86FEFFFF   call    004042F8
00404472   .  A3 A8254100   mov     dword ptr ds:[4125A8], eax
00404477   .  EB 0F         jmp     short 00404488
00404479   >  E8 36CCFFFF   call    <jmp.&kernel32.GetThreadLocale>    ; [GetThreadLocale
0040447E   .  E8 75FEFFFF   call    004042F8
00404483   .  A3 A8254100   mov     dword ptr ds:[4125A8], eax
00404488   >  E8 4FCCFFFF   call    <jmp.&kernel32.GetCurrentThreadId> ; [GetCurrentThreadId
0040448D   .  A3 20204100   mov     dword ptr ds:[412020], eax         ;  返回线程ID
00404492   >  C3            retn

=========call    0040337C

0040337C  /$  DBE3          finit                                    ;  初始化FPU
0040337E  |.  9B            wait
0040337F  |.  D92D 14104100 fldcw   word ptr ds:[411014]             ;  从ds:[411014]装入FPU的控制字
00403385  \.  C3            retn

=========call    004010FC

004010FC  /$  53            push    ebx                                ;  保存EBX
用来检索要创建的进程结构,
堆栈数据变为:
0012FDA4   00000044
0012FDA8   00143BC8
0012FDAC   00143BE8  ASCII "WinSta0\Default"
0012FDB0   00143DF8  ASCII "D:\bindu.exe"

\\\\\\\\\\\\\\\\\省略3到C,因为什么也没做和1一样

这个子程序就是完成了一些病毒发作前的准备工作,

做到知自知彼,

申请空间,得到系统信息,保存用得到的信息到指定的地址,

如[41202C]放的是当前路径 [412020]是线程ID

有些只是自己瞎猜的,只是说说而己,有不对的地方请多多指正。

让小菜多多学习一下。
上传的附件:
2008-3-14 09:06
0
雪    币: 19
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
第一层是不是UPX,第二层是不是AsPack 2.12?
2008-3-14 09:57
0
雪    币: 109
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
呵呵 估计这个病毒自带 自删除的功能吧 看了下它的代码!
2008-3-14 12:27
0
雪    币: 200
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
6
俺是新手,现在还不敢试
2008-3-14 13:14
0
游客
登录 | 注册 方可回帖
返回