[原创]一个视频APP的破解,从逆向看代码安全
发现一个视频APP,觉得片源不错,想下载下来看看,首先想到的就是用flidder或者anyproxy
这里使用anyproxy,因为可以二次开发。
但是抓取完后,发现数据全是加密的

既然加密,那就没办法,必须去反编译,看看怎么加密
解压APK后,发现居然是360加壳的。先脱壳
网上很多脱壳方法,exposed+fdex2是不错的。解压出来是:

虽然dex都dump出来了,但发现有一个dex没法打开。用010修改一下文件头就可以用了。
使用jd-gui开始分析。接口加密,当然就很容易找到request相关的类



从以上代码发现:
APP随机生成一个aesKey,然后再用RAS加密一次得到key,用aesKey进行AES/CBC/PKCS7Padding加密得到body。
虽然在接口里,能看到加密后的key,但是因为RSA是不对称加密,本地也没有存储私钥,因此本地也就无法解密,无法查看到原始加密字符串是什么。
那就只能通过exposed hook来查看原始内容是什么了。
既然找到了加密方法是cryptoAESKey,cryptoBody。那么可以写方法如下:
XposedHelpers.findAndHookMethod("com.stub.StubApp", classLoader, "?ˋ",Context.class, new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
super.afterHookedMethod(param);
//获取到360的Context对象,通过这个对象来获取classloader
Context context = (Context) param.args[0];
//获取360的classloader,之后hook加固后的代码就使用这个classloader
ClassLoader classLoader360 = context.getClassLoader();
//替换classloader,hook加固后的真正代码
XposedHelpers.findAndHookMethod(fPackageName, classLoader360, fMethodName, String.class, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
XposedBridge.log(" cryptoAESKey before str:" + param.args[0]);
}
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
XposedBridge.log("cryptoAESKey after str:" + param.getResult());
}
});
});
//cryptoBody
XposedHelpers.findAndHookMethod(fPackageName, classLoader360, "cryptoBody", String.class,String.class, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
XposedBridge.log("cryptoBody before str1:" + param.args[0]+",str2:"+param.args[1]);
}
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
XposedBridge.log(" cryptoBody after str:" + param.getResult());
}
});
})
注意:上传附件及图片大小不得大于30M。
⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。
复制成功
