首先安装Xposed Installer框架,下载Xposed API jar包

链接:https://pan.baidu.com/s/1TGPoldcsi8CvgfCXpTy0Tw 密码:2pa3

1.Android studio 创建一个新工程,在app lib 中导入XposedBridge-jar包,在app中添加该包,以compileOnly files格式

2.在AndroidManifest.xml文件里添加以下配置

<!-- 使 xposed 模块有效 --><meta-data android:name="xposedmodule"android:value="true"/><!-- xposed 模块名称,我们可以随便起一个和模块功能相似的即可 --><meta-data android:name="xposeddescription"android:value="修改设备IMEI"/><!-- xposed 模块最低版本 --><meta-data android:name="xposedminversion"android:value="54"/>

3.创建activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/LinearLayout1"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><LinearLayoutandroid:layout_width="match_parent"android:layout_height="20dp"android:orientation="horizontal"><TextViewandroid:id="@+id/tv1"android:layout_width="80dp"android:layout_height="20dp"android:layout_weight="1"android:text="one" /><TextViewandroid:id="@+id/tv2"android:layout_width="80dp"android:layout_height="20dp"android:layout_weight="1"android:text="two" /></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="40dp"android:orientation="horizontal"><EditTextandroid:id="@+id/imei_et"android:layout_weight="1"android:layout_width="match_parent"android:layout_height="40dp"android:hint="输入修改IMEI值" /><Buttonandroid:id="@+id/btn_Save"android:layout_weight="1"android:layout_width="match_parent"android:layout_height="40dp"android:text="Button" /></LinearLayout></LinearLayout>

4.实现主界面MainActvity,主要有实例化控制,判断获取权限,文本设置显示当前手机IMEI,IMSI值,文本输入框获取值,Button设置点击事件。

public class MainActivity extends AppCompatActivity {private TextView tv1;private TextView tv2;final int MY_PERMIEAD_CONTACTS = 1;private EditText imeitx;private Button btnSave;private TelephonyManager Phone;@SuppressLint("MissingPermission")@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//实例化控件tv1 = findViewById(R.id.tv1);tv2 = findViewById(R.id.tv2);imeitx = findViewById(R.id.imei_et);btnSave = findViewById(R.id.btn_Save);Phone = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);// 点击按钮,将数据保存到SharedPreference中btnSave.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {saveData();//点击保存sp键值对数据}});//获取权限状态int permissionCheck =ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_PHONE_STATE);//判断权限是否开启if (permissionCheck != PackageManager.PERMISSION_GRANTED) {ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.READ_PHONE_STATE}, MY_PERMIEAD_CONTACTS);} else {//设置显示文本的数据tv1.setText("IMEI:" + Phone.getDeviceId());tv2.setText("IMSI:" + Phone.getSubscriberId());}}private void saveData() {try {//sp键值对保存,文本框里数据SharedPreferences sh = this.getSharedPreferences("sPref", Context.MODE_WORLD_READABLE);SharedPreferences.Editor sPre = sh.edit();sPre.putString("imei", imeitx.getText().toString());sPre.apply();Toast.makeText(MainActivity.this, "修改成功", Toast.LENGTH_SHORT).show();} catch (Throwable e) {e.printStackTrace();}}}

4.创建Xposed实现类,实现接口IXposedHookLoadPackage ,重写handleLoadPackage方法,在该方法里实现具体hook操作,运行成功就可以完成修改了。

public class Main  implements IXposedHookLoadPackage {@Overridepublic void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {//获得Sharedpreference保存的数据final XSharedPreferences sPre = new XSharedPreferences(this.getClass().getPackage().getName(), "sPref");XposedHelpers.findAndHookMethod(TelephonyManager.class.getName(), loadPackageParam.classLoader, "getDeviceId", new XC_MethodHook() {@Overrideprotected void afterHookedMethod(MethodHookParam param) throws Throwable {super.afterHookedMethod(param);//具体的hook操作就这一行,设置getDeviceId()的返回值param.setResult(sPre.getString("imei", null));//打印logXposedBridge.log("hook ---getDeviceId***after " + param.getResult());}});}
}

5.最后一步别忘了,创建assets文件夹,创建xposed_init文件

文件写入内容为app包名.Xposed主类名

6.如此就可以运行,软重启修改IMEI了。

7,注意可能会遇到的问题

问题一:Setting里Instant Run 默认设置勾选,会使编译加快,但会对xposed框架有影响,编译会没有结果,应该去掉√。

问题二:gradle文件里设置libs,这样会把jar包加入到APK,而手机Xposed Installer里已经有该jar包了,两个存在就会有冲突。如此Xposed日志里会报错,所以应用里的Xposed.jar不能导入,然后如下就会好。

coz

Hook(钩子)实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出(要hook函数触发),在没有到达目的窗口前,钩子程序就先捕获该消息,钩子函数先得到控制权。这时钩子函数就可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。pzompileOnly files('lib/XposedBridgeApi-82.jar')

总结:Xposed框架hook的实用性,当其他APP执行函数、Android系统函数运行前/后,劫持它们的输入值,输出值,并且改变,传递这些值。可以给应用打补丁,也可以该设备信息,这次的例子就是改变了系统的IMEI值。

hook前 IMEI

hook后 :IMEI

还有什么问题不明白,或者不会

欢迎加入我的Java与Android逆向开发交流QQ群,一起学习,一起进步。

Xposed小白入门,动态修改IMEI实例代码相关推荐

