发现一个视频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()); } }); })
然后就可以看到原始值是什么了:
{
"currentPage": 1,
"pageSize": 5,
"data": 1
}
后面,就可以自己构造数据,进行提交获取数据啦。
小结:
从逆向看代码安全
1. APK本身要混淆加壳
2. 接口安全:Rsa+aes,aes的key通过rsa加密传输,只有客户端本身(客户端本身没法解,但知道rsa加密前的值)和服务端可以解出来。
3. 关键加密代码放在so库里。一些关键的库,可以做签名检验。
[进行中] 看雪20周年庆典12月28日上海举办,LV四级(中级)以上会员免费参与!,同时在校学生免费参加:学生报名链接!