使用Xposed框架HOOK任意函数及API

来源:互联网 发布:nginx lua set header 编辑:程序博客网 时间:2024/04/29 18:18


感谢作者 http://0nly3nd.sinaapp.com/?p=613 

0×1

建立一个空的工程

0×2

AndroidManifest.xml
        2.1 修改包名
                     
             
                修改为:package=”com.test.xposedmodel
        2.2  添加标识
                
                第二个是载入model之后显示的信息
                第三个是规定jar包的版本信息

0×3

XposedBridgeApi.jar
        在工程目录下新建一个lib文件夹。将下载好的XposedBridgeApi-54.jar包放入其中。
        在工程里 右键–Build Path–Add to Build Path。

0×4

assets/xposed_init
        在assets目录下新建一个xposed_init文件。
        内容为:包名+类名,如:com.test.xposedtestmodel.Main

0×5

hook函数的编写(自定义函数)
        5.1
            目标apk,我自己写了一个用来测试的apk。
            包名为:com.example.forhook
            类名:MainActivity
            里面有一个函数:sayhello
            原型为:
            用了三个按钮分别进入三个分支
            
      
        5.2 hook函数的编写
                注:a、首先判断包名
                       b、调用findAndHookMethod(“包名+类名”, lpparam.classLoader, “要hook的函数名称”, 第一个参数类型, 第二个参数类型….. , new XC_MethodHook()
                            {
                                        protectedvoid afterHookedMethod(MethodHookParam param) 
                        {
                            //函数执行之后要做的操作
                        }
    
                    protectedvoid beforeHookedMethod(MethodHookParam param) 
                        {
                            //函数执行之前要做的操作
                        }
                            });
                        c、我的例子中我在函数调用之前修改了函数的两个参数!
                        d、在调用之后,我将函数的两个参数显示出来,并修改函数的返回值!
        5.3 效果
                        
                
                

0×6

hook系统API
        以Hook getNetworkOperatorName为例:
        
        调用代码:           
        hook部分代码:

 

我在模拟器中测试,getNetworkOperatorName本应该返回“Android”。
在被hook之后,返回了“hook getNetworkOperatorName by lyz!”。

0 1