无名商城论坛

搜索
查看: 317|回复: 0

[技术教程] 【无邪考核】QQ音乐加密缓存文件解密算法分析

[复制链接]

1万

主题

1万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
32464
发表于 2022-5-8 13:58:45 | 显示全部楼层 |阅读模式
工具:IDA Pro
材料:QQ音乐最新版本安装包apk文件

本教程仅供研究学习,禁止用于非法用途. 如有侵权请通知作者.[呵呵]

写教程不易,转载注明出处...[汗]

首先,我们把QQ音乐安装包解压,然后把里面/lib/armeabi/libpay_encrypt.so拖到IDA Pro加载一下,一路下一步(确认),然后等待加载成功.

加载成功后,你会看到图1所显示的界面。然后,如图操作选择Exports,找到我们要分析的函数(为啥是这个?我分析好的,如果有想了解一下的同学请查看dex的VIPDownloadHelper类.这里不做介绍)

找到我们想要的方法后,双击进入,你会看到如图2的界面,这个是不是看着头皮发麻的感觉?(由于ARM指令集太麻烦,而且QQ音乐的so出来的伪代码还算完整,我们看伪代码)

按下F5,你在代码框框里会看到图3所示代码...观察后这里并没有解密操作,真正执行解密操作的是我用红圈圈起来的那个方法。

一路追下去,直到你看到图4所示代码。这里就是解密了(估计英语好的同学已经拔刀了,这个函数不是加密吗?咋成解密了?逗我?[怒]是是是,你说是加密没错[鄙视],可我说是解密也完全没毛病.是不是这样呢?看代码分析就知道了)
代码分析:
     如果 偏移量(也就是第一个参数)=0 就遍历第二个参数(待解密的文件内容的byte[]数组),并进行与mapL方法,传入 i(byte中的数据下标)+第三个参数(也就是待解密数据byte数组的长度) 得到的返回值 进行异或运算(这也就是我说解密=加密的原因了[吐舌])把值在赋值到byte数组中的对应位置

现在我们唯一的问题就是mapL方法做了什么?废话不多说追下去就知道了!一路追下去,你会看到图5所示代码
代码分析:
        如果 传入的参数0x8000(注意16进制) 直接调用sub_8b5c方法传入  iL(本方法的参数)%0x7fff  得到返回值,然后返回
        否则  直接调用sub_8b5c方法传入iL 得到返回值,然后返回

紧接着我们,跳到sub_8b5c方法看看他做了什么?(如图5)我们看到这里只有一个获取数组的第   (参数*参数+80923)%256  个数据  返回

那么问题又来了,数组的内容呢?咋没有?莫非是null?当然不是,会崩溃的!双击 数组名称  你可以看到图6所示代码,把每一行的DBC 后面的东西全都复制下来(共256个)就是数组的内容了

分析结束...[呼~]

本文写的仓促,如果有不严谨的地方或者错误欢迎各位大佬指正.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表