zixing131 / me.jsonet.jshook

用js写hook / JsHook

Home Page:https://github.com/Xposed-Modules-Repo/me.jsonet.jshook

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

JsHook

Xposed GitHub release Telegram Telegram LSPosed Downloads

android中hook神器 支持java层和native层

README of English

关于模块

Xposed是一个模块框架,可以在不接触任何APK的情况下更改系统和应用程序的行为。这意味着模块可以在不同版本甚至ROM上工作而无需任何更改。

JsHook是使用Xposed框架对任意app的初始化进行注入Rhino/Frida,Xposed模块开发需要一定的Java语法基础,技术门槛高,而JsHook注入的Rhino/Frida很棒,只需要会简短的Js语法基础,即可用手机快速制作属于自己的hook插件,并且hook支持java层和native层。

模块兼容

  1. Xposed api 82
  2. Android 7 - 12

如何使用该模块

如何启用脚本

启用脚本前请确认选择的应用已开启hook服务选项,如果是LSPosed非全局作用域在激活模块时除了勾选系统还需勾选对应脚本生效的应用,每次更改脚本内容都需要重启一下被hook的app。

如何选择注入框架

如果你对Xposed的hook方法比较熟,推荐Rhino,使用js调用Xposed框架的方法,且兼容性高;而Frida属于另一个hook框架,需要对Frida有一定的了解,上手较难,且不支持部分机型和app。

注意事项

版本1.0.2之前默认是frida注入,所以之前使用frida的需要在框架管理中将全局默认设置为frida,导入框架目前只支持frida-gadget。

版本1.0.5之前的rhino脚本如果有调用到context,需要在新版中加入以下代码进行兼容。

common.hookAllMethods('android.app.Application', 'onCreate', function (param) {
    //你的脚本代码
});

脚本说明

通用

日志打印:

common.log('...');

消息提示:

common.toast('...');

获取Context:

common.getcontext();

rhino

获取类实例

findClass
参数 参数类型 参数说明 是否必填
className String 类名 Y
classLoader ClassLoader 类加载器 Y

示例:

common.findClass('com.test.test',classLoader);

hook构造函数

hookAllConstructors
参数 参数类型 参数说明 是否必填
className Object 类实例或类名 Y
beforeHookedMethod Function 构造函数执行前 N
afterHookedMethod Function 构造函数执行后 N
replaceHookedMethod Function 替换构造函数执行过程 N

示例:

common.hookAllConstructors('com.test.test', function (param) {
    //构造函数执行前
    //打印构造函数接收到的第一个参数
    common.log(param.args[0]);
    //修改这个参数的值
    param.args[0] = 'fuck';
}, function (param) {
    //构造函数执行后
    //...
});

hook指定参数的构造函数

hookConstructor
参数 参数类型 参数说明 是否必填
className Object 类实例或类名 Y
paramTypes Object[] 参数类型 Y
beforeHookedMethod Function 构造函数执行前 N
afterHookedMethod Function 构造函数执行后 N
replaceHookedMethod Function 替换构造函数执行过程 N

示例:

common.hookConstructor('com.test.test', ['java.lang.String', 'int'], function (param) {
    //...
}, function (param) {
    //...
});

hook类方法

hookAllMethods
参数 参数类型 参数说明 是否必填
className Object 类实例或类名 Y
beforeHookedMethod Function 函数执行前 N
afterHookedMethod Function 函数执行后 N
replaceHookedMethod Function 替换函数执行过程 N

示例:

common.hookAllMethods('com.test.test', 'methodname', function (param) {
    //...
}, function (param) {
    //...
}, function (param) {
    //调用原方法返回
    return common.thisMethod(param);
});

hook指定的类方法

hookByMethod
参数 参数类型 参数说明 是否必填
method Method 方法对象 Y
beforeHookedMethod Function 函数执行前 N
afterHookedMethod Function 函数执行后 N
replaceHookedMethod Function 替换函数执行过程 N

示例:

common.hookByMethod(method, function (param) {
    //...
    //修改返回值
    param.setResult('fuck');
}, function (param) {
    //...
    //获取类方法的返回值并打印
    common.log(param.getResult());
});

hook指定参数的类方法

hookMethod
参数 参数类型 参数说明 是否必填
className String 类名 Y
paramTypes Object[] 参数类型 Y
beforeHookedMethod Function 函数执行前 N
afterHookedMethod Function 函数执行后 N
replaceHookedMethod Function 替换函数执行过程 N

示例:

common.hookMethod('com.test.test', 'methodname', ['java.lang.String', 'int'], function (param) {
    //...
    //修改返回值
    param.setResult('fuck');
}, function (param) {
    //...
    //获取类方法的返回值并打印
    common.log(param.getResult());
});

修改静态变量值

setStaticObjectField
参数 参数类型 参数说明 是否必填
className String 类名 Y
fieldName String 变量名 Y
fieldValue Object 变量值 Y

示例:

common.setStaticObjectField('com.test.test', '变量名', '变量值');

修改动态变量值

setObjectField
参数 参数类型 参数说明 是否必填
className Object 类名或者当前实例 Y
fieldName String 变量名 Y
fieldValue Object 变量值 Y

示例:

common.setObjectField('com.test.test', '变量名', '变量值');
//或者
//param.thisObject 在hook回调方法中获取
common.setObjectField(param.thisObject, '变量名', '变量值');

获取静态变量值

getStaticObjectField
参数 参数类型 参数说明 是否必填
className Object 类实例或类名 Y
fieldName String 变量名 Y

示例:

common.getStaticObjectField('com.test.test', '变量名');

获取动态变量值

getObjectField
参数 参数类型 参数说明 是否必填
className Object 类名或者当前实例 Y
fieldName String 变量名 Y

示例:

common.getObjectField('com.test.test', '变量名');

主动调用动态方法

callMethod
参数 参数类型 参数说明 是否必填
className Object 类名或者当前实例 Y
methodMame String 方法名 Y
paramTypes Object[] 参数值 N

示例:

common.callMethod('com.test.test', 'methodname', ['a', 1]);

主动调用静态方法

callStaticMethod
参数 参数类型 参数说明 是否必填
className Object 类实例或类名 Y
methodMame String 方法名 Y
paramTypes Object[] 参数值 N

示例:

common.callStaticMethod('com.test.test', 'methodname', ['a', 1]);

replaceHookedMethod中调用原方法

thisMethod
参数 参数类型 参数说明 是否必填
param Object 参数 Y

示例:

//param在replaceHookedMethod中获取
common.thisMethod(param);

查看更多

frida

查看更多