xposed模块是用什么语言开发的,想学习开发xposed模块.求大神解答!

最近一直在捯饬 IOT 物联网中智能门鎖的研究因为要逆向安卓方面的APP,而安卓的 APP 很多都是经过加壳处理过因此脱壳成为了必经之路。xposed 框架是非常流行的安卓下进行 HOOK APP 分析的主流框架如何基于 Xposed 进行插件开发?参考网络上的资料发现很多内容包括2017年的资料也存在老旧的情况,经过一系列的参考资料和动手实踐之后可以在最新版的 Android studio 下进行 Xposed demo版本的开发。以下就是大致过程的记录

各种环境信息和相关配置

xposed 插件的开发中,经常会使用到NDK进行 .so 模块嘚编写所以 NDK 有必要进行下载和配置 下载链接为:

win7和win10都是64位系统,32位系统需要使用:

同时也又 Linux 和 MacOS 版本各下所需即可。 下载完成的ndk解压到D盤并重名为
 

添加系统环境变量,path中添加 d:\ndk-bundle\路径中不要出现空格和中文。

显示如图显示NDK已经安装成功:

新版本的 NDK 不再支持旧版本下的某些使用方式如果使用旧版本的一些配置,会出现各种各样的报错google和百度上也很难搜索到正确的答案, 非常的浪费精力大家看下过程也可以節省时间。 采取的思路是先创建一个包含有 .so 模块的 Android 工程再行配置为 Xposed 模块,一举两得 新建一个 android 工程,命名为 HookDemo,需要勾选

后面的配置中需要支持C++11 标准,原因是某些特定的库需要支持比如

与默认配置之间的区别是:

完成之后直接进行编译,成功后可以观察到在工程目录下有 native-lib.so 文件 咹装生成好的APP到手机上,就可以观察到效果:

观察工程可以发现工程结构:

通过上述的方法之后可以很快的创建针对so模块的初始化工程,节省很多时间 相关的代码在cpp目录下,剩下的工作就是配置工程为 Xposed 模块

打开一个 xposed中安装的APP后,观察其中的日志可以看到相关的日志記录。

到此说明 模块创建和配置完成剩下的就是调用 so模块中代码,先来简单一点的:直接使用AS默认生成的代码

添加针对 .so模块的调用

编譯为APK后进行测试,结果如图:

}

  由于某些课程实验的要求需要通过xposed框架对某应用进行hook操作,笔者选用了开源且免费的xposed框架进行实现虽然网上存在一些利用xposed实现特定功能的文章资源,但大多均将xposed模块的构建作为一个小节内容一笔带过而且介绍的内容随着考虑的因素、使用的编辑环境不同也大有区别,使得笔者在实际构建过程中往往提心吊胆出现了错误也不知道如何去改正。故而这里特将笔者最近摸索和学习到的简单xposed构建的知识记录以供查阅和参考。

  想偠使用Xposed模块实现特定的功能必须依赖Xposed框架,正如 apk 的运行需要Android系统提供支持一样Xposed模块任务的完成也离不开Xposed框架的支持,Xposed框架提供了Xposed模块運行所必需的环境和功能接口同时也可以对系统上已安装的模块进行禁用、卸载等管理。故而在想通过Xposed模块完成一定任务之前必须安裝Xposed框架。

  Xposed框架Installer下载地址:安装的过程可参考网络资料。

  注意:由于Xposed框架安装时需要将系统文件夹/system/bin的部分文件进行替换和备份故洏手机需要具备root权限

  下面以Android Studio 3.0.1为例总结下简单的Xposed模块的编写所需的配置和注意事项。

  Xposed模块实际上是作为一种较为特殊的apk安装在系统上由于Xposed 模块的功能通常借助于其他应用和系统资源实现,其一般没有应用界面故而创建一个没有活动的项目即可。

  A.在Android Studio中点擊 file -> new -> new project 进行新项目的创建。指定应用名称、公司域名、存储位置和包名等信息,这里需要注意应用名和包名这两个名字;

  B.勾选 Phone and Tablet 选项选择该 Xposed 模块( 实际就是apk)将要运行的 Android 环境所对应的 API。注意这里的API指定的是Android环境与apk之间交互的接口只有该API与之后apk实际运行的Android环境相匹配,apk才能正确的咹装和运行如笔者的 Xposed 模块将要运行在

  C.在接下来的界面中,选择“ add no activity ”即不添加活动( Xposed 模块不需要活动 )即可完成项目的创建。

  Xposed模块被视为一种特殊的apk故而在创建项目之外,还需要针对其进行 Xposed 模块相关的配置

  A. 切换目录结构。点击界面左上方的竖式 Project展开项目界媔,将项目结构从 Android 切换至 Project 模式方便之后的编辑;

    其中,第2行表示将 jcenter 作为代码仓库可在上面引用开源项目,而第 6 行则指定引用項目的项目名和版本信息

    第6行的声明需要注意两点:  

    a) 使用 provided 关键字而不是 compile,后者会将引用的 Xposed 框架 API 类打包至生成的 apk 中而这些类在安装好的 Xposed 框架中是已经存在的,所以可能会产生冲突而 provided 关键字则仅保留对 API 的引用,实现具体功能的类则由安装好的 Xposed 框架提供;     

框架目前无法处理这样的情况

  完成上述步骤后,则可将项目文件打包成 apk ( Android Studio 下打包 apk 的简单步骤可以参见这里)并在手机中安装。安装成功後在 Xposed 框架的模块管理界面会出现该模块对应的管理项,证明对 Xposed 模块的配置是成功的勾选对应的模块,并重启设备重启之后该模块则開始发挥功能。当然目前我们并没有实现任何功能

  ( 以下部分不涉及具体的实现原理,仅提供函数的简单功能的描述更多关于Xposed 框架API嘚功能可在查看)

  一个 Xposed 模块可以有多个不同的入口,其中实现的方法既可以在 Android 系统启动时被调用也可在一个应用程序包被加载时被调鼡,想要在不同的时期被调用则该功能类需要实现不同的接口。

interface :   //在Android系统启动时被调用作用于初始的zygote进程,可用于实现应用于所囿应用的hook interface:  //当指定应用被加载时被调用一般用于hook特定应用的方法 interface://指定应用的资源进行初始化时被调用,一般用于资源的替换
 className:被hook嘚方法所在类的完整名称包括 包名 + 类名 methodName:被hook的方法的名,注意如有混淆则应该用混淆后的名字 Callback :指定该方法被调用时,需要被执行的回調
 
// 该方法在被hook函数之前被调用 // 该方法在被hook函数之后被调用

  以下代码实现了微信的一个日志函数的简单 hook

  完成上述模块功能的编写後,需在 应用名(test) -> app -> src -> main 目录下新建一个 assets 目录并在该目录下建立一个名为 exposed_init 的文本文件。该文件中记录模块中所有实现了Xposed 功能接口的类的完整路径洺每一行书只写一个这样的路径。

  所有实现了 Xposed 接口的类均要在该文件中记录以供 Xposed 框架进行处理。

  之后即可打包完成的项目將其安装至设备上进行验证了。

  1. 详细的xposed模块开发示例

}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信