[Android 逆向]Xposed 破解 切水果大战原版.apk

android,逆向,xposed,破解,水果,大战,原版,apk · 浏览次数 : 22

小编点评

**代码摘要:** 代码实现了一个 IXposedHookLoadPackage 接口的实现类,并根据进程名称获取相应的类名称,然后通过反射机制动态加载和注入该类。 **代码结构:** ```java public class Main implements IXposedHookLoadPackage { private boolean flag = false; @Override public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { String t_packageName = lpparam.packageName; if ("com.mf.xxyzgame.wpp.game.hlqsgdzz.huawei".equals(t_packageName)) { // 注册类加载器 XposedBridge.log("hook!!! in in !! : " + t_packageName); // 获取类加载器 Class<?> aClass = lpparam.classLoader.loadClass("com.mydefinemmpay.tool.MessageUtil"); // 注册构造函数 hook XposedHelpers.findAndHookConstructor(aClass, new XC_MethodHook() { @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { // 设置成员变量 XposedBridge.log("hook!!! beforeHookedMethod t_free: " + (String)XposedHelpers.getObjectField(param.thisObject, "free")); XposedHelpers.setObjectField(param.thisObject, "free", "1"); XposedBridge.log("hook!!! afterHookedMethod t_free: " + (String)XposedHelpers.getObjectField(param.thisObject, "free")); } }); // 注册初始化方法 hook XposedHelpers.findAndHookMethod(aClass, "init", Context.class, new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { // 设置成员变量 String t_free = (String)XposedHelpers.getObjectField(param.thisObject, "free"); XposedBridge.log("hook!!! beforeHookedMethod t_free: " + t_free); XposedHelpers.setObjectField(param.thisObject, "free", "1"); XposedBridge.log("hook!!! afterHookedMethod ta_free: " + ta_free); } }); } } } ``` **主要功能:** 1. 获取进程名称 `t_packageName`。 2. 根据进程名称查找相应的类名称。 3. 动态加载和注入该类。 4. 注册构造函数和初始化方法 hook,并在方法执行之前和之后设置成员变量的值。

正文

代码


public class Main implements IXposedHookLoadPackage {

    boolean flag = false;
    @Override
    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
        String t_packageName = lpparam.packageName;

        if ("com.mf.xxyzgame.wpp.game.hlqsgdzz.huawei".equals(t_packageName)) {
            XposedBridge.log("hook!!! in in !! : " + t_packageName);

            Class<?> aClass = lpparam.classLoader.loadClass("com.mydefinemmpay.tool.MessageUtil");
            // hook gouzao fangfa  wuxiao
//            XposedHelpers.findAndHookConstructor(aClass, new XC_MethodHook() {
//                @Override
//                protected void afterHookedMethod(MethodHookParam param) throws Throwable {
//                    super.afterHookedMethod(param);
//                    XposedBridge.log("hook!!! before");
//                    XposedHelpers.setObjectField(param.thisObject, "free", "1");
//                    XposedBridge.log("hook!!! after");
//                }
//            });

            XposedHelpers.findAndHookMethod(aClass, "init", Context.class, new XC_MethodHook() {
                @Override
                protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                    super.beforeHookedMethod(param);
                    String t_free = (String)XposedHelpers.getObjectField(param.thisObject, "free");
                    XposedBridge.log("hook!!! beforeHookedMethod t_free: " + t_free);
                }

                @Override
                protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                    super.afterHookedMethod(param);
                    XposedBridge.log("hook!!! before");
                    XposedHelpers.setObjectField(param.thisObject, "free", "1");
                    XposedBridge.log("hook!!! after");
                    String ta_free = (String)XposedHelpers.getObjectField(param.thisObject, "free");
                    XposedBridge.log("hook!!! afterHookedMethod ta_free: " + ta_free);
                }
            });
        }
    }
}

这里记录一下

  1. t_packageName 其实是对应的是进程名称,而非类所在的包下的名称
  2. hook 构造函数,即使在after方法内也是不生效的
  3. 可以在hook 普通函数中执行XposedHelpers.setObjectField方法来修改实例的成员变量的值

与[Android 逆向]Xposed 破解 切水果大战原版.apk相似的内容:

[Android 逆向]Xposed 破解 切水果大战原版.apk

代码 public class Main implements IXposedHookLoadPackage { boolean flag = false; @Override public void handleLoadPackage(XC_LoadPackage.LoadPackageParam

[Android逆向]Exposed 破解 jwxdxnx02.apk

使用exposed 遇到了一些坑,这里记录一下 源码: package com.example.exposedlesson01; import de.robv.android.xposed.IXposedHookLoadPackage; import de.robv.android.xposed.X

【Android逆向】frida 破解 jwxdxnx02.apk

apk 路径: https://pan.baidu.com/s/1cUInoi 密码:07p9 这题比较简单,主要是用于练习frida 1. 安装apk到手机 需要输入账号密码 2. 使用jdax 查看apk package hfdcxy.com.myapplication; import andr

[Android 逆向]frida 破解 切水果大战原版.apk

1. 手机安装该apk,运行,点击右上角礼物 提示 支付失败,请稍后重试 2. apk拖入到jadx中,待加载完毕后,搜素失败,找到疑似目标类MymmPay的关键方法payResultFalse 4. adb logcat 或者androidstudio 查看该进程的日志,发现以下日志 com.mf

【Android逆向】frida 破解 滚动的天空

1. apk 安装到手机中 2. 玩十次之后,会提示 充值 3. adb shell dumpsys window | grep mCurrentFocus 查看一些当前activity是哪一个 是 AppActivity 4. 阅读代码,感觉是unity3d做的游戏 5. apk拖入到jadx中,

【Android逆向】滚动的天空中插入smali日志

1. 编写一个MyLog.java 放到一个android工程下,编译打包,然后反编译拿到MyLog的smali代码 package com.example.logapplication; import android.util.Log; public class MyLog { public st

【Android逆向】frida hook so 函数

1. apk来自52pojie 链接:https://pan.baidu.com/s/1vKC1SevvHfeI7f0d2c6IqQ 密码:u1an 2.apktool反编译apk,拿到so文件 java -jar ../apktool_2.2.4.jar d app-debug.apk 3. 用j

【Android逆向】修改so文件方式修改程序行为

1. 还是之前的那个apk 链接:https://pan.baidu.com/s/1vKC1SevvHfeI7f0d2c6IqQ 密码:u1an 尝试使用 010Editor来修改so文件 2. 使用ida打开so文件,双击 hello 52pojie!,会跳转到该字符串的偏移地址,ida显示是00

【Android逆向】破解黑宝宝apk,绕过签名校验

这是52pojie的一道题,实现输入任何密码都可以登录成功 他知道你最近在学习Android逆向 他想在游戏上线前让你测试一下他新加的签名验证是否能防住别人的破解。 下面是李华编写的黑宝宝apk 链接:https://pan.baidu.com/s/1h6pX2ARE3qtiKiYbcnJ-3g 密

[Android 逆向]绕过小米需插卡安装apk限制

1. 确保自己手机是root的了 2. 给手机安装busybox,使可以用vi编辑文件 安装方法: 0. adb shell getprop ro.product.cpu.abi 获得 cpu架构信息 arm64-v8a 1. 下载 https://busybox.net/downloads/bin