快速上手
小于 1 分钟
快速上手
最小项目
init.js
module.exports = {
name: "DemoProject",
description: "First JSXHook project",
author: "you",
icon: "rocket",
launcher: "main.js",
scope: ["com.example.target"]
};
main.js
//@process=main
hook({
class: "android.app.Activity",
classloader: lpparam.classLoader,
method: "onCreate",
params: ["android.os.Bundle"],
after(it) {
log(`package=${lpparam.packageName}`);
log(`process=${lpparam.processName}`);
log(`activity=${it.thisObject}`);
}
});
按模块拆脚本
main.js
const hookLogin = require("./hooks/login");
const hookProfile = require("./hooks/profile");
hookLogin();
hookProfile();
hooks/login.js
module.exports = function hookLogin() {
hook({
class: "com.example.target.LoginManager",
classloader: lpparam.classLoader,
method: "login",
params: ["java.lang.String", "java.lang.String"],
before(it) {
log(`login args=${JSON.stringify(it.args)}`);
}
});
};
直接读字段
hook({
class: "com.example.target.ProfileManager",
classloader: lpparam.classLoader,
method: "getProfile",
params: [],
after(it) {
const profile = it.result;
log(`name=${getField(profile, "name")}`);
log(`vip=${getField(profile, "vip")}`);
}
});
Shell 与日志
log(shell("id"));
toastLog("demo ready");
排错顺序
如果脚本没有生效,建议按下面顺序查:
scope是否包含目标包名。//@process=是否写错。- 类名、方法名、参数签名是否匹配。
classloader是否用的是lpparam.classLoader。- 日志页里是否有运行时异常。
