吾爱破解 - LCG - LSG |安卓破解|病毒分析|破解软件|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 8997|回复: 27

[Android 原创] 从零开始Android逆向教程(二)——什么是Xposed

  [复制链接]
HiBlues 发表于 2018-12-29 10:08
本帖最后由 HiBlues 于 2018-12-29 14:52 编辑

前言
在阅读本文之前,假设你的手机已经root,并且已经成功安装好了 XposedInstaller。   

Xposed是什么?       
Xposed 是一个 Android 平台上的动态劫持框架,通过替换手机上的孵化器 zygote 进程为 Xposed 自带的 zygote,使其在启动过程中加载 XposedBridge.jar,模块开发者可以通过 jar 提供的 API 来实现对所有的 Function(这里可以理解为方法) 的劫持,在原 Function 执行的前后加上自定义代码。 xposed1.png
Xposed框架是一款可以在不修改APK的情况下影响程序运行(修改系统)的框架服务,基于它可以制作出许多功能强大的模块,且在功能不冲突的情况下同时运作。Xposed理论上能够hook到系统任意一个Java进程,由于是从底层hook,所以需要root权限,并且每次更新都要重新启动,否则不生效 。

Xposed 和 Cydia Substrate   
这两个框架都是app注入的利器,只是相对来说有各自特点罢了。Cydia Substrate是一个代码修改平台。它可以修改任何主进程的代码,不管是用Java还是C/C++(native代码)编写的。而Xposed只支持 hook system/bin/app_process中的Java函数。其实Cydia Substrate 与xposed 的hook原理是一样的,二者都可以作为Java Hook的框架,看使用习惯了(iOS的越狱用到的便是Cydia Substrate)。笔者最近研究主要以Xposed为主,暂不对Cydia Substrate进行详细的说明,后续有研究会继续以文字形式记录吧。   

利用Xposed执行最简单的篡改操作
Xposed的运用太过广泛,作为这个系列的第一篇笔记,这里也介绍一种Xposed最简单的应用场景。   
a. 随意在Android Studio里创建一个项目,在这里我的包名是:com.blues.cracktest 里面没有任何后续添加的代码,编译之后只有屏幕中间最经典的“Hello World!”;   
b. 我们需要做的就是通过Xposed去修改这个“Hello World”,让它替换成任何我们想要它显示成为的东西,比如我期望是“Hello Xposed! ”        

1. 首先第一步先进行配置,在清单文件AndroidManifest里 Application作用域里加上如下配置:    
<meta-data            
  android:name="xposedmodule"            
  android:value="true" />        
<meta-data           
  android:name="xposeddescription"            
  android:value="hello xposed" />        
<meta-data            
  android:name="xposedminversion"            
  android:value="82" />   

2.    第二步,在main目录下(java、res同级目录)创建assets文件夹,在该文件夹下新建一个xposed_init文件(该文件名称固定为xposed_init),该文件用于放置hook的入口,里面是一个路径(比如我的是com.blues.cracktest.XposedInit,XposedInit就是我hook的入口,这个类后面会提及)。  

3.   第三步,新建一个类,这里就叫它XposedInit好了,让它实现(implements) IXposedHookLoadPackage 这个接口 ,重写 handleLoadPackage 方法(该方法用于获取需要hook到的类,里面会用到一个findAndHookMethod 用于hook对应的方法),我就直接show code吧:        
public class XposedInit implements IXposedHookLoadPackage {   @Override  public void handleLoadPackage(final XC_LoadPackage.LoadPackageParam lpparam) {      if (lpparam.packageName.equals("com.blues.cracktest")) {
          XposedHelpers.findAndHookMethod("com.blues.cracktest.MainActivity", lpparam.classLoader, "onCreate", Bundle.class, new XC_MethodHook() {
              @Override
              protected void afterHookedMethod(XC_MethodHook.MethodHookParam param) throws Throwable {
                  //不能通过Class.forName()来获取Class ,在跨应用时会失效
                  Class c = lpparam.classLoader.loadClass("com.blues.cracktest.MainActivity");
                  Field field = c.getDeclaredField("textView");
                  field.setAccessible(true);
                  //param.thisObject 为执行该方法的对象,在这里指MainActivity
                  TextView textView = (TextView) field.get(param.thisObject);
                  textView.setText("Hello Xposed!");
              }
          });
      }
  }
&#8203;
}



&#8203;原来的MainActivity长这样:
public class MainActivity extends AppCompatActivity {&#8203;
   private TextView textView;


  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      textView = findViewById(R.id.text);
      textView.setText("Hello,World!");
  }



(有兴趣的朋友可以利用Xposed实现教程(一)的效果也很简单)   代码是最好的老师,以上。后续还在慢慢深入的研究,有不足之处万盼指出,多谢。

上一篇:从零开始Android逆向教程(一)——初探Android逆向

免费评分

参与人数 10吾爱币 +18 热心值 +9 收起 理由
听风雨 + 1 用心讨论,共获提升!
只是来打酱油 + 1 + 1 我很赞同!
wwwio + 1 + 1 谢谢@Thanks!
qtfreet00 + 9 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
hnwang + 1 + 1 希望楼主再接再厉
黑木棍 + 1 + 1 我很赞同!
netle8 + 2 + 1 谢谢@Thanks!
iteamo + 1 能不能加一个上一篇文章和下一批文章的链接 我好翻翻
sunnylds7 + 1 + 1 谢谢@Thanks!
飞天蜗牛 + 1 + 1 谢谢@Thanks!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

wanggggg1 发表于 2018-12-31 14:42
我有一个直播软件, 想将后台直播源更新网址换成我自己的云盘网址,可以吗?请指教。
吾爱小萌新233 发表于 2018-12-29 12:53
酷安接触的xposed,手机上很好用,你说的也很好
飞天蜗牛 发表于 2018-12-29 10:24
莫问刀 发表于 2018-12-29 11:08
加油111111111111111111
一米子路 发表于 2018-12-29 11:16
支持一下!
bingbinggo 发表于 2018-12-29 12:13
感谢,学习了
Cass 发表于 2018-12-29 12:14
谢谢分享
午夜飘雪 发表于 2018-12-29 12:43
本想好好学学的 可惜
成都 发表于 2018-12-29 13:22
感谢,学习了
抹杀你的浪漫 发表于 2018-12-29 14:28
膜拜大佬
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2020-4-1 04:26

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表