QQtea加密函数寻找思路
前言
在入门逆向这个行业之前,曾经以最低效的方法研究了QQ协议。在研究QQ协议的人们都知道有一个加密的函数,阻挡了抓包分析的道路。因为这个加密函数致使我们必须hook才能解开封包。而那个时候的我只能祈祷大佬们给我用用他们的工具。而通过深入学习逆向后,决定对这个函数正式开刀。
视频教程
第一步:思考如何使用加密解密函数
首先我们需要站在开发的角度去思考,如果是我,我会如何使用加密/解密函数对数据包进行处理呢。那么我大概归为以下几个步骤。
加密
- 获取数据
- 组装明文数据
- 调用加密call进行数据加密
- 调用send/sendto发送密文封包
解密
- 调用recv/recvfrom函数接收封包
- 调用解密call对密文解密
- 处理解密后数据
第二步:分析思路
分析方法很简单且普通,就是一个方法。利用栈回溯即可。一步一步分析他是从哪个函数得到了密文/明文。
这里我更推荐从解密call寻找,通过前辈们的经验告诉我们加密call和解密call是相邻的两个函数,那么我们找到其中一个另一个自然就能得到。
这里笔者建议从解密call入手比较方便,因为通过抓包器或者recv/recvfrom函数我们已经知道密文是什么了,只需要看到哪里对这个密文进行了操作即可。
大致过程如下:
- 断下recv/recvfrom函数
- 通过栈回溯让代码继续执行下去,查看什么地方对密文进行了传参操作
- 找到传参位置,查看参数的结构。因为解密密文一定需要key,密文包体等内容。这些是必不可缺的一部分。
- 找到符合要求的函数单步步过让他执行完,看寄存器和栈结构。查看有没有明文数据出现,如果有则代表找到解密函数附近了。
- 通过上述方法一步步筛查到解密函数的最终位置即可。
写在最后
本文只着重于对逆向QQ加密解密函数的思路分析,如果有所疑惑可以留言我会进行答复~。下图贴一张加密函数的样子方便你们确定是否真的找到了。
注:切勿用于非法用途!
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 凌鸽技术博客!
评论