吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 12635|回复: 30
收起左侧

[PC样本分析] 【成长快乐】一个菜鸟是如何分析这个病毒的

  [复制链接]
chishubiao 发表于 2014-9-13 22:01
使用论坛附件上传样本压缩包时必须使用压缩密码保护,压缩密码:52pojie,否则会导致论坛被杀毒软件等误报,论坛有权随时删除相关附件和帖子!
病毒分析分区附件样本、网址谨慎下载点击,可能对计算机产生破坏,仅供安全人员在法律允许范围内研究,禁止非法用途!
禁止求非法渗透测试、非法网络攻击、获取隐私等违法内容,即使对方是非法内容,也应向警方求助!
先声明,本人菜鸟一枚,今天刚入吾爱,接触逆向这一块只有很短的时间,且也不熟悉windows编程,但希望仅仅以此贴为代表,以后会以【成长快乐】为标题,跟和我一样初入逆向这条道的朋友们分享我的经验,大家一起交流,一起成长。大牛们觉得无聊可以直接无视我们,当然,要是能给我们这些初学者一些建议那就最好不过了。

正题开始。

样本信息:
Borland Delphi v6.0 - v7.0
Size:1.11 MB
MD5: 06D9AE18F911FFCBE9A57A4565E8A8F6

不知道大家有没有这样的感觉,作为我这样一个初学者,拿到一个样本往往无从下手,往往查完壳之后就不知道怎么开始入手了。我的经验是(当然我这属于菜鸟级别的经验,大牛莫笑),先看看字符串,看看导入表,大体的猜猜这个程序是干什么的,这样非常利于之后的详细分析。于是我找到了以下敏感字符:
AsciiHz offset:000b1658  ==>   订单详情  
AsciiHz offset:000b166c  ==>  订单详情 加载订单
AsciiHz offset:000b1688  ==>  订单详情
AsciiHz offset:000b16a8  ==>  J-getPrice
AsciiHz offset:000b16cc  ==>  您已成功付款
AsciiHz offset:000b16e4  ==>  已收到您的付款
AsciiHz offset:000b1710  ==>  转账成功
AsciiHz offset:000b1724  ==>  转账拦截成功
AsciiHz offset:000b173c  ==>  pay-record
AsciiHz offset:000b1750  ==>  class=ft-orange
AsciiHz offset:000b1768  ==>  ft-orange
AsciiHz offset:000b178c  ==>  元可选择其他
AsciiHz offset:000b17a4  ==>  剩余可选择其他
AsciiHz offset:000b17bc  ==>  pay-total
AsciiHz offset:000b17d0  ==>  LABEL
AsciiHz offset:000b17f0  ==>  J-bank-amount
AsciiHz offset:000b1808  ==>  https://cashier.alipay.com/standard/gateway/ebankPay.htm
AsciiHz offset:000b184c  ==>  银行
AsciiHz offset:000b186c  ==>  余额网银同时支付
AsciiHz offset:000b1888  ==>  使用即时到账
AsciiHz offset:000b18a0  ==>  转账到银行卡
AsciiHz offset:000b18b8  ==>  orderDetail-base
AsciiHz offset:000b18e0  ==>  刷新</A>
AsciiHz offset:000b1904  ==>  网银支付中

看到这里便猜测到这可能是一个与网银相关的木马,接下来我又看到了:

AsciiHz offset:000b4318  ==>  7A666662283D3D62736B3C686675737F773C717D7F3D63747B7E7E74607D7F70737C793C627A62
AsciiHz offset:000b4380  ==>  64737E7B76736677717D76774D747B7E7E70737C79
AsciiHz offset:000b43c4  ==>  61777E4D78604D7B7C626766
AsciiHz offset:000b43e8  ==>  7371717D677C664D747B7E7E70737C79
AsciiHz offset:000b4444  ==>  ACCCDAD9C0FEA1B13F2A
AsciiHz offset:000b44f8  ==>  D5F9D6E8DDDADAA5DADDC0C6DDD0A1F6C4A7C2D7DDB0
AsciiHz offset:000b4530  ==>  ACCCDAD9DEF3D8AC50
AsciiHz offset:000b45a4  ==>  bank
AsciiHz offset:000b45b4  ==>  70737C79
AsciiHz offset:000b45c8  ==>  ACCCDAD9C0FEA1B13F27
AsciiHz offset:000b45e8  ==>  7C776A664D70667C

