- Xposed的原理
Android基于Linux,第一个启动的进程自然是init进程,该进程会 启动所有Android进程的父进程——Zygote(孵化)进程,该进程的启动配置在 /init.rc脚本中,而Zygote进程对应的执行文件是/system/bin/app_process, 该文件完成类库的加载以及一些函数的调用工作。在Zygote进程创建后, 再fork出SystemServer进程和其他进程。而XposedFramework呢,就是用自己实现的app_process替换掉了系统原本 提供的app_process,加载一个额外的jar包,然后入口从原来的: com.android.internal.osZygoteInit.main()被替换成了: de.robv.android.xposed.XposedBridge.main(), 然后创建的Zygote进程就变成Hook的Zygote进程了,而后面Fork出来的进程 也是被Hook过的。这个Jar包在:/data/data/de.rbov.android.xposed.installer/bin/XposedBridge.jar
另外使用Xposed模块是需要Root权限的 !!
这篇文章没有讲在真机上如何root,而是在夜神模拟器上操作
夜神模拟上安装xposed.installer.apk
目标工程App类 cybertech.cn.com.myapplicationhack.MainActivity
接下来编下xposed模块工程
step1:
<applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme" ><meta-dataandroid:name="xposedmodule"android:value="true" /><meta-dataandroid:name="xposeddescription"android:value="TestModule" /><meta-dataandroid:name="xposedminversion"android:value="53" /></application>
step 2:
build.gradle中添加
provided 'de.robv.android.xposed:api:82'provided 'de.robv.android.xposed:api:82:sources'
step3:
package cybertech.cn.com.xposertest;import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.callbacks.XC_LoadPackage;
import static de.robv.android.xposed.XposedHelpers.findAndHookMethod;
public class MainHook implements IXposedHookLoadPackage {@Overridepublic void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {if(loadPackageParam.packageName.equals("cybertech.cn.com.myapplicationhack")){findAndHookMethod("cybertech.cn.com.myapplicationhack.MainActivity", loadPackageParam.classLoader, "getInfoMsg",new XC_MethodHook() {@Overrideprotected void afterHookedMethod(MethodHookParam param) throws Throwable {param.setResult("your App is hacked!");}});}}
}
step4
res/asserts文件夹创建一个xposed_init文件(没有后缀!) 填写hook类 :cybertech.cn.com.xposertest.MainHook
编译打包 在模拟上运行!
需要打钩 然后重启!
原先
hook 之后
大功告成!
ps 如果没有效果 看下xpose中日志