h_one 发表于 2013-7-8 23:53

简单qq盗号木马分析

   好像最近比较火,我也来凑一发热闹,只为求积分(发现真的好低)
简单分析报告:
基本信息
作者: jwn
样本类型:钓鱼盗号
壳信息:无壳
可能受到威胁的系统:windows

简介:
运行木马后,如果没有运行QQ进程,没有任何反应,若运行qq程序并且点击QQ程序后会弹出钓鱼框,欺骗用户输入,已到达盗号目的

简单分析:
调用LoadStringW函数从资源里加载字符串资源到Buffer 中为后面窗口类名做准备



[*]乱序填充字符到前面开辟的空间中, a=x12x&b=_)&c=(*.) 字符串用于后面qq号, 密码 匹配,还有字符串进程名, 窗口类名(TXGuiFoundtion) 通过Spy++工具,我们可以知道QQ的窗口类名就是 TXGuiFoundtion。

进人call 4010C0


创建互斥体保证只有一个进程运行
h_Mutex = CreateMutex(NULL, FALSE, "wanxinyi");//创建一个互斥对象
        if (h_Mutex)
        {
                if (ERROR_ALREADY_EXISTS == GetLastError())
                {
                        ExitProcess();
                }
        }





拷贝字符串PE绝对路径到 lpDaddr缓冲区





此段代码就是注册窗口类, 创建主窗口,与两个子窗口, 并且通过调用API设置创建风格, 其中【45F7D4】子窗口(edit)文本框只读
【45F7D8】子窗口(edit)文本框设置为密文文本,调用MoveWindws函数移动主窗口到指定位置, SetWindowsLongW为子窗口设置回调函数。并且调用setWindows函数设置窗口隐藏。


获取字符串大小(SizeLength), 并将前面开辟空间压栈(lpaddr+)
call004065A0 有一个参数edx = 【ecx+1C】,获取拷贝的目的地址lpDaddr
然后调用call 407B50此call相档于memset(lpaddr, lpDaddr, SizeLength);




打开病毒同目录下的sed文件, 通过调用GetFileSzie得到文件尺寸,eax = Filesize . 通过eax = eax-16得到文件偏移 ,通过调用
SetFilePointer函数设置文件指针,最后调用ReadFile函数读取sed文件中的arm字符串。




调用此call 隐藏主窗口


,,,,,,,,,继续跟跟,
走出call 4010C0 之后来到, ,,,,初始化Winsock库, 然后将从文件sed中读出的”amr“字符串压入
跟进403AB0


信息量太大了,,,粘出关键部分,    跟根根,,,,,来到这里   首先开辟一个空间,然后将amr 字符串拷贝到该空间中



之后创建定时器没100ms, 回调函数为系统默认的OnTimer, 当发送WM_TIMER时调用此函数, 调用ShowWindows使窗口隐藏, UndateWindows函数更新当前窗口


继续跟,下面是对设备上下文DC设定,窗口外观等的设置



接下来将进入消息循环:这里要注意要在前面的创建窗口时在窗口的回调函数下断点,这样dispatchMassage 函数才会找到窗口回调函数
通过创建窗口我们可以找到窗口回调函数FuncPro(HWND, MSG, PWARAM, LPARAM);地址401DD0,在此下断


进入401A30 call
乱序填充字符user.dll 与 GetForegroundWindow最后调用HWNA GetForegroundWindow()函数 返回用于当前工作窗口 得到前台窗口
就是通过这个函数当只有用户点击QQ进程时, 他才会弹出钓鱼框。
(GetForegroundWindow()   是整个Windows系统的当前激活的窗口 比如桌面。
   与之相对应的是 GetActiveWindow()   是你的程序的当前激活的窗口)





跟进401C10 call

同样的方法填入字符串user.dll与GetClassNameA 调用intGetClassName( GetForegroundWindow() ,buffer,intnMaxCount),返回buffer长度
因为当前工作窗口为olldbg, 所以得到窗口类名为OllyDbg