一大堆奇怪的字符串,猜测肯定是一些经过加密了的敏感的字符串,分析的时候一定要留意哪些地方调用了这些,是不是在用之前都call了一个解密的函数。
之后我又看到了很多有关IE的字符串,包括还有注册表,心里默默急着,等会分析的时候看看。
之后又看了看导入表,由于对windows编程不熟悉,只能知道其中部分API是干嘛的,其余都是看名字猜的,有对文件操作的,还有一些对窗口操作的,没办法了,只能遇到了现查。-_-!
接下来我在虚拟机里运行了这个程序,因为有时候看行为能帮你省不少事,但是用MD看了下发现没什么反应,心想会不会是有反虚拟机的玩意,于是我又查了一篇文章http://bbs.pediy.com/showthread.php?t=119969 用IDA看了下应该是没有的,猜测应该是在一定条件下才能触发行为。

前戏做的差不多了,ida来看看:
打开IDA就发现一个问题,我从未学过delphi,IDA打开后一堆@system的东西让我感到很茫然,于是我去查了资料,查到了这篇文章http://bbs.pediy.com/showthread.php?p=957532 看过之后对这个是有了一定了了解,硬着头皮继续
结构很复杂,于是我准备先从字符串入手,字符串如果都解开了的话,后面光看字符串都能知道它是干嘛的了。
对着一个奇怪的字符串,我按下了Ctrl+X:
[Asm] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
CODE:004B6880                 lea     edx, [ebp+var_F0]
CODE:004B6886                 mov     eax, offset aC3fbc4b6d0f9_1 ; "C3FBC4B6D0F9A6FFDCE1B1BE"
CODE:004B688B                 call    decode
CODE:004B6890                 mov     eax, [ebp+var_F0]
CODE:004B6896                 push    eax
CODE:004B6897                 push    offset _str____________4.Text
CODE:004B689C                 lea     edx, [ebp+var_F4]
CODE:004B68A2                 mov     eax, offset _str_C5B0A0F3A1DBABB.Text
CODE:004B68A7                 call    decode
CODE:004B68AC                 mov     ecx, [ebp+var_F4]
CODE:004B68B2                 mov     edx, 1Eh
CODE:004B68B7                 mov     eax, [ebp+var_4]
CODE:004B68BA                 call    sub_4ABFAC
CODE:004B68BF                 test    eax, eax
CODE:004B68C1                 jnz     short loc_4B6903
CODE:004B68C3                 lea     edx, [ebp+var_F8]
CODE:004B68C9                 mov     eax, offset _str_A1BED8A34A4A.Text
CODE:004B68CE                 call    decode
CODE:004B68D3                 mov     eax, [ebp+var_F8]
CODE:004B68D9                 call    sub_4A9C08
CODE:004B68DE                 mov     eax, offset dword_4D0B88
CODE:004B68E3                 call    @System@@LStrClr$qqrpv ; System::__linkproc__ LStrClr(void *)
CODE:004B68E8                 push    40030h         ; uType
CODE:004B68ED                 push    offset asc_4B6DFC ; "来自?
CODE:004B68F2                 push    offset asc_4B6E0C ; "?
CODE:004B68F7                 push    0              ; hWnd
CODE:004B68F9                 call    MessageBoxA_0
CODE:004B68FE                 jmp     loc_4B6331

