有梦想的小草 发表于 2019-1-8 23:45

android逆向分析之Xposed初探

本帖最后由 有梦想的小草 于 2019-1-9 00:25 编辑

经过今天一天的学习,结合网络上许多牛人的分享,初次了解到Xposed的构建方法,特此记录与分享。
进行一个Xposed模块编写,必须的,也是首要的是要搭建一个Xposed开发环境(我们暂且称之为开发环境吧),简单来说就是迁移Xposed框架API到我们的项目并把我们的入口暴露给Xposed框架。

目录视图:



环境搭建分为以下几步:
1.下载 api-82-sources.jarapi-82.jar   两个XposedAPI jar包

          地址:https://dl.bintray.com/rovo89/de.robv.android.xposed/de/robv/android/xposed/api/82/api-82-sources.jar
                  https://dl.bintray.com/rovo89/de.robv.android.xposed/de/robv/android/xposed/api/82/api-82.jar

         将这两个文件放入 ./app/libs 目录下,以后调用API需要从这两个文件中调用,如上图目录所示。

2.在 ./app 文件上右键新建 assets类型文件夹 并在其中添加xposed_init 文件,这个文件里的内容是指向我们hook类 的位置,xposed框架从这个文件读取入口地址,如下。

com.example.administrator.myxposed.XModule

3.新建 类 XModule 为我们的hook类,并在这个类里重写和实现我们的hook函数代码,如下。

public class XModule implements IXposedHookLoadPackage {

    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {

      if (loadPackageParam.packageName.equals("com.example.administrator.myapplication")) {

            Class clazz = loadPackageParam.classLoader.loadClass("com.example.administrator.myapplication.MainActivity");

            XposedHelpers.findAndHookMethod(clazz, "toastMessage", new XC_MethodHook() {
                protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                  super.beforeHookedMethod(param);
                }

                protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                  param.setResult("你已被劫持");
                }
            });
      }
    }
}


4.在Manifest.xml 的application标签中添加标识,让Xposed识别和在列表中显示,如下代码可供参考。

<meta-data
                android:name="xposedmodule"
                android:value="true" />
            <meta-data
                android:name="xposeddescription"
                android:value="模块描述" />
            <meta-data
                android:name="xposedminversion"
                android:value="54" />

5.修改build.gradle文件,dependencies中做如下修改:

dependencies {
    provided 'de.robv.android.xposed:api:82'
    provided 'de.robv.android.xposed:api:82:sources'
    provided fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
      exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:26.+'
    testCompile 'junit:junit:4.12'
}


至此,Xposed代码就已书写完毕。

以下贴出 hook demo的 MainActivity 代码以供参考:

public class MainActivity extends AppCompatActivity {
    private Button button;

    public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      button = (Button) findViewById(R.id.button);

      button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                Toast.makeText(MainActivity.this, toastMessage(), Toast.LENGTH_SHORT).show();
            }
      });
    }

    public String toastMessage() {
      return "我未被劫持";
    }

}


效果截图:

1.未劫持app运行:



2.Xposed hook后运行:



3.Xposed模块列表




【注意】按照图示设置 file->settings,否则hook不成功:





飞天蜗牛 发表于 2019-1-9 00:03

感谢楼主分享学习经验,学习下

loveactlink 发表于 2019-1-9 00:36

现在学习安卓是趋势啊

model6126maodou 发表于 2019-1-9 08:45

Xposed框架很强大

kentish 发表于 2019-1-9 09:10

谢谢分享 学习一下

haoii123 发表于 2019-1-9 09:51

谢谢分享 学习一下

gunxsword 发表于 2019-1-9 11:17

感谢分享,回头试试!

wubo777 发表于 2019-1-9 12:18


感谢楼主分享学习经验,赞一个。{:301_1003:}

wuai920981023 发表于 2019-1-9 12:52

感谢楼主分享学习经验,

蚂蚁牙黑 发表于 2019-1-9 14:48

不错,很清楚
xposed一直未上手,这次可以学习一波了
页: [1] 2
查看完整版本: android逆向分析之Xposed初探