欢迎来到DIVCSS5查找CSS资料与学习DIV CSS布局技术!
  1.创建工程android4.0.3(api15,测试发现其他版本也可以),可以不用activity
 
  2.修改AndroidManifest.xml
 
  3.在工程目录下新建一个lib文件夹,将下载好的XposedBridgeApi-54.jar包放入其中.
 
  eclipse 在工程里 选中XposedBridgeApi-54.jar 右键–Build Path–Add to Build Path.
 
  IDEA 鼠标右键点击工程,选择,在弹出的窗口中打开Dependencies选项卡.把XposedBridgeApi这个jar包后面的Scope属性改成provided.
 
  4.模块实现接口
 
  5.入口assets/xposed_init配置,声明需要加载到 XposedInstaller 的入口类:
 
  6.定位要hook的api
 
  反编译目标程序,查看Smali代码直接在AOSP(android源码)中查看
 
  7.XposedBridge to hook it
 
  指定要 hook 的包名判断当前加载的包是否是指定的包指定要 hook 的方法名实现beforeHookedMethod方法和afterHookedMethod方法
 
  示例如下:
 
  重写XC_MethodHook的两个方法beforeHookedMethod和afterHookedMethod,这两个方法会在原始的方法的之前和之后执行.您可以使用beforeHookedMethod 方法来打印/篡改方法调用的参数(通过param.args) ,甚至阻止调用原来的方法(发送自己的结果).afterHookedMethod 方法可以用来做基于原始方法的结果的事情.您还可以用它来操纵结果 .当然,你可以添加自己的代码,它将会准确地在原始方法的前或后执行.
 
  IXposedHookLoadPackage
 
  handleLoadPackage : 这个方法用于在加载应用程序的包的时候执行用户的操作
 
  调用示例
 
  参数说明|final LoadPackageParam lpparam 这个参数包含了加载的应用程序的一些基本信息。
 
  XposedHelpers
 
  findAndHookMethod ;这是一个辅助方法,可以通过如下方式静态导入:
 
  使用示例
 
  参数说明
 
  该函数的最后一个参数集,包含了:
 
  (1)Hook 的目标方法的参数,譬如:
 
  是方法的参数的类。
 
  (2)回调方法:
 
  1.Dalvik 孵化器 Zygote (Android系统中,所有的应用程序进程以及系统服务进程SystemServer都是由Zygote进程孕育/fork出来的)进程对应的程序是/system/bin/app_process. Xposed 框架中真正起作用的是对方法的 hook。
 
  2.log 统一管理,tag 显示包名
 
  3.植入广播接收器,动态执行指令
 
  4.context 获取
 
  5.注入点选择 application oncreate 程序真正启动函数而是 MainActivity 的 onCreate (该类有可能被重写,所以通过反射得到 oncreate 方法)
 
  6.排除系统 app,排除自身,确定主线程
 
  7.hook method
 
  8.参数中有 自定义类
 
  9.注入后反射自定义类
 
  10.hook 一个类的方法,该类是子类并且没有重写父类的方法,此时应该 hook 父类还是子类.(hook 父类方法后,子类若没重写,一样生效.子类重写方法需要另外 hook) (如果子类重写父类方法时候加上 spuer ,hook 父类依旧有效)
 
  方法在父类
 
  方法在父类(注意,android的继承的 AbstractHttpClient implements org.apache.http.client.HttpClient)
 
  11.hook 构造方法
 
  12.承接4,application 的onCreate 方法被重写,例如阿里的壳,重写为原生 native 方法.
 
  解1:通过反射到 application 类重写后的 onCreate 方法再对该方法进行hook
 
  解2:hook 构造方法(构造方法被重写,继续解1)
 
  13.native 方法可以 hook,不过是在 java 层调用时hook而不是 hook 动态链接库.
 
  首先确定http 请求的 api,大致分为:
 
  apache 提供的 HttpClient
 
  1) 创建 HttpClient 以及 GetMethod / PostMethod, HttpRequest等对象;2) 设置连接参数; 3) 执行 HTTP 操作; 4) 处理服务器返回结果.java 提供的 HttpURLConnection
 
  1) 创建 URL 以及 URLConnection / HttpURLConnection 对象 2) 设置连接参数3) 连接到服务器4) 向服务器写数据5) 从服务器读取数据android 提供的 webview 第三方库:volley/android-async-http/xutils (本质是对前两种的方式的延伸,方法的重写可能对接下来的 hook 产生影响)
 
  不太了解 java 的 hook 前可以先看下基础的代码HttpClient以及HttpURLConnection的基本使用
 
  对 HttpClient的 hook 可以参考 贾志军大牛的Zjdroid
 
  对 HttpURLConnection 的 hook Zjdroid 未能提供完美的解决方案,想要取得除了 URL 之外的 data 字段必须对I/O流操作.

如需转载,请注明文章出处和来源网址:http://www.divcss5.com/html/h62326.shtml