Dalvik 孵化器 Zygote (Android系统中,所有的应用程序进程以及系统服务进程SystemServer都是由Zygote进程孕育/fork出来的)进程对应的程序是/system/bin/app_process. Xposed 框架中真正起作用的是对方法的 hook。

因为 Xposed 工作原理是在/system/bin 目录下替换文件,在 install 的时候需要 root 权限,但是运行时不需要 root 权限。

log 统一管理,tag 显示包名

Log.d(MYTAG+lpparam.packageName, "hello" + lpparam.packageName);

植入广播接收器,动态执行指令

findAndHookMethod("android.app.Application", lpparam.classLoader, "onCreate", new XC_MethodHook() {

@Override

protected void beforeHookedMethod(MethodHookParam param) throws Throwable {

Context context = (Context) param.thisObject;

IntentFilter filter = new IntentFilter(myCast.myAction);

filter.addAction(myCast.myCmd);

context.registerReceiver(new myCast(), filter);

}

@Override

protected void afterHookedMethod(MethodHookParam param) throws Throwable {

super.afterHookedMethod(param);

}

});

fristApplication = (Application) param.thisObject;

注入点选择 application oncreate 程序真正启动函数 (该类有可能被重写,所以通过反射得到 oncreate 方法)

String appClassName = this.getAppInfo().className;

