欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创]一个视频APP的破解,从逆向看代码安全

[原创]一个视频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。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功