一、前言

许久没更新了,也不知道在座的小可爱是否还在等待我!(emm,别说出内心的实话)今天我发的是一篇关于QRSpeed机器人词库的另类解密教程。什么叫另类解密呢?就是不按照原来的套路解密。打个比方,一个文本经过aes加密,常规的方法是通过aes密钥啊再次进行解密。今天我就针对这个QRSpeed来个更暴力的解密方式。

二、寻找突破点

我们先观望下这个加密的词库是啥样子的。
1.png

我们发现这个词库的每一个命令的开头是=加密=,这就是一大突破口。看到这里我们找到了词库的突破口,那对应APK呢?是QRSpeed主程序?还是QRSpeed词库插件?玩过的应该知道答案是第二个(我没玩过多久勿喷)。接下来就是拆包看看了!
2.png

这里我采用的是win端的AndroidKiller,实际上任何能反编译的工具都可以(比如手机端的MT管理器,APKTOOL等等都可以)把APK拖进去开始反编译。一看就知道主要的代码混淆了,没什么结果。只能相关修改下来方便阅读。我这里就已经搞好了,大家自行寻找资料整理。我这里直接进行搜索=加密=,但是我是Androidkiller所以得转成Unicode进行搜索。
3.png

这里发现两处地方,我们一一展开查看。
4.png

这里发现一个是com.QR.HunXi.af.java,另一个是com.QR.HunXi.aJ.java。我们先进去af.java看看
5.png

emm够明确了吧,实际上对算法有点研究的从这里就能写出加密词库了,我这里就不说明了有兴趣自己研究,接下来看另一个吧。
6.png

不出意外这里就是解密的相关函数了,不确定的再分析分析,怎么分析呢?就找插件接收信息的地方看看是不是调用了这个方法。
7.png

到这里应该就算突破口寻找完毕。

三、详细分析

我们再次打开这个aJ.java,来仔细分析分析。
8.png

我们可以发现最主要的代码还是在于这个public String[] d(BufferedReader paramBufferedReader, boolean paramBoolean)。先说说这个方法吧,名字为d,参数有两个,一个是BufferedReader,一个是boolean。返回值是一个String数组。通过前面分析我们得知在接收信息的时候用到过,此时我猜测这个函数就是接收命令然后将对应词库解密再返回回去的。(后面证实猜测一致)。那现在就开始测试一下吧。
所需环境:

  1. 一台配置了XP环境的手机
  2. AndroidStudio
  3. QRSpeed主程序和词库程序
  4. 一个加密词库

XP插件开发的基础操作我这里就不搞了,直接撸主要代码吧。
9.png

然后打包安装 Xposed勾选重启手机
打开机器人 导入词库
10.png

11.png

12.png

13.png

群里面发送指令,最后Xposed看日志,结果显然是成功的(我这里的XP是自己后面改了点东西,反正结果是可以的,这里放一张用解密器解密的)。
14.jpg

四、总结

这种方法虽然不需要花费大量时间去研究加密解密,但就是一次性只能针对的一条条解密。当然了我本人属于那种喜欢研究的,最后我还是去研究了解密原理。大家有兴趣的可以看aJ的return那行。再说一遍请用技术学习的态度去阅读本文,不要有任何不正规想法,一切后果自负,本文就是为了介绍一些思路和原理。程序员永远要坚守自己的道德底线和法律红线,老老实实的学习写代码。

严重声明:本文的目的只有一个,利用样本案例分析讲解更多的逆向技术和知识,如果有人以非法目的利用本文技术谋取利益,带来一切法律责任都将由操作者承担,与本文作者无关。


哼哼,看了我这个这么赞的教程是不是要转发一下啊!

官方交流群:963859174
官方交流群:963859174
官方交流群:963859174


版权声明
本文是Mobai原创文章,转载请附上原文出处链接和本声明。
本文链接:http://boke.whitemo.xyz/index.php/archives/13/