LuaXposed:使用Lua編寫Xposed模塊

Xposed倉庫地址

https://repo.xposed.info/module/com.sll.luahook

Github地址

https://github.com/ihbing/LuaXposed

原理

借用LuaJ引擎實現,主要對以下幾個Api進行了封裝

        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));

Hook Toast消息例子

簡單版

--入口函數
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

詳細版 


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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章