基于Xposed的hook实战

一、Hook原理

将需要修改的函数“钩住”,然后使用自定义的函数替换原来的函数,让程序执行自定义的函数,达到修改的目的。

二、环境搭建

经过root的模拟器:
(1)在https://www.yeshen.com/ 中下载夜神模拟器(该模拟器在系统设置中默认开启root)
(2)启动夜神模拟器,在终端执行adb connect 127.0.0.1:62001,将模拟器与AS关联,其中,62001是夜神模拟器的端口号

Xposed框架的搭建:
(1)在https://forum.xda-developers.com/showthread.php?t=3034811 中下载Xposed的apk并且安装到root的模拟器(可以选择更新,该apk用于管理所有基于Xposed开发的hook模块)
基于Xposed的hook实战_第1张图片
基于Xposed的hook实战_第2张图片

基于Xposed的hook实战_第3张图片

三、编写hook代码

这里是基于带签名的demo 的hook实战
(1)新建as工程项目,配置AndroidManifest.xml




    
        
            
                

                
            
        
        
        
        
        
        
        
        
        
    


(2)配置依赖
基于Xposed的hook实战_第4张图片
(3)hook相关代码(钩住"com.example.mi.crackme"APP中的checkSN函数,无论用户名和注册码怎样,都返回true)

//HookTest .java

package com.example.mi.crackmehook;

import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.callbacks.XC_LoadPackage;

public class HookTest implements IXposedHookLoadPackage {
    final String packgeName = "com.example.mi.crackme";
    @Override
    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
        if(!lpparam.packageName.equals(packgeName)) {
            return;
        }
        new CheckSNHook(lpparam.classLoader);
    }
}

//CheckSNHook.java

package com.example.mi.crackmehook;

import android.util.Log;

import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.XposedHelpers;

public class CheckSNHook {
    static final String TAG = "crackmehook";

    public CheckSNHook(ClassLoader cl) {
        super();
        XposedBridge.log("hooking checkSN.");
        try {
            Class clz = XposedHelpers.findClass("com.example.mi.crackme.MainActivity",cl);
            XposedHelpers.findAndHookMethod(clz, "checkSN", String.class, String.class,
                    new XC_MethodHook() {
                        @Override
                        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                            XposedBridge.log("CheckSN afterHookedMethod call.");
                            String s1 = (String)param.args[0];
                            String s2 = (String)param.args[1];

                            Log.d(TAG,"s1:"+s1);
                            Log.d(TAG,"s2:"+s2);
                            // 无论用户名和注册码怎样,都返回true
                            param.setResult(true);

                            super.afterHookedMethod(param);
                        }
                    });
        }catch (Exception e) {
            e.printStackTrace();
        }
        XposedBridge.log("hook checkSN done.");
    }
}

(4)配置资源文件xposed_init
基于Xposed的hook实战_第5张图片
(5)对项目签名打包(为了兼容性,V1,V2都勾上)
基于Xposed的hook实战_第6张图片

四、安装测试

(1)安装
安装命令:adb install xxx.apk
卸载命令:adn uninstall xxx.xxx.xxx.xxx // 使用完整包名
重启虚拟机命令:adb reboot

基于Xposed的hook实战_第7张图片
安装好hook模块(CrackMeHook)后,需要在hook管理apk(Xposed Installer)中勾上对应模块,然后重启虚拟机
基于Xposed的hook实战_第8张图片
(2)测试(无论输入什么,都提示注册成功,代表hook成功。)
基于Xposed的hook实战_第9张图片
代码下载

你可能感兴趣的:(游戏安全)