吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 12546|回复: 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] 纯文本查看 复制代码
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] 纯文本查看 复制代码
#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] 纯文本查看 复制代码
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] 纯文本查看 复制代码
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] 纯文本查看 复制代码
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] 纯文本查看 复制代码
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] 纯文本查看 复制代码
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] 纯文本查看 复制代码
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, 2024-11-24 14:00

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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