产品展示
  • 壹泽车载超薄有源低音炮重低音汽车改装音响专用座椅10寸蓝牙音箱
  • 适配江铃新顺达柴油滤芯 空气滤芯 机油滤芯 新顺达国四三滤 四滤
  • 适用铃木奥拓雨燕羚羊启悦天语汽车同轴喇叭音响6.5寸改装扬声器
  • 适配标致308 408世嘉16V 1.6标志307汽车发电机曲轴皮带轮 配件
  • 适配广汽传祺GS4GS5GS8S7GM6后备箱开关行李箱按键启动按钮尾门盖
联系方式

邮箱:admin@aa.com

电话:020-123456789

传真:020-123456789

新闻中心

这次有点sao了,破解安卓某 APP 低层加密

2024-05-08 19:03:30      点击:872

这次有点sao了,破解安卓某 APP 低层加密

今天给大家分享一下如何逆向分析 Native 层的点s低层加密 ,整个过程的破解思路值得借鉴  ,接下来由小帅b的安卓朋友 Houser 给大家进行演示 ,搞起:

所需设备和环境

设备 :

安卓手机(获取root权限)

抓包:

fiddler + xposed + JustTrustMe

反编译:

jadx-gui  ,加密ida

抓包

按照惯例 ,点s低层这里隐去 app 的破解名称 ,开启 fiddler 抓包后 app 提示连接不到网络 ,安卓判断是加密证书验证,开启 xposed 框架 ,点s低层再次请求 ,破解成功抓到包,安卓连续请求两次来对比参数变化:


可以看到 x-app-token 这个参数不一样,加密其他参数都是点s低层固定的,先简单看一下 x-app-token 的破解构成:

这样做了一下换行 ,有没有发现什么规律 ?

我一眼就看出来第二行是安卓手机的 deviceID ,因为爬虫写多了 ,这个字符串经常出现,第一行是 32 位,应该就是个 md5 , 第三行是个 16 进制数,知道了这些 ,接下来就来反编译,搜索这个关键字。

反编译

反编译之前先使用 ApkScan-PKID 查一下是否有壳,养成好习惯 ,这个 app 没有加壳 ,直接用 jadx 打开 ,全局搜索 “x-app-token” ,只有一处,应该就在这里了:


从框中代码发现 x-app-token 的值就是 as ,而 as 是函数 getAS 生成的 ,按住鼠标左键 ,点击 getAS 进去看看详情 :

它把函数过程写到 native 层中去了,那只好去分析这个名为native-lib 的 so 文件了 ,解压目标 apk 获取到了如下图这些文件  :

so文件就在这个lib文件夹里 :

ida中打开这个文件 ,切换到 Export 导出函数选项卡,先来直接搜索getAS  :

没有搜到getAS ,倒是搜到了 getAuthString  ,名字很像,打开看看吧 ,按 F5 可以把汇编代码转换为伪 c 代码 ,下拉分析一波 ,看到了 md5 关键字 :

代码有点难懂,连懵带猜 v61 应该是 MD5 加密后的结果 ,然后 append 似乎是在拼接字符串,看到了“0x” ,根据抓包的结果已经知道 x_app_token 的第三行是个 16 进制数 ,那应该是这里的v86了 ,向上看看它具体是什么 :

v86存的是 v40 的值,而 v40 就是当前的时间戳 ,那 x-app-token 第三行应该就是时间戳的 16 进制数 。接下来看看 md5 的入参为v58,v52,v53,重点来看v52,往上追朔看到其和 v51 是相等的 ,而 v51 是一个未知字符串经过 base64 编码得到的 ,先来hook这两个函数 ,写段脚本:

第1处和2处分别是目标函数的地址,鼠标点到目标函数处 ,ida左下角会显示 ,加1是为何  ,只记得大学时候学过汇编语言讲到段地址 ,偏移地址,物理地址这些,猜测和这些知识有关  ,还需研究,这里先这样用 ,第3处的写法是当这个参数为字符串时的写法 ,运行一波,看看打印输出:

同时也来抓包:

把v52的值放到在线MD5网站中加密看看 :

和抓包得到的结果是一样的,那就证明hook点找对了 ,那么v49就是base64编码之前的值,v49是什么呢 ,仔细一看 ,里面也有deviceID,再来分割一下:

第一行通过两次hook,发现他是固定不变的 ,第二行是改变的 ,32位 ,看起来又是个md5,第六行是包名,返回伪c代码,再来分析看看,在前面又看到了MD5加密的地方 :

那来hook这个函数,看看入参 :

打印的入参数据为:

S是一个时间戳 ,拿到MD5加密网站上验证一下,正好和v49中包含的字符串相同:

至此,逆向就完成了,来总结一下x-app-token的获取过程,先是带有把时间戳进行md5,按下图顺序拼接:

然后把拼好的字符串进行base64编码 ,最后把编码结果进行MD5 ,得到x-app-token的开头部分,组成如下 :

接下来写个脚本来请求数据

请求

代码如下:

运行 ,成功拿到数据:

总结

今天主要介绍了 native 层 hook 的方法,虽然 so 文件中的伪c代码要有一定的基础才能看懂,但是先不要怕,分析的过程中可以先大胆假设  ,有 frida 非常强大的 hook 功能,就能一步步验证之前的假设 。这两次都是静态分析方法 ,下次我们再来介绍一下动态调试的方法。

最后,以上内容仅供学习交流 ,希望对你有帮助,那么我们下回见 ,peace !

lol手游无限火力卢锡安出装攻略 lol端游卢锡安打法教学
魔兽世界怀旧服猎人箭袋在哪买