调用 GetClassName后 数据窗口信息
0012F9944F 6C 6C 79|44 62 67 00|00 00 00 00|00 00 00 00| OllyDbg. 79|44 6


接下来是

拼接QQ窗口类名 调用FindWindow 得到窗口句柄
调用GetWindowTextA 后得到QQ窗口类文本信息


后面是对得到字符串处理 得到qq号



hWnd = FindWindow(_T("ClassNameQQ"), NULL);
if (hWnd != NULL)
{
       GetWindowThreadProcessId(hWnd, &dwProcessId1);

      GetWindowThreadProcessId(HwndTXGuiFoundtion, &dwProcessId2)
      if(dwProcessID1 == dwProcessID2)

      {
            goto __FindSuccess;

      }

}




设置只读文本框为QQ号,密码文本框空,调用GetSystemMetrics函数得到以像素为单位的屏幕尺寸

之后钓鱼框弹出;

点击登录按钮后来到,,,,,这里是得到qq,密码文本,然后处理,将其填入a=x12x&b=_)&c=(*.)后面将作为发送数据发到目的地




使用套接字,将数据(a=qq号&b=密码&c=amr(验证信息))发送到指定目的地址,已达到盗号目的




以上就是整个盗号木马真个分析流程

总结与反思:为什么他能过360等杀毒软件喃?
这个qq钓鱼木马做的比较隐藏,伪装的比较好,当普通用户点击后,没有点击qq窗口他会一直常驻内存,当用户点击qq窗口,就会弹出自己伪造的框。该木马没有使用任何反跟踪技术和变形技术,也没有对注册表,服务等操作,对一些关键的函数,字符串也是做了处理 比如 GetForegroundWindow, TXGuiFoundtion(因为以前的盗号木马都包含这个字符信息),没有危险api的操作,所以一开始跟多杀毒软件无动于衷。
本次分析主要收获:
1,函数CreateMutes的使用 ,保证内存中只存在一个当前进程在运行.
       


2.函数GetForegroundWindow ,GetClassName,FindWindow,GetWindowsThreadProcessId,使用
当前台窗口与指定的TXGuiFoundtion窗口PID相等时,就弹出钓鱼窗口。



爱不灭 发表于 2014-6-30 23:07

楼主我要向你学习

bupt_360_wdb 发表于 2014-1-27 14:03

厉害 学习了 什么时候能像LZ一样分析木马样本啊

pjl872320153 发表于 2014-1-20 10:41

   好流弊的样子

阿顺 发表于 2013-12-13 12:31

{:301_1008:}虽然看不懂,但是感觉很牛逼,支持下LZ

arno 发表于 2014-12-30 10:16

写的很精彩

8585859 发表于 2014-12-24 21:46

这还得了啊 。赶快更新杀入吧

暴怒小白兔 发表于 2014-11-17 20:58

收藏慢慢学习,谢谢分享!!

JK52PJ 发表于 2014-11-15 21:53

很厉害,学习学习。

wangaben 发表于 2014-2-28 09:55


这盗号的流逼了

探索1979 发表于 2013-12-3 13:35

不知道是不是源码吗

〇〇木一 发表于 2013-7-8 23:56

好 支持支持thanks!{:301_991:} 学习

1354669803 发表于 2013-7-8 23:57

这盗号的流逼了

小艾. 发表于 2013-7-8 23:57

{:17_1060:}学习下

52pojie恒大 发表于 2013-7-9 00:00

牛逼·········

彼萌 发表于 2013-7-9 00:01

看不懂 慢慢研究吧

混小子 发表于 2013-7-9 00:01

LZ运气真好,我找到的盗号木马都是加了SE的

crackx 发表于 2013-7-9 00:20

http://www.fichsoft.com
厉害啊,我什么时候才能达到这个境界

shenfei 发表于 2013-7-9 00:21

真牛逼                        

FishSauce 发表于 2013-7-9 00:42

混小子 发表于 2013-7-9 00:01 static/image/common/back.gif
LZ运气真好,我找到的盗号木马都是加了SE的

好经典的签名档,为什么感觉有点小
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 简单qq盗号木马分析