简单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相等时,就弹出钓鱼窗口。
楼主我要向你学习 厉害 学习了 什么时候能像LZ一样分析木马样本啊 好流弊的样子 {:301_1008:}虽然看不懂,但是感觉很牛逼,支持下LZ 写的很精彩 这还得了啊 。赶快更新杀入吧 收藏慢慢学习,谢谢分享!! 很厉害,学习学习。
这盗号的流逼了 不知道是不是源码吗 好 支持支持thanks!{:301_991:} 学习 这盗号的流逼了 {:17_1060:}学习下 牛逼········· 看不懂 慢慢研究吧 LZ运气真好,我找到的盗号木马都是加了SE的 http://www.fichsoft.com
厉害啊,我什么时候才能达到这个境界 真牛逼
混小子 发表于 2013-7-9 00:01 static/image/common/back.gif
LZ运气真好,我找到的盗号木马都是加了SE的
好经典的签名档,为什么感觉有点小