共计 1336 个字符,预计需要花费 4 分钟才能阅读完成。
指标 APP:某一短视频
之前发过一篇文章,app 降级算法之后还没来得及更新,文章就被举报 404 了,悲痛,明天更新写一下新版,这里就不贴源码了,文章最初放 github,须要自取,我看老六还怎么举报。
工具筹备
- HTTP Debugger Professional v9.11
- 雷电模拟器 9 绿色去广告版
- 算法助手(通用 hook 插件)
用到的工具 及配置好的雷电模拟器零碎备份 在 release 页面下载
PS. 间接应用备份的零碎,环境都配置好了,关上 frida 转发端口就能用。
自行配置步骤:模拟器设置 system 可写并开启 root,用 MagiskDelta 刷面具,删除自带的 su 文件,刷入 LSPosed,装置算法助手插件,用 FridaHooker 装置 Frida。算法助手中关上总开关和算法剖析的 3 个开关,开启 Frida,通过 adb 转发端口,关上 HTTP Debugger Pro 抓包(需装置证书到零碎分区)
剖析过程
工具都配置好后,关上指标 APP,直到胜利绑定邀请码。
(我测试过程中装完证书间接就能够失常抓包,说抓不到的能够试试在算法助手里关上 JustTrustMe)
返回算法助手查看,发现没有 aes 加密,居然和以前加密形式不同了
不过回算法助手能够看到 sign 还是有的,仍然是老办法,sha256+md5
apk 拖到 GDA 中,定位到算法助手中 sign 的调用堆栈地位,很容易发现加密点
按 x 查看穿插援用,最终定位到了 sojm.so
package com.qq.lib.EncryptUtil;
import java.lang.System;
import java.lang.String;
import java.lang.Object;
public class EncryptUtil // [email protected]
{
static {System.loadLibrary("sojm");
}
public void EncryptUtil(){super();
}
public static native String decrypt(String p0,String p1);
public static native String decryptHls(String p0,String p1);
public static native byte[] decryptImg(byte[] p0,int p1,String p2);
public static native byte[] decryptImg2(byte[] p0,int p1,String p2);
public static native String encrypt(String p0,String p1);
}
因为不会剖析 so,尝试一番后无果,且模拟器 frida 无奈 hook 到第三方 APP 的 so,手上又没有真机,遂放弃
改用 frida-rpc,供 python 程序间接调用加密办法,除了应用过程比拟麻烦,貌似也没什么大问题
学习了一番 frida,间接开始改代码,还是之前的源码,只是改一改加密解密办法
最终 hook 到 com.qq.lib.EncryptUtil 这里就行,不必到 so 外面,反正只是内部调用而已
Python 源码
https://github.com/erma0/test/blob/main/91/frida91.py