  1. java.lang.Instrument 动态修改替换类代码

    java.lang.Instrument 动态修改替换类代码 | java.lang.Instrument包是在JDK5引入的,程序员通过修改方法的字节码实现动态修改类代码. 这通常是在类的main方 ...

  2. vue2.0中组建里面套用组件_vue19 组建 Vue.extend component、组件模版、动态组件 的实例代码...

    具体代码如下所示: document var aaa=vue.extend({//继承出来一个vue类aaa template:' 我是标题3 ' }); var a=new aaa();//a跟vm ...

  3. 红米手机使用应用沙盒动态修改imei信息

    之前文章介绍了怎么在安卓手机上安装激活xposed框架,xposed框架的极强的功能各位都清楚,可以不修改APK的前提下,修改系统内部的参数,比如在某些应用范畴,各位需要修改手机的某个系统参数,这个时 ...

  4. 小米手机动态修改imei信息

    前面文章介绍了如何在安卓手机上安装激活xposed框架,xposed框架的牛逼之处功能大家都清楚,能够不修改apk的前提下,修改系统内核的参数,打比方在某些应用领域,大家需要修改手机的某个系统参数,这 ...

  5. 案例驱动python编程入门-python ddt数据驱动实例代码分享

    python ddt数据驱动最简实例 在接口自动化测试中,往往一个接口的用例需要考虑 正确的.错误的.异常的.边界值等诸多情况,然后你需要写很多个同样代码,参数不同的用例.如果测试接口很多,不但需要写 ...

  6. jquery实现输入框动态增减的实例代码

    2019独角兽企业重金招聘Python工程师标准>>> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transition ...

  7. Android手机跑逆向,Android 逆向工程:基于Xposed Hook实现动态逆向分析

    Xposed是一个非常神奇的框架,对于普通用户,Xposed框架可以发挥Android系统更高的使用效率,可以随便折腾,美化优化系统.但是用于开发者而言,Xposed可以用于 逆向工程,动态逆向分析A ...

  8. 动态修改svg图片颜色

    使用场景 引入颜色为纯色的svg图片时,动态修改svg图片填充颜色.引入的方式包括直接svg代码引用和img标签间接引用. 直接引用SVG 如果通过svg代码的方式引入图片,那么可以直接修改fill属 ...

  9. python 快速排序_小白入门知识详解:Python实现快速排序的方法(含实例代码)...

    前言: 今天为大家带来的内容是:小白入门知识详解:Python实现快速排序的方法(含实例代码)希望通过本文的内容能够对各位有所帮助,喜欢的话记得点赞转发收藏不迷路哦!!! 提示: 这篇文章主要介绍了P ...

  10. java动态修改class_Java Agent入门学习之动态修改代码

    前言 最近用了一下午总算把Java agent给跑通了,本篇文章记录一下具体的操作步骤,以免遗忘.下面话不多说,来一起看看详细的介绍: 通过java agent可以动态修改代码(替换.修改类的定义), ...

最新文章

  1. 2018-3-15模式识别--学习笔记(一)
  2. 首位猪心移植患者去世!术后存活2个月,创造医学里程碑;官方讣告:哀悼并感谢所作巨大贡献...
  3. C++使用数组实现stack堆栈(附完整源码)
  4. svn提交报e200007错误
  5. 使用gogit 设置 http 以及 ssh 协议
  6. EntityFramework Core进行读写分离最佳实践方式,了解一下?
  7. c语言编程每日一练教程,每日一练 | C语言之指针
  8. AJAX的 contentType
  9. 设计类超实用的导航网站,一网包含1000+个行业内热门资讯灵感源!
  10. 我碰到的到现在为止,还没有找到比较好的解决方法的sps问题
  11. python发展调研报告_实战 | Python自动生成PPT调研报告
  12. red5流媒体服务器系统,red5 流媒体服务器配置
  13. python信息安全书籍_GitHub - riusksk/secbook: 信息安全从业者书单推荐
  14. Irrlicht引擎源码剖析——第十三天
  15. 一年左右工作经验前端面试分享(vue 方向)
  16. 理解上下文切换带来的性能影响
  17. 异常,Map,File
  18. html a5 尺寸,纸型尺寸大小(A1,A2,A3,A4,A5,A6,B1,B2,B3,B4,B5......)
  19. 横版过关游戏开发-游戏流程
  20. C++仿照标准字符串类string,设计一个自己的字符串类String

热门文章

  1. 开课吧 python与人工智能 下载_开课吧app|开课吧手机版下载v2.3.6安卓版 - 欧普软件下载...
  2. void print c语言,数据结构(c语言版)习题集第一章绪论1.16voidprint_descending(intx.doc
  3. #今日论文推荐#罗格斯大学王灏:保持孩子般的好奇心
  4. Solr高级查询Facet
  5. 如何提高软件测试能力的19条建议,希望对你有用
  6. 《Spring实战》学习笔记-第五章:构建Spring web应用
  7. c语言程序设计对称数,对称数 问题
  8. 269个JavaScript工具函数
  9. Linux_clustalW安装及使用(部分)
  10. U3D DotH教程3