Android Studio Xposed模块编写(一)
1、环境说明
本文主要参考https://my.oschina.net/wisedream/blog/471292?fromerr=rNPFQidG的内容,自己实现了一遍,侵权请告知
已经安装xposed Installer的nexus5一台,Xposed Installer版本2.7 experimental1, Android 版本4.4.4
开发环境Android Studio 2.2.3
2、开发流程
1、拷贝XposedBridgeApi-54.jar到新建工程的libs目录
2、修改app目录下的build.gradle文件,在AndroidManifest.xml中增加Xposed相关内容
3、新建hook类,编写hook代码
4、在app上右键新建assets folder,然后在assets目录下新建文件xposed_init,在里面写上hook类的完整路径
3、Hook模块编写
1、新建Android studio工程,选择无activity,并将XposedBridgeApi-54.jar拷贝到libs目录下,然后双击app目录下的build.gradle文件,将
compile fileTree(include: ['*.jar'], dir: 'libs')
替换为
provided fileTree(include: ['*.jar'], dir: 'libs')
2、修改AndroidManifest.xml文件,在Application标签下增加内容如下
<meta-data
android:name="xposedmodule"
android:value="true" />
<meta-data
android:name="xposeddescription"
android:value="模块描述" />
<meta-data
android:name="xposedminversion"
android:value="" />
3、新建hook类,命名为XMdodule,内容如下
public class XModule implements IXposedHookLoadPackage{
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {
if(loadPackageParam.packageName.equals("com.example.test")){
XposedBridge.log("XLZH " + loadPackageParam.packageName);
XposedHelpers.findAndHookMethod(TelephonyManager.class, "getDeviceId", new XC_MethodReplacement() {
@Override
protected Object replaceHookedMethod(MethodHookParam methodHookParam) throws Throwable {
return "this is imei";
}
});
XposedHelpers.findAndHookMethod(TelephonyManager.class, "getSubscriberId", new XC_MethodReplacement() {
@Override
protected Object replaceHookedMethod(MethodHookParam methodHookParam) throws Throwable {
return "this is imsi";
}
});
}
}
}
代码功能是hook 系统TelephonyManager类的getDeviceId()和getSubscriberId()方法,返回字符串,而且只hook com.example.test应用。
4、新建assets目录,在其中新建文本xposed_init,里面内容为
com.zcgames.xposedtest.XModule
最后的目录结构如下图所示

4、Hook目标应用编写
Android Studio新建com.example.test应用,MainActivity.java内容如下
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = (Button)findViewById(R.id.getImei);
button.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
try {
Log.d("XLZH", "get imei " + tm.getDeviceId());
Log.d("XLZH", "get imsi " + tm.getSubscriberId());
}catch (Exception e) {
Log.d("XLZH", e.getMessage());
e.printStackTrace();
}
}
});
}
}
5、实施Hook
1、XposedTest工程编写完成后,点击Build-Build Apk(因为没有Activity,所以无法点击运行自动安装),build成功后,在app/build/output/apk目录下生成app-debug.apk,点击as下发的Terminal,进入该目录使用adb install安装即可
2、com.example.test工程完成后,点击run运行,点击按钮,使用logcat | grep XLZH,查看结果如下

3,打开xposed Installer应用,选择模块,可以看到XposedTest模块,选中,然后重启手机,再次打开目标应用,点击按钮,结果如下所示,hook成功