这里我已经标注了decode,大家在做的时候最好也是分析完了一定要标注一下,否则跳出这个函数了就忘了,因为看到几乎所有的这种奇葩字符串后面要call的时候都调用了这个函数,确定为解密代码,进入后是一大堆的代码。实在是不想看,但是没有办法,不一句一句的看永远也成长不了,于是我硬着头皮读了下去,还是感觉很吃力,于是我用了笨办法,动态调试。边按F8边观察各个寄存器的状况,遇到不会的指令就现查。
以下是我做的标注,各位勿喷。。-_-!
decode.jpg
丫的,分析了好久,才发现它其实干的事情很简单,就是把字符串每次取2个字符,然后把它转换为整数,再对12做xor运算,结果再转换为字符,然后把它们再strcat起来。
于是我写了对应的C程序,很久以前学习的C语言,而且学的很渣,语法什么的早已忘记,而且本人的编程能力实在是渣的不行,以下代码几乎都是先查语法写的,各位勿喷-_-!
[C] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include<stdio.h>
#include<string.h>
 
void decode(char* input)
{  
    int length = strlen(input);
    int i;
    char tmp[3];
    int number;
 
    for(i=1;i<length;i++){
        int index = 2*i -2 ;
        if(index<length){
        tmp[0] = input[index];
        tmp[1] = input[index+1];
        tmp[2] = '\0';
        sscanf(tmp, "%x",&number);
        number = number ^ 0x12;
        printf("%c",number);
    }      
 
}
 
int main(int argc,char *argv[])
{  
 
    char* result;
    printf("%s",argv[1]);
    printf("\n");
    result = decode(argv[1]);
 
    return 0;
}

由于本人不会idc脚本,所以还是用笨办法,自己一个一个的手动标注,有了标注就好看多了。打开一看:
url.png
有好多银行的url.接着看:
[Asm] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
CODE:004CBC10                 push    0FFh           ; nMaxCount
CODE:004CBC15                 lea     eax, [ebp+ClassName]
CODE:004CBC1B                 push    eax            ; lpClassName
CODE:004CBC1C                 push    esi            ; hWnd
CODE:004CBC1D                 call    GetClassNameA
CODE:004CBC22                 push    0FFh           ; nMaxCount
CODE:004CBC27                 lea     eax, [ebp+String]
CODE:004CBC2D                 push    eax            ; lpString
CODE:004CBC2E                 push    esi            ; hWnd
CODE:004CBC2F                 call    GetWindowTextA
CODE:004CBC34                 lea     edx, [ebp+var_4]
CODE:004CBC37                 mov     eax, offset _str_46567756775F737.Text ; TDeDeMainForm
CODE:004CBC3C                 call    decode
CODE:004CBC41                 lea     edx, [ebp+var_8]
CODE:004CBC44                 mov     eax, offset _str_41626B3939.Text ; Spy++
CODE:004CBC49                 call    decode

[Asm] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
CODE:004CBCB4 loc_4CBCB4:                            ; CODE XREF: sub_4CBBC0+CAj
CODE:004CBCB4                 push    0              ; bEnable
CODE:004CBCB6                 push    esi            ; hWnd
CODE:004CBCB7                 call    EnableWindow
CODE:004CBCBC                 push    esi            ; hWnd
CODE:004CBCBD                 call    CloseWindow
CODE:004CBCC2                 push    0              ; uCmdShow
CODE:004CBCC4                 push    offset CmdLine ; "shutdown -r -t 2"
CODE:004CBCC9                 call    WinExec
CODE:004CBCCE                 push    3E8h           ; dwMilliseconds
CODE:004CBCD3                 call    Sleep_0
CODE:004CBCD8                 mov     ds:byte_4D0C10, 1
CODE:004CBCDF                 lea     edx, [ebp+var_214]
CODE:004CBCE5                 mov     eax, offset _str_71284E707D7D663.Text ; c:\boot.ini
CODE:004CBCEA                 call    decode
CODE:004CBCEF                 mov     eax, [ebp+var_214]
CODE:004CBCF5                 call    @Sysutils@DeleteFile$qqrx17System@AnsiString ; Sysutils::DeleteFile(System::AnsiString

发现窗口有TDeDeMainForm SPY++就让你重启,还删你boot.ini.防分析的。接下来:
[Asm] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
CODE:004CBF92                 mov     eax, offset _str_537E7B7B7F41737.Text ; AliimSafe.exe
CODE:004CBF97                 call    decode
CODE:004CBF9C                 mov     eax, [ebp+var_4]
CODE:004CBF9F                 call    callTerminateProcess
CODE:004CBFA4                 cmp     ds:byte_4D0B80, 0
CODE:004CBFAB                 jnz     short loc_4CBFEC
CODE:004CBFAD                 lea     edx, [ebp+var_8]
CODE:004CBFB0                 mov     eax, offset _str_434350607D65617.Text ; QQBrowser.exe
CODE:004CBFB5                 call    decode
CODE:004CBFBA                 mov     eax, [ebp+var_8]
CODE:004CBFBD                 call    callTerminateProcess
CODE:004CBFC2                 lea     edx, [ebp+var_C]
CODE:004CBFC5                 mov     eax, offset _str_212422717A607D7.Text ; 360chrome.exe
CODE:004CBFCA                 call    decode
CODE:004CBFCF                 mov     eax, [ebp+var_C]
CODE:004CBFD2                 call    callTerminateProcess
CODE:004CBFD7                 lea     edx, [ebp+var_10]
CODE:004CBFDA                 mov     eax, offset _str_7E7B7770737D3C7.Text ; liebao.exe
CODE:004CBFDF                 call    decode
CODE:004CBFE4                 mov     eax, [ebp+var_10]
CODE:004CBFE7                 call    callTerminateProcess

杀掉这些进城要干嘛?继续分析:
[Asm] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
CODE:004AAB09                 mov     eax, offset _str_C__WINDOWS_syst.Text ; C:\WINDOWS\system32\ProcessProtection.dll
CODE:004AAB0E                 call    @Sysutils@FileExists$qqrx17System@AnsiString ; Sysutils::FileExists(System::AnsiString)
CODE:004AAB13                 test    al, al
CODE:004AAB15                 jz      short loc_4AAB31
CODE:004AAB17                 push    1              ; nShowCmd
CODE:004AAB19                 push    0              ; lpDirectory
CODE:004AAB1B                 push    offset aCWindowsSyst_0 ; C:\WINDOWS\system32\ProcessProtection.dll /u /s
CODE:004AAB20                 push    offset File    ; "Regsvr32"
CODE:004AAB25                 push    offset Operation ; Open
CODE:004AAB2A                 push    0              ; hwnd
CODE:004AAB2C                 call    ShellExecuteA

发现有文件C:\WINDOWS\system32\ProcessProtection.dll  直接Regsvr32 C:\WINDOWS\system32\ProcessProtection.dll /u /s 查了下/u是卸载 /s是不带提示隐藏的操作 这玩意是中国银行的一个插件,看名字是保护你使用网银的。继续分析:
[Asm] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
CODE:004AB519                 push    0FFh           ; nMaxCount
CODE:004AB51E                 lea     eax, [ebp+ClassName]
CODE:004AB524                 push    eax            ; lpClassName
CODE:004AB525                 push    edi            ; hWnd
CODE:004AB526                 call    GetClassNameA
CODE:004AB52B                 test    eax, eax
CODE:004AB52D                 jle     loc_4AB5BF
CODE:004AB533                 lea     eax, [ebp+var_20C]
CODE:004AB539                 lea     edx, [ebp+ClassName]
CODE:004AB53F                 mov     ecx, 100h
CODE:004AB544                 call    unknown_libname_86 ; BDS 2005-2007 and Delphi6-7 Visual Component Library
CODE:004AB549                 mov     eax, [ebp+var_20C]
CODE:004AB54F                 mov     edx, offset _str_Internet_Explor_3.Text
CODE:004AB554                 call    @System@@LStrCmp$qqrv ; System::__linkproc__ LStrCmp(void)
CODE:004AB559                 jnz     short loc_4AB5BF
CODE:004AB55B                 push    0FFh           ; nMaxCount
CODE:004AB560                 lea     eax, [ebp+String]
CODE:004AB566                 push    eax            ; lpString
CODE:004AB567                 push    edi            ; hWnd
CODE:004AB568                 call    GetWindowTextA

它又在看用户是不是在使用IE了,之前杀掉了那些其他浏览器的进程,看来是这玩意只写了针对IE的,接着看:
[Asm] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
CODE:004AA065                 push    offset aOleacc_dll ; "Oleacc.dll"
CODE:004AA06A                 call    LoadLibraryA
CODE:004AA06F                 mov     [ebp+hLibModule], eax
CODE:004AA072                 push    offset aObjectfromlres ; "ObjectFromLresult"
CODE:004AA077                 mov     eax, [ebp+hLibModule]
CODE:004AA07A                 push    eax            ; hModule
CODE:004AA07B                 call    GetProcAddress_0
CODE:004AA080                 mov     esi, eax
CODE:004AA082                 mov     ebx, esi
CODE:004AA084                 test    esi, esi
CODE:004AA086                 jz      loc_4AA149
CODE:004AA08C                 xor     edx, edx
CODE:004AA08E                 push    ebp
CODE:004AA08F                 push    offset loc_4AA142
CODE:004AA094                 push    dword ptr fs:[edx]
CODE:004AA097                 mov     fs:[edx], esp
CODE:004AA09A                 push    offset aWm_html_getobj ; "WM_HTML_GETOBJECT"
CODE:004AA09F                 call    RegisterWindowMessageA
CODE:004AA0A4                 lea     edx, [ebp+dwResult]
CODE:004AA0A7                 push    edx            ; lpdwResult
CODE:004AA0A8                 push    3E8h           ; uTimeout
CODE:004AA0AD                 push    2              ; fuFlags
CODE:004AA0AF                 push    0              ; lParam
CODE:004AA0B1                 push    0              ; wParam
CODE:004AA0B3                 push    eax            ; Msg
CODE:004AA0B4                 push    edi            ; hWnd
CODE:004AA0B5                 call    SendMessageTimeoutA

这点着实不知道干嘛的,从名字也猜不出来,查了下资料。它是要调用系统动态库Oleacc.dll,获取导出函数ObjectFromLresult, 注册WM_HTML_GETOBJECT消息,为了获得HTMLDocument2接口。还是不知道要干嘛,继续查,得知有这玩意就可以实现修改用户网页内容。而前面已经发现有大量网银页面的链接,猜测它可能是判断到正在上那些网站就会修改页面的内容来搞钱。继续分析:
发现其会对不同的网站做不同的处理,其中一个:
ll.png
对弹出来的窗口发消息,或隐藏,或诱导你点u盾。
发现工作量实在是有点大,而且本人技术是在太菜,之后还有很多内容正在分析,因此还没发出来大家勿喷-_-!
如果还有像我这样的新手喜欢的话我会继续直播,跟大家一起进步。【成长快乐】 :)

免费评分

参与人数 3热心值 +3 收起 理由
/zhm天真 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩.
Cholon + 1 热心回复!
kingh + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

旋冰 发表于 2014-9-13 22:36
我用的是火眼文件检测!!
小呀小菜鸟 发表于 2014-9-13 22:11
菜鸟①号 发表于 2014-9-13 22:43
2217936322 发表于 2014-9-13 23:02
占楼,那份走起!
 楼主| chishubiao 发表于 2014-9-14 00:29 来自手机
小呀小菜鸟 发表于 2014-9-13 22:11
比我厉害多了  。。。

一起加油一起成长: )
小楠 发表于 2014-9-14 01:36
很明显是大神嘛
 楼主| chishubiao 发表于 2014-9-14 13:34
旋冰 发表于 2014-9-13 22:36
我用的是火眼文件检测!!

这个我没用过唉
 楼主| chishubiao 发表于 2014-9-14 13:36
菜鸟①号 发表于 2014-9-13 22:43
这还是菜鸟吗》》》

真的是菜鸟 才学习这些东西不到3个月的时间
 楼主| chishubiao 发表于 2014-9-14 13:38
2217936322 发表于 2014-9-13 23:02
占楼,那份走起!

感谢您的支持
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-3-27 11:44

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表