chishubiao 发表于 2014-9-13 22:01

【成长快乐】一个菜鸟是如何分析这个病毒的

先声明,本人菜鸟一枚,今天刚入吾爱,接触逆向这一块只有很短的时间,且也不熟悉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:
CODE:004B6880               lea   edx,
CODE:004B6886               mov   eax, offset aC3fbc4b6d0f9_1 ; "C3FBC4B6D0F9A6FFDCE1B1BE"
CODE:004B688B               call    decode
CODE:004B6890               mov   eax,
CODE:004B6896               push    eax
CODE:004B6897               push    offset _str____________4.Text
CODE:004B689C               lea   edx,
CODE:004B68A2               mov   eax, offset _str_C5B0A0F3A1DBABB.Text
CODE:004B68A7               call    decode
CODE:004B68AC               mov   ecx,
CODE:004B68B2               mov   edx, 1Eh
CODE:004B68B7               mov   eax,
CODE:004B68BA               call    sub_4ABFAC
CODE:004B68BF               test    eax, eax
CODE:004B68C1               jnz   short loc_4B6903
CODE:004B68C3               lea   edx,
CODE:004B68C9               mov   eax, offset _str_A1BED8A34A4A.Text
CODE:004B68CE               call    decode
CODE:004B68D3               mov   eax,
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边观察各个寄存器的状况,遇到不会的指令就现查。
以下是我做的标注,各位勿喷。。-_-!

丫的,分析了好久,才发现它其实干的事情很简单,就是把字符串每次取2个字符,然后把它转换为整数,再对12做xor运算,结果再转换为字符,然后把它们再strcat起来。
于是我写了对应的C程序,很久以前学习的C语言,而且学的很渣,语法什么的早已忘记,而且本人的编程能力实在是渣的不行,以下代码几乎都是先查语法写的,各位勿喷-_-!
#include<stdio.h>
#include<string.h>

void decode(char* input)
{       
        int length = strlen(input);
        int i;
        char tmp;
        int number;

        for(i=1;i<length;i++){
                int index = 2*i -2 ;
                if(index<length){
                tmp = input;
                tmp = input;
                tmp = '\0';
                sscanf(tmp, "%x",&number);
                number = number ^ 0x12;
                printf("%c",number);
        }               

}

int main(int argc,char *argv[])
{       

        char* result;
        printf("%s",argv);
        printf("\n");
        result = decode(argv);

        return 0;
}
由于本人不会idc脚本,所以还是用笨办法,自己一个一个的手动标注,有了标注就好看多了。打开一看:

有好多银行的url.接着看:
CODE:004CBC10               push    0FFh            ; nMaxCount
CODE:004CBC15               lea   eax,
CODE:004CBC1B               push    eax             ; lpClassName
CODE:004CBC1C               push    esi             ; hWnd
CODE:004CBC1D               call    GetClassNameA
CODE:004CBC22               push    0FFh            ; nMaxCount
CODE:004CBC27               lea   eax,
CODE:004CBC2D               push    eax             ; lpString
CODE:004CBC2E               push    esi             ; hWnd
CODE:004CBC2F               call    GetWindowTextA
CODE:004CBC34               lea   edx,
CODE:004CBC37               mov   eax, offset _str_46567756775F737.Text ; TDeDeMainForm
CODE:004CBC3C               call    decode
CODE:004CBC41               lea   edx,
CODE:004CBC44               mov   eax, offset _str_41626B3939.Text ; Spy++
CODE:004CBC49               call    decode

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,
CODE:004CBCE5               mov   eax, offset _str_71284E707D7D663.Text ; c:\boot.ini
CODE:004CBCEA               call    decode
CODE:004CBCEF               mov   eax,
CODE:004CBCF5               call    @Sysutils@DeleteFile$qqrx17System@AnsiString ; Sysutils::DeleteFile(System::AnsiString

发现窗口有TDeDeMainForm SPY++就让你重启,还删你boot.ini.防分析的。接下来:
CODE:004CBF92               mov   eax, offset _str_537E7B7B7F41737.Text ; AliimSafe.exe
CODE:004CBF97               call    decode
CODE:004CBF9C               mov   eax,
CODE:004CBF9F               call    callTerminateProcess
CODE:004CBFA4               cmp   ds:byte_4D0B80, 0
CODE:004CBFAB               jnz   short loc_4CBFEC
CODE:004CBFAD               lea   edx,
CODE:004CBFB0               mov   eax, offset _str_434350607D65617.Text ; QQBrowser.exe
CODE:004CBFB5               call    decode
CODE:004CBFBA               mov   eax,
CODE:004CBFBD               call    callTerminateProcess
CODE:004CBFC2               lea   edx,
CODE:004CBFC5               mov   eax, offset _str_212422717A607D7.Text ; 360chrome.exe
CODE:004CBFCA               call    decode
CODE:004CBFCF               mov   eax,
CODE:004CBFD2               call    callTerminateProcess
CODE:004CBFD7               lea   edx,
CODE:004CBFDA               mov   eax, offset _str_7E7B7770737D3C7.Text ; liebao.exe
CODE:004CBFDF               call    decode
CODE:004CBFE4               mov   eax,
CODE:004CBFE7               call    callTerminateProcess

杀掉这些进城要干嘛?继续分析:
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是不带提示隐藏的操作 这玩意是中国银行的一个插件,看名字是保护你使用网银的。继续分析:
CODE:004AB519               push    0FFh            ; nMaxCount
CODE:004AB51E               lea   eax,
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,
CODE:004AB539               lea   edx,
CODE:004AB53F               mov   ecx, 100h
CODE:004AB544               call    unknown_libname_86 ; BDS 2005-2007 and Delphi6-7 Visual Component Library
CODE:004AB549               mov   eax,
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,
CODE:004AB566               push    eax             ; lpString
CODE:004AB567               push    edi             ; hWnd
CODE:004AB568               call    GetWindowTextA

它又在看用户是不是在使用IE了,之前杀掉了那些其他浏览器的进程,看来是这玩意只写了针对IE的,接着看:
CODE:004AA065               push    offset aOleacc_dll ; "Oleacc.dll"
CODE:004AA06A               call    LoadLibraryA
CODE:004AA06F               mov   , eax
CODE:004AA072               push    offset aObjectfromlres ; "ObjectFromLresult"
CODE:004AA077               mov   eax,
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:
CODE:004AA097               mov   fs:, esp
CODE:004AA09A               push    offset aWm_html_getobj ; "WM_HTML_GETOBJECT"
CODE:004AA09F               call    RegisterWindowMessageA
CODE:004AA0A4               lea   edx,
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接口。还是不知道要干嘛,继续查,得知有这玩意就可以实现修改用户网页内容。而前面已经发现有大量网银页面的链接,猜测它可能是判断到正在上那些网站就会修改页面的内容来搞钱。继续分析:
发现其会对不同的网站做不同的处理,其中一个:

对弹出来的窗口发消息,或隐藏,或诱导你点u盾。
发现工作量实在是有点大,而且本人技术是在太菜,之后还有很多内容正在分析,因此还没发出来大家勿喷-_-!
如果还有像我这样的新手喜欢的话我会继续直播,跟大家一起进步。【成长快乐】 :)

旋冰 发表于 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
占楼,那份走起!

感谢您的支持 {:1_918:}
页: [1] 2 3 4
查看完整版本: 【成长快乐】一个菜鸟是如何分析这个病毒的