跳转至

平头哥框架使用方法

1. 前提准备

本文章是对平头哥框架的简单总结,可快速搭建和了解平头哥 hook api 的使用方法

这里提供下参考文档及其注意事项

2. 平头哥使用示例

2.1. 编译 Ratel Manager

首先得编译一个 Ratel Manager 出来,用于对目标 app 进行二次打包和插件管理等功能。

虽说得自己编译,但渣总已经放出成品了。直接使用现成的 RatelManager_2.0-SNAPSHOT-release 直接安装即可。当然自己编译也可,请参考本文中所给参考文章。

image-20220506221728835

注意事项,若出现可感染或已感染的 app 不显示,请点击框架主页的绿色界面即可重载。

2.2. 感染目标应用

使用 ratel 感染目标应用,并卸载重新安装感染后的 app 即可。

ratel 中的可感染板块中找到目标应用:

image-20220506222118288

卸载并重新安装目标应用即可:

image-20220506222152945

2.3. 编写 ratel 插件

2.3.1. 生成 ratel 插件项目z

使用平头哥插件开发模板 ratel-module-template,可快速生成一个插件。

1
2
3
4
5
6
7
8
# 有两种方式来生成模板
./template.sh -a ~/Downloads/wechat.apk.apk -m crack-wechat
./template.sh -p com.tencent.mm -m crack-wechat

其中参数介绍如下:
-a: 指向目标 apk(会自动识别其包名)
-p: 包名
-m: ratel 插件名称

生成后在 android studioproject 目录中显示,但如果未识别为 android 项目时,需要:

点击一个类似大象的按钮再次同步即可。就可以在项目中切换到当前生成的项目。

image-20220506223034233

2.3.2. hook 目标 app

编写 hook app 的具体某个方法,这里以 test_rpc_all app 为例,就 hook 其中一个简单的 aes 加密方法。

image-20220506224758593

jadx 中的反编译内容如下,只要 hook Test_Enc_Dec 的静态类方法 aes_enc,然后再调用静态方法 bytesToHexString 即可得到答案:

image-20220506224616496

这里不介绍如何根据平头哥 api 编写 hook 脚本的方法(平头哥插件很好编写的),后面会添加其文章。

然后在插件模板中添加具体 hook 脚本即可。

public class HookEntry implements IRposedHookLoadPackage {
    private static final String tag = "DEMO_HOOK";

    @Override
    public void handleLoadPackage(final RC_LoadPackage.LoadPackageParam lpparam) throws Throwable {

        if (lpparam.packageName.equals("com.wangtietou.test_rpc_all")) {
            Log.d(tag, "当前 hook 的 app 为: test_rpc_all");
        }

        // hook 目标类的静态方法
        RposedHelpers.findAndHookMethod("com.wangtietou.test_rpc_all.Test_Enc_Dec", lpparam.classLoader, "aes_enc", String.class, new RC_MethodHook() {
            @Override
            protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                super.beforeHookedMethod(param);
                // 打印目前方法的参数值
                Log.d(tag, "beforeHookedMethod: " + param.args[0]);
            }

            @Override
            protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                super.afterHookedMethod(param);
                Log.d(tag, "afterHookedMethod result:" + param.args[0]);

                // 获取函数的调用结果
                Object result = param.getResult();
                // 调用静态方法 bytesToHexString 来获取最终显示至 app 界面的值
                Log.d(tag, "最终结果为: " + bytesToHexString((byte[]) result));
            }
        });
    }

    public static String bytesToHexString(byte[] src) {
        StringBuilder stringBuilder = new StringBuilder();
        if (src == null || src.length <= 0) {
            return null;
        }
        for (byte b : src) {
            int v = b & 255;
            String hv = Integer.toHexString(v);
            if (hv.length() < 2) {
                stringBuilder.append(0);
            }
            stringBuilder.append(hv);
        }
        return stringBuilder.toString();
    }

}

2.3.3. 安装和激活 ratel 插件

android studio 中运行此插件,即会在 app 中安装上对应的插件模块。我们需要激活此模块。

image-20220506225826652

2.3.4. 运行目标 app

在手机上正常运行目标 app,输入参数生成 aes 结果。然后 android studio 中即会输入对应的 hook 内容。

image-20220506230342553

可看出,此结果与 2.3.2. hook 目标 app 中结果一致。

3.总结及注意事项

目前 ratel 平头哥已完全开源,但网上其参考文档还是很少,若在感染 app 时或其它使用场景有问题时,请在其 githubratel 问题中心 上提交相应文件。

注意事项:
  1. 在修改插件重安装时,最好点击 ratel manager 主页中的绿色框框刷新重载
  2. 其实只要跑通插件模板中的 demoapp 和对应的 crack-demoapp 插件即可
  3. 插件模板 gradle.properties 中最好添加 android.injected.testOnly=false 来接触安装限制

评论

回到页面顶部