if (appClassName == null) {

Method hookOncreateMethod = null;

try {

hookOncreateMethod = Application.class.getDeclaredMethod("onCreate", new Class[] {});

} catch (NoSuchMethodException e) {

e.printStackTrace();

}

hookhelper.hookMethod(hookOncreateMethod, new ApplicationOnCreateHook());

排除系统 app,排除自身,确定主线程

if(lpparam.appInfo == null ||

(lpparam.appInfo.flags & (ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_UPDATED_SYSTEM_APP)) !=0){

return;

}else if(lpparam.isFirstApplication && !ZJDROID_PACKAGENAME.equals(lpparam.packageName)){

hook method

Only methods and constructors can be hooked,Cannot hook interfaces,Cannot hook abstract methods

只能 hook 方法和构造方法,不能 hook 接口和抽象方法

参数中有 自定义类

public void myMethod (String a, MyClass b)

通过反射得到自定义类...

注入后反射自定义类

Class> hookMessageListenerClass = null;

hookMessageListenerClass = lpparam.classLoader.loadClass("org.jivesoftware.smack.MessageListener");

findAndHookMethod("org.jivesoftware.smack.ChatManager", lpparam.classLoader, "createChat", String.class , hookMessageListenerClass ,new XC_MethodHook() {

@Override

protected void beforeHookedMethod(MethodHookParam param) throws Throwable {

String sendTo = (String) param.args[0];

Log.i(tag , "sendTo : + " + sendTo );

}

@Override

protected void afterHookedMethod(MethodHookParam param) throws Throwable {

super.afterHookedMethod(param);

}

});

hook 一个类的方法,该类是子类并且没有重写父类的方法,此时应该 hook 父类还是子类.(hook 父类方法后,子类若没重写,一样生效.子类重写方法需要另外 hook)

例如

java.net.HttpURLConnection extends URLConnection ,

方法在父类

javapublic OutputStream getOutputStream() throws IOException {

throw new UnknownServiceException("protocol doesn't support output");

}

org.apache.http.impl.client.AbstractHttpClient extends CloseableHttpClient ,方法在父类(注意,android的继承的 AbstractHttpClient implements org.apache.http.client.HttpClient)

javapublic CloseableHttpResponse execute(

final HttpHost target,

final HttpRequest request,

final HttpContext context) throws IOException, ClientProtocolException {

return doExecute(target, request, context);

}

android.async.http复写HttpGet导致zjdroid hook org.apache.http.impl.client.AbstractHttpClient execute 无法获取到请求 url和method

hook 构造方法

javapublic static XC_MethodHook.Unhook findAndHookConstructor(String className, ClassLoader classLoader, Object... parameterTypesAndCallback) {

return findAndHookConstructor(findClass(className, classLoader), parameterTypesAndCallback);

}

python xposed_Xposed插件开发进阶篇相关推荐

  1. python 面向对象(进阶篇)

    上一篇<Python 面向对象(初级篇)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个" ...

  2. 【Python第六篇】Python面向对象(进阶篇)及相关(异常处理、反射)

    本节内容: 类的成员 字段 方法(静态方法.类方法.普通方法) 属性 类成员的修饰符(私有成员.公有成员) 类的特殊成员 异常处理 反射 类的成员 类的成员可以分为三大类:字段.方法和属性 注:所有成 ...

  3. 【Python】【进阶篇】十二、Python爬虫的Xpath简明教程(十分钟入门)

    目录 十二.Python爬虫的Xpath简明教程(十分钟入门) 12.1 Xpath表达式 12.2 Xpath节点 12.3 节点关系 12.4 Xpath基本语法 12.4.1 基本语法使用 12 ...

  4. 三、python基础语法进阶篇(黑马程序猿-python学习记录)

    黑马程序猿的python学习视频:https://www.bilibili.com/video/BV1qW4y1a7fU/ ====================================== ...

  5. 笨办法学python3进阶篇下载_笨办法学Python 3:进阶篇

    第 一部分 准备知识 1 如果不喜欢作者的个人流程怎么办 2 如果发现自己太糟糕怎么办 2 习题0 准备工作 3 程序员用的编辑器 3 Python 3.6 3 工作终端 4 pip和virtuale ...

  6. 【Python】【进阶篇】十六、Python爬虫的浏览器实现抓包

    目录 十六.Python爬虫的浏览器实现抓包 16.1 控制台界面 16.1.1 NetWork 16.1.2 Sources 16.1.3 Console 16.1.4 Application 16 ...

  7. 【Python教程】进阶篇

    目录 2.1函数 2.1.1函数基础 2.1.1.1函数的定义和调用 2.1.1.2函数的作用 2.1.1.3函数的参数 2.1.1.4函数的返回值 2.1.1.5函数的作用域-LEGB 2.1.2闭 ...

  8. Python循环之进阶篇

    上一期我们简单介绍了for-in.while循环,本期我们就来继续深入学习循环结构的内容. 首先,我们先来了解一下单分支结构,我们用一个案例来形象了解一下吧! 单分支结构只有是和否两种情况 语法: i ...

  9. Python import 功能(进阶篇)

    本来以为已经理解了import功能,没想到实际应用了还有这么多门道 比如,不通过模块名字,直接引入模块内的类 我们创建一个包叫ccc,然后下面的__init__里面什么也没写,都是空的 然后bbb.b ...

最新文章

  1. 太强了!我怀疑这是京东V1版源码....
  2. linux设备和驱动加载的先后顺序
  3. sql join教程
  4. 电脑模拟器哪个好_《英雄聯盟:激鬥峽谷》电脑版哪个安卓模拟器好用?《英雄聯盟:激鬥峽谷》手游电脑版怎么玩...
  5. 架构之美第二章-美丽架构的含义
  6. hadoop设置用户权限_No.9 MySQL之用户管理与权限设置
  7. volatile和原子操作
  8. 【039】读典籍-在线阅读典籍并对应翻译
  9. 生存分析-Cox回归模型
  10. 辽宁师范大学计算机科学与技术在哪个校区,2021年辽宁师范大学有几个校区,大一新生在哪个校区...
  11. 疯狂java笔记(七) - Java集合之Map
  12. python 计算物理_计算物理期末报告
  13. 如何在页面直接打开微信公众号
  14. 转贴不说话:陕西芹菜价格创新低 农民开拖拉机自毁芹菜
  15. 补丁31305087
  16. 有奖互动 | 秋天的第一行代码
  17. 安卓设备逐步升级Android 9,游戏产品该如何做适配?
  18. 【毕业设计】4-基于单片机的锅炉控制系统的研究与设计(原理图+源代码+仿真工程+答辩论文+答辩PPT)
  19. win10系统下vs2015编写的C++程序在XP系统里运行
  20. 留下来慢慢感悟(关于session和cookie)

热门文章

  1. 背景建模方法论文总结
  2. Android中点击链接调起App
  3. 传奇服务器怎么设置状态是开区还是合区,传奇私服开区合区教程全解
  4. 请善待,那些舍得借钱给你们的人!
  5. 电路实验——实验二 基尔霍夫定律的验证
  6. 如何用gitbook写书
  7. 中职网络安全—隐藏信息探索
  8. 射频工程师应该具备的知识技术体系和心态
  9. ai电话机器人销售过程自动化功能,黑斑马电话机器人系统
  10. 【CO2二氧化碳传感器】senseair S8 LP