Skip to content
ttttupup edited this page May 20, 2023 · 5 revisions

Welcome to the wxhelper wiki!

找call方法

1.发送相关call

关键字 batchSendMsg
case 1 :发送文本
case 2 :发送图片
case 3 :发送文件

如何定位

可以通过CE搜索发送内容的相关引用 image

然后使用x64dbg或者od在地址处下断点
image 断点后一步步跟进即可。
熟练后,可以通过ida或者ghidra,直接通过关键字搜索即可。
定位到关键函数后
image 直接复制汇编,修改相应寄存器对应的值即可。
image 函数的相应参数可以通过动态调试观察,填写对应参数,注入后调用即可。
就这样一个关键call的调用就完成了。

在ghidra里的伪c代码里可以看到,case 1,2,3,4,5,6 就是对应的关键的发送相关的call。
Z%9$~~~SE TDQWRHK1CHULV

多练习实践就孰能生巧了。

sqlite3偏移定位

sqlite3的定位相当简单,一分钟搞定。 因为sqlite3为了保持兼容性,api是向下兼容的,在sqlite3.c文件里有个sqlite3_api_routines,把api固定了。
image
所以随便定位一个函数,根据他的引用就可以定位到sqlite3_api_routines,然后直接按偏移计算其他函数即可。
sqlite3_close函数特征最明显,直接搜索字符串 "unable to close due to unfinalized statements or unfinished backups"即可定位。
image
定位了该函数以后,其他函数根据sqlite3_api_routines的偏移也就全部定位到了。

微信里的引用如下:
image

和sqlite3.c里api保持一致。

微信使用的是SQLCipher加密sqlite3,推而广之也开源采用此方法定位key相关的函数。
再推而广之,开源项目的逆向基本上都可以采用这种套路。

数据库解密

经过简单分析可以确定微信是使用的SQLCipher进行加密。可以简单分析一下SQLCipher的加密过程如下:
image

然后看下crypto.h,解密就是反过程:
image

image
image
image

这些事当然要先看看官方的解密工具 https://github.com/sqlcipher/sqlcipher-tools , 简单测试了一下,只解密了第一页,应该是后面更新了版本的原因, 也编译了sqlcipher,不过也没解密成功,因为微信用的是3.40的sqlite,版本不一致。sqlcipher使用的版本是v2.0-statble版本,根据微信里的license,基本上就可以确定。这种体力活,肯定是先搜一搜有现成的工具没有,然后参考了一个博主的python脚本, 简单修改一下即可。 image

测试了一下效果还可以。 image

Clone this wiki locally