欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

基于Xposed的hook实战

程序员文章站 2022-05-12 14:01:53
...

一、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实战
基于Xposed的hook实战

基于Xposed的hook实战

三、编写hook代码

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

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.mi.crackmehook">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <!--hook配置:start-->
        <!--是否是xposed模块-->
        <meta-data
            android:name="xposedmodule"
            android:value="true" />
        <!--描述,hookDemo,随便写-->
        <meta-data
            android:name="xposeddescription"
            android:value="hookDemo" />
        <!--最低的api版本支持-->
        <meta-data
            android:name="xposedminversion"
            android:value="54" />
        <!--hook配置:end-->
    </application>

</manifest>

(2)配置依赖
基于Xposed的hook实战
(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)对项目签名打包(为了兼容性,V1,V2都勾上)
基于Xposed的hook实战

四、安装测试

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

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

相关标签: 游戏安全