6、几个小坑
1、xposed加载模块失败,在xposed installer的log中看到提示如下
java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation
原因:因为没有修改build.gradle文件,默认libs目录下的内容会被包仅apk中,导致和手机上原有的发生了冲突,在build.gradle中把compile修改成provided即可。
2、xposed_init中区分大小写,例如com.zcgames.xposedtest.XModule修改成com.zcgames.XposedTest.XModule,也会导致模块加载失败
3、模块安装后再次使用adb install安装时,提供程序已经安装,需要到设置->应用中找到安装的模块进行卸载(没有activity,无法在桌面卸载)
Android Studio Xposed模块编写(一)的更多相关文章
- Android Studio Xposed模块编写(二)
阅读本文前,假设读者已经看过Android Studio Xposed模块编写(一) 相关环境已经搭建完成.本文演示案例与上文环境一致,不在赘述. 1.概述 Xposed是非常牛叉的一款hook框架 ...
- 5.1、Android Studio用Logcat编写和查看日志
Android Studio在Android Monitor中包含了一个logcat的tab,可以打印系统事件,比如垃圾回收发生时,实时打印应用消息. 为了显示需要的信息,你可以创建过滤器,更改需要显 ...
- Android的硬件抽象层模块编写规范
硬件抽象层模块编写规范 Android系统的硬件抽象层以模块的形式来管理各个硬件訪问接口.每个硬件模块都相应有一个动态链接库文件.这些动态链接库文件的命令须要符合一定的规范.同一时候,在系统内部. ...
- Android Studio 添加模块依赖
原文地址: http://fanjiajia.cn/2018/09/27/Android%20Studio%20%E6%B7%BB%E5%8A%A0%E6%A8%A1%E5%9D%97%E4%BE%9 ...
- Android Studio从Eclipse导项目
要是你只下了Android Studio 就不能用Eclipse导出gradle项目了 可以直接使用Android Studio导入模块,在Android Studio里Project算Eclipse ...
- [转载] Android Studio 上第一个 Xposed 模块
本文转载自: http://www.open-open.com/lib/view/open1451364108964.html 环境: 已root手机一枚 Android Studio一枚 官方文档参 ...
- [转]Android Studio创建Xposed模块项目时BridgeApi的正确添加方式
使用Android Studio创建的空项目作为Xposed Module App,对于Api Jar包的引用方式,一开始是按照傻瓜式Jar Lib的处理方式,复制XposedBridgeApi-54 ...
- 开启Android Apk调试与备份选项的Xposed模块的编写
本文博客地址:https://blog.csdn.net/QQ1084283172/article/details/80963610 在进行Android应用程序逆向分析的时候,经常需要进行Andro ...
- android仿微信红包动画、Kotlin综合应用、Xposed模块、炫酷下拉视觉、UC浏览器滑动动画等源码
Android精选源码 仿微信打开红包旋转动画 使用Kotlin编写的Android应用,内容你想象不到 Android手机上的免Root Android系统日志Viewer 一个能让微信 Mater ...
随机推荐
- 多个div中的label标签对齐
这是之前的页面效果: 添加红色部门的代码后: <head> <meta name="viewport" content="width=device-wi ...
- SQL Server登录方式
SQL Server登录服务器有两种验证方式,一种是windows身份验证,也就是本机验证,另一种就是SQL Server验证,就是使用账号密码的方式验证. 在使用windows身份验证登录时,直接就 ...
- 通用视图-分开处理GET、POST请求
1.编辑urls.py: url(r'^vmmgmt-vms/$', views.vmmgmt,{'model':models.hvvms,'GET': views.vmmgmt_get_view,' ...
- linux 文本操作
sed -i 直接修改 sed 是负责插入替换删除字符串操作. sed -n '/11/p' 11.txt |sed 's/11/33333/g' 查找11并替换11位3333 sed 's/1 ...
- Oracle 导出用户下的所有索引创建语句
SELECT dbms_lob.substr(dbms_metadata.get_ddl('INDEX', INDEX_NAME))||';' from dba_indexes where owne ...
- 026.6 网络编程 tomcat
###############Tomcat中相关文件作用 bin:启动关闭服务器的脚本 Conf:配置文件 Lib:Tomcat的jar包,只要部署项目到Tomcat,所有项目可共用 ...
- 原生js返回顶部(匀速、由快到慢)
在项目中我们经常有需求要求页面滚动到一定位置时出现返回顶部按钮,点击即返回顶部. 方法一: 锚点,这是最简单的.(a标签的href属性等于一直要到达位置元素的id值) 方法二: js直接给页面根节点设 ...
- css多行省略-webkit-box-orient打包编译后失效原因
原css代码: .dialog-for-plan .dialog-table .type>p { display: -webkit-box; -webkit-box-orient: vertic ...
- python安装教程(Windows系统,python3.7为例)
1. 在python的官网下载python对应版本:https://www.python.org/downloads/windows/ 64位下载Windows x86-64 executable i ...
- php api接口安全设计 sign理论
一. url请求的参数包括:timestamp,token, username,sign 1. timestamp: 时间戮 2. token: 登陆验证时,验证成功后,生成唯一的token(可以为u ...