菜鸟对一个QQ粘虫的简单分析
//Author: kangkai//Date: 2013年9月19日
//Email: jxpenghu@sohu.com
文件: C:\Users\penghu\Desktop\木马\集体相片.exe
大小: 274944 字节
文件版本: 5, 6, 8, 19
修改时间: 2013年8月31日, 22:36:12
MD5: F721C43468789C1777C2C9C616FD8B6E
SHA1: 5474123B264B0E7C15CC72A40F702BE98C100D0A
CRC32: 0CA3B0BB
壳信息:UPX
该QQ粘虫的功能和动作都非常少,主要是通过检测QQ窗口,如果QQ窗口置顶了,就调用函数展示伪造的QQ登陆窗口,通过网页的形式将QQ账号和密码发送出去。除此之外没有任何的操作信息。
UPX0:0046187B push ebx
UPX0:0046187C push esi
UPX0:0046187D push edi
UPX0:0046187E or ebx, 0FFFFFFFFh
UPX0:00461881 call ?AfxGetThread@@YGPAVCWinThread@@XZ ; AfxGetThread(void)
UPX0:00461886 mov esi, eax
UPX0:00461888 call ?AfxGetModuleState@@YGPAVAFX_MODULE_STATE@@XZ ; AfxGetModuleState(void)
UPX0:0046188D push
UPX0:00461891 mov edi,
UPX0:00461894 push
UPX0:00461898 push
UPX0:0046189C push
UPX0:004618A0 call sub_465BDF ; ?AfxWinInit@@YGHPAUHINSTANCE__@@0PAGH@Z
UPX0:004618A0 ; doubtful name
UPX0:004618A5 test eax, eax ; 获取当前线程,如果获取到则继续向下执行
UPX0:004618A7 jz short loc_461
UPX0:00460605 push esi
UPX0:00460606 call ?AfxGetThreadState@@YGPAV_AFX_THREAD_STATE@@XZ ; AfxGetThreadState(void)
UPX0:0046060B mov esi, eax
UPX0:0046060D call GetCurrentThreadId
UPX0:00460613 push eax ; dwThreadId
UPX0:00460614 push 0 ; hmod
UPX0:00460616 push offset ?_AfxMsgFilterHook@@YGJHIJ@Z ; lpfn
UPX0:0046061B push 0FFFFFFFFh ; idHook
UPX0:0046061D call SetWindowsHookExA ; 对获取到的ID安装消息钩子,进行监控
UPX0:00460623 push offset ?CreateObject@?$CProcessLocal@V_AFX_CTL3D_STATE@@@@SGPAVCNoTrackObject@@XZ ;
CProcessLocal<_AFX_CTL3D_STATE>::CreateObject(void)
UPX0:00460628 mov ecx, offset dword_49FB00
UPX0:0046062D mov , eax
UPX0:00460630 call sub_46540C
UPX0:00460635 mov esi, eax
UPX0:00460637 cmp dword ptr , 0
UPX0:0046063B jz short loc_460
UPX0:0040B4B2
UPX0:0040B4B2 loc_40B4B2: ; "*.*"
UPX0:0040B4B2 push offset a__0
UPX0:0040B4B7 lea ecx,
UPX0:0040B4BB call sub_45BC31
UPX0:0040B4C0 mov ecx,
UPX0:0040B4C4 lea eax,
UPX0:0040B4C8 push eax ; lpFindFileData
UPX0:0040B4C9 push ecx ; lpFileName
UPX0:0040B4CA call FindFirstFileA; 查找文件名,判断是否执行文件
UPX0:0040B4D0 cmp eax, 0FFFFFFFFh
UPX0:0040B4D3 mov , eax
UPX0:0040B4D7 jnz short loc_40B4
UPX0:0045DE36 push eax ; lpWndClass
UPX0:0045DE37 push dword ptr ; lpClassName
UPX0:0045DE3A push dword ptr ; hInstance
UPX0:0045DE3D call GetClassInfoA
UPX0:0045DE43 test eax, eax
UPX0:0045DE45 jnz short loc_45DE9A
UPX0:0045DE47 push esi ; lpWndClass
UPX0:0045DE48 call RegisterClassA; 注册窗口类,为后面的调用伪造的QQ窗口做准备
UPX0:0045DE4E test ax, ax
UPX0:0045DE51 jnz short loc_45DE57
UPX0:0045DE53 xor eax, eax
UPX0:0045DE55 jmp short loc_45DE9D
UPX0:0041C084
UPX0:0041C084 loc_41C084: ; bRepaint
UPX0:0041C084 push 1
UPX0:0041C086 push eax ; nHeight
UPX0:0041C087 push ebp ; nWidth
UPX0:0041C088 push 0 ; Y
UPX0:0041C08A push 0 ; X
UPX0:0041C08C mov ecx, esi
UPX0:0041C08E call ?MoveWindow@CWnd@@QAEXHHHHH@Z ; CWnd::MoveWindow(int,int,int,in;隐藏指定的窗口
UPX0:0041C093
UPX0:0041C093 loc_41C093: ; hWnd
UPX0:0041C093 push ebx
UPX0:0041C094 call IsWindow ; 确定指定的窗口句柄已存在的窗口
UPX0:0041C09A pop edi
UPX0:0041C09B pop ebp
UPX0:0041C09C test eax, eax
UPX0:0041C09E jz short loc_41C0A
D84C
UPX0:0045D84C loc_45D84C:
UPX0:0045D84C push edi
UPX0:0045D84D push esi
UPX0:0045D84E call ?AfxHookWindowCreate@@YGXPAVCWnd@@@Z ; AfxHookWindowCreate(CWnd *)
UPX0:0045D853 push ; lpParam
UPX0:0045D856 push ; hInstance
UPX0:0045D859 push ; hMenu
UPX0:0045D85C push ; hWndParent
UPX0:0045D85F push ; nHeight
UPX0:0045D862 push ; nWidth
UPX0:0045D865 push ; Y
UPX0:0045D868 push ; X
UPX0:0045D86B push ; dwStyle
UPX0:0045D86E push ; lpWindowName
UPX0:0045D871 push ; lpClassName
UPX0:0045D874 push ; dwExStyle
UPX0:0045D877 call CreateWindowExA ; 创建一个QQ登陆窗口
UPX0:0045D87D mov edi, eax
UPX0:0045D87F call ?AfxUnhookWindowCreate@@YGHXZ ; AfxUnhookWindowCreate(void)
UPX0:0045D884 test eax, eax
UPX0:0045D886 jnz short loc_45D
UPX0:0044D22E
UPX0:0044D22E loc_44D22E:
UPX0:0044D22E push esi
UPX0:0044D22F mov esi, offset Addend
UPX0:0044D234 push edi
UPX0:0044D235 push esi ; lpAddend
UPX0:0044D236 call InterlockedIncrement ; 保证当前只能运行钓鱼窗口QQ窗口无法运行
UPX0:0044D23C cmp ds:dword_4A0168, ebx
UPX0:0044D242 mov edi, InterlockedDecrement
UPX0:0044D248 jz short loc_44D2
UPX0:0044D24A push esi ; lpAddend
UPX0:0044D24B call edi ; InterlockedDecrement
UPX0:0044D24D push 13h
UPX0:0044D24F call __lock
UPX0:0044D254 pop ecx
UPX0:0044D255 push 1
UPX0:0045DC52 push dword ptr ; hWnd
UPX0:0045DC55 call GetWindowTextLengthA ; 返回QQ密码的长度,并且存放在缓冲区
UPX0:0045DC5B lea ecx,
UPX0:0045DC5E push ecx ; nMaxCount
UPX0:0045DC5F mov ecx,
UPX0:0045DC63 push eax
UPX0:0045DC64 call ?GetBufferSetLength@CString@@QAEPADH@Z ; CString::GetBufferSetLength(int)
UPX0:0045DC69 push eax ; lpString
UPX0:0045DC6A push dword ptr ; hWnd
UPX0:0045DC6D call GetWindowTextA; 获取QQ密码
UPX0:0045DC73 mov ecx,
UPX0:0045DC77 push 0FFFFFFFFh
UPX0:0045DC79 call ?ReleaseBuffer@CString@@QAEXH@Z ; CString::ReleaseBuffer(int)
UPX0:0045DC7E jmp short loc_45D
UPX0:0041C0A0 push 5 ; nCmdShow
UPX0:0041C0A2 push ebx ; hWnd
UPX0:0041C0A3 call ShowWindow ; 展示伪造的QQ登陆窗口
UPX0:0045D735 push dword ptr ; hhk
UPX0:0045D738 call UnhookWindowsHookEx ; 卸载消息钩子
UPX0:0045D73E and dword ptr [esi+2Ch
不错,分析的很好,支持下 感谢分享 学习了 节日快乐 {:301_1001:}中秋快乐! 下载看看,效果如何 分析得挺简单的。 JoyChou 发表于 2013-9-21 15:52 static/image/common/back.gif
分析得挺简单的。
向大牛学习 新帖啊。学习了 窗口伪造得很真实 又认识了一种盗号会出现的情况
页:
[1]