Adresse de l'entrepôt Xposed
https://repo.xposed.info/module/com.sll.luahook
Adresse Github
https://github.com/ihbing/LuaXposed
principe
Emprunter le moteur LuaJ pour réaliser, encapsuler principalement l'API suivante
globals.set("Log", CoerceJavaToLua.coerce(Log.class));
globals.set("LocalLog", CoerceJavaToLua.coerce(LocalLog.class));
globals.set("NewXCMethodHook", new NewXCMethodHook());
globals.set("NewXCMethodReplacement",new NewXCMethodReplacement());
globals.set("ParametersBuilder", CoerceJavaToLua.coerce(ParametersBuilder.class));
globals.set("XposedHelper", CoerceJavaToLua.coerce(XposedHelpers.class));
globals.set("XposedBridge", CoerceJavaToLua.coerce(XposedBridge.class));
Exemple de message Hook Toast
Version simple
--入口函数
function handleLoadPackage(lpparam)
XposedBridge:hookAllMethods(XposedHelper:findClass("android.widget.Toast",nil),'makeText',NewXCMethodHook(function(param)
--替换吐司内容为Hello,World!
param.args[2]='Hello,World!'
end,function(param) end))
end
Version détaillée
glpparam=nil
--入口函数,与原生Xposed入口函数一致
function handleLoadPackage(lpparam)
glpparam=lpparam
start()
end
function start()
--打印日志
XposedBridge:log('start ::')
--将日志输出到文件,文件目录为/sdcard/luaxposed/+包名+/线程名.txt
LocalLog:logString(glpparam.packageName,"start","::")
--构建Hook参数
local paramsBuilder=ParametersBuilder.new()
--吐司实现函数参数结构:Toast.makeText(android.content.Context,java.lang.CharSequence,int)
paramsBuilder:addParameterType('android.content.Context')
paramsBuilder:addParameterType('java.lang.CharSequence')
paramsBuilder:addParameterType('int')
--设置函数拦截回调
paramsBuilder:setCallback(NewXCMethodHook(function(param)
--函数执行之前,param为被Hook函数参数详情
local arg0 = param.args[2]
LocalLog:logString(glpparam.packageName,"before",arg0)
param.args[2]=param.args[2]..',,,,test3'
end,function(param)
--函数执行之后
local result = param:getResult()
LocalLog:logString(glpparam.packageName,"after","result:"..tostring(result))
end))
--执行注入代码,跟原生Xposed一样调用方式
XposedHelper:findAndHookMethod(XposedHelper:findClass("android.widget.Toast",nil),"makeText",paramsBuilder:toParams())
XposedBridge:log('end ::')
LocalLog:logString(glpparam.packageName,"end","::")
end