微信聊天备份加密原理:
从14年某月起,电脑管家提供了微信聊天记录备份的功能,这为我们研究微信聊天记录及微信的加密算法提供了一个研究方向。
本文的主要目的
1.和大家分享
2.感谢版主把我转成正式会员
准备工具:
idaq pro(静态编译工具)
ultraedit(十六进制编辑器)
filemoniter(文件操作监控工具)
regmonitor(注册表操作监控工具)
相关算法
RC4,CRC32
分析及定位过程(为小白提供解决问题的思路):
1.功能由哪个模块提供
首先我们得知道微信聊天记录是腾讯电脑管家的哪个模块提供服务的。这样我们就能够对证下药,减少分析环节的弯路。
大公司的产品都基本模块化,像腾讯电脑管家这种需要不断增加功能的软件,基本为一个大排档,提供入口而已。
而功能是由不同的plugin来提供(也就是说是由一些小EXE或DLL来提供服务)。
通过使用该软件,查找关健字backup,我们发现是 plugins\WechatBackup\WechatBackup.exe提供了服务。
2.软件运行时有哪些输入和输出,调用了哪些库,记录了哪些文件,有哪些东西可供我们快速分析算法和加密原理的,
在我们静态分析代码前提前做这些工作,就相当于外围扫描,精确定位了。
这一步是关键,是高手和小白的主要区别,学习下可以减少小白的摸索过程。
1.我们的主要工具是idaq,ultraedit,filemoniter,regmonitor,vc的depends
通过filemoniter,我们发现 wechatBackup.exe,在运行过程中创建了WechatBackup.log文件,然后又删除了。这里面一定有我们想要的东东。
在 C:\Documents and Settings\All Users\Application Data\Tencent\WechatBackup\Data\wxid_XXXXX\2015年04月26日16点58分49秒下有三个怪文件。
这里面可能存在有我们的备份的聊天记录内容。 有些文件的长度不为8的整数而且是奇数。(在我们的知识结构里,比较可能是采用RC4加密算法)
通过regmonitor,我们发现 wechatBackup.exe, 打开了 [HKEY_LOCAL_MACHINE\SOFTWARE\Tencent\WechatBackup]的"EnableLog"键
字段,通过注册表我们发现,该键值不存在,那我们直接创建了该健值,并置为1.
通过idaq的import视图 我们发现,WechatBackup.exe没有静态引用 什么库的Decrypt,encrypt,md5,RC4,AES,DES之类的函数,但引用了KERNEL.DLL 的LoadLibraryW。
那可能是通过动态加载动态库,LoadLibrary。我们通过查找关健字 LoadLibrary可以发现 使用了 QMCommon.dll动态库了RC4和CRC32函数。
直接用idaq在相关函数上下断点即可了。
3.软件可能的保护措施
做为腾讯电脑管家,本身提供了杀毒和安全保护功能。为此一定为本身的程序提供了保护措施。
一般的保护措施是
1.加壳加密.
我们通过ULTRAEDIT查看WechatBackup.exe,没有发现UPX之类的关健字,相关的资源情况正常,没有加密。
如果大公司用这种方式,则有可能会被一些杀毒软件认为是病毒,则会出现误报。
2.将进程提到较高权限或到其他内核空间,反编译及调试工具导致无法attach到进程,这种方法比较适合腾讯电脑管家这种软件适用。
在实际调试中,我发现腾讯电脑管家采用了这种方式,阻止了idaq进行动态分析.
我们有个小办法绕开它。就是把WechatBackup目录单独挎贝到硬盘的其他目录,在新目录下运行WechatBackup.exe,
然后用idaq attach到该进程,顺利解决。
3.软件加签名,防止被病毒感染。
算法分析:
1. 备份在电脑中的加密文件有 WeChatMagicCode文件(聊天记录索引),data(聊天记录内容)文件,WechatGenInfoCode(记录用户的ID手机类型等信息)文件。
这些保存在文件 C:\Documents and Settings\All Users\Application Data\Tencent\WechatBackup\Data\wxid_XXXXX\XX年XX月XX日XX分XX秒下.
2. 我们感兴趣的是data文件文件,该文件采用块加密方式。结构是长度XX+CRC32(四字节)+聊天记录内容。
3. 加密密钥是0123456789abcdef
(重大安全缺陷喔).
总结:
1. 反编译分析是比较苦B的工作,而通过一些外围的分析,可以帮助我们快速地定位到我们感兴趣的模块。
2. 程序的模块化及完善的日志记录,在正式分析程序前,将这些开关打开,可以为我们分析代码提供许多便利的通道。
3. 直接打开程序的HEX,可以了解程序的信息。
4. RC4是一种快速的加密算法,特点是,加密速度快,字节不需要整8补位,减少冗余,这一点可以做为我们区别AES/DES/RSA算法的一个突破点。
[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。