Android逆向之Xposed不重启手机替换hook代码(并不是简单替换字符串)
来源:互联网 发布:linux停机命令 编辑:程序博客网 时间:2024/06/02 05:31
转载时请注明转载自:http://blog.csdn.net/qq_26914291/article/details/78445151
1.核心代码:
public void hook(final LoadPackageParam lpparam){ final ClassLoader mXposedClassLoader=this.getClass().getClassLoader();//重要,获取当前类的classloader,通过lpparam.classLoader获取的不行! XposedHelpers.findAndHookMethod(Application.class,"onCreate",new XC_MethodHook(){//hook当前应用的入口类application的onCreate方法以获取当前应用的Context. public void beforeHookedMethod(XC_MethodHook.MethodHookParam param){ Context app=(Context)param.thisObject; DexClassLoader loader=new DexClassLoader("/data/local/tmp/Main.dex",app.getDir("odex",Context.MODE_PRIVATE).getPath(),null,mXposedClassLoader);//动态加载目录下/data/local/tmp/Main.dex文件到mXposedClassLoader类加载器中,这样的话,我们就可以动态替换Main.dex达到动态更新hook代码的目的! try { Class Main=Class.forName("larson.mhook.Main", false, loader); Method main=Main.getDeclaredMethod("main",LoadPackageParam.class); main.invoke(null,lpparam);//然后调用这个dex的入口函数,并传入lpparam参数 } catch (Exception e) { Log.d(TAG,"error:"+e.toString()); } } }); }
2.main.dex代码:
package larson.mhook;import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;import de.robv.android.xposed.IXposedHookLoadPackage;import android.util.*;public class Main{ public static final String TAG="XposedDex"; public static void main(LoadPackageParam lpparam){//入口函数 Log.d(TAG,"hook start!"); //我们自己实现的hook代码 }}
3.调用
public void handleLoadPackage(LoadPackageParam lpparam) throws Throwable { hook(lpparam); }
4.总结
1.知道了原来lpparam.classLoader与在hook代码中直接获取的classLoader不是同一个类加载器。
2.odex优化目录必须得是应用私有目录。
3.终于不用再每天重启几十次手机了。
阅读全文
0 0
- Android逆向之Xposed不重启手机替换hook代码(并不是简单替换字符串)
- Android逆向分析之Xposed的hook技术
- Android逆向分析之Xposed的hook技术
- 字符串替换之正则替换
- Java逆向之利用lua动态替换java中的代码
- Android逆向之利用lua动态替换java中方法
- 字符串替换 简单题
- 简单字符串替换
- 字符串之替换空格
- Xposed Android Java Hook
- (译)Xposed-替换资源
- 替换Android手机开机动画
- Android 手机替换系统应用
- linux vi 字符串简单替换
- 字符串简单截取、替换操作
- 简单的几行小代码,实现Android程序布局替换。
- Android逆向之利用Xposed为应用增加权限
- Android逆向之利用Xposed绕过悬浮窗权限
- okhttp通过拦截器输出html源码内容
- Handler源码分析
- JAVA第5次作业(2)
- 【实战】(一)android模拟qq登录(get和post方法)
- 队列的概念和实现
- Android逆向之Xposed不重启手机替换hook代码(并不是简单替换字符串)
- 解析XML格式的指定数据
- 201604-1 折点计数 ccf
- 疯狂Spring Cloud连载(17)Hystrix属性配置与回退
- mysql文档
- 判断打开网页的终端是什么设备(PC、手机等)
- string中c_str()、data()、copy(p,n)函数的用法
- 基于Lucene引擎的搜索应用程序的实现
- Vue (一)组件定义