感谢作者 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()
{
protected
void
afterHookedMethod
(
MethodHookParam
param
)
{
//函数执行之后要做的操作
}
protected void beforeHookedMethod ( MethodHookParam param )
{
//函数执行之前要做的操作
}
});
c、我的例子中我在函数调用之前修改了函数的两个参数!
d、在调用之后,我将函数的两个参数显示出来,并修改函数的返回值!
5.3 效果
0×6
hook系统API
以Hook
getNetworkOperatorName为例:
调用代码:
hook部分代码:
我在模拟器中测试,getNetworkOperatorName本应该返回“Android”。
在被hook之后,返回了“hook getNetworkOperatorName by lyz!”。