这个工具很实用

需求背景

前段时间有这样一个需求需要小编测试:WIFI环境下,对指定IMEI号的手机下发补丁包。一句话的需求,可以找出如下几个测试点:1)WIFI环境且指定IMEI号的手机下发补丁;2)WIFI环境,不在IMEI号范围的手机不下发补丁;3)移动网络,指定IMEI号的手机不下发补丁;4)补丁的生效性。

遇到的问题

在测试过程中,小编遇到的问题是:1)组内Android设备的IMEI号都不在指定IMEI号列表中;2)移动网络连不到测试服务器,无法保证移动网络不下发补丁的正确性。针对问题1),可以让服务器开发同学在IMEI号列表中加入某台设备的IMEI号,也能验证WIFI下,指定IMEI号的手机下发补丁;针对问题2),如果通过fiddler拦截请求将参数的值修改为移动网络,也可以验证移动网络下,指定IMEI号的手机不下发补丁。不过,有没有更快捷有效的办法解决这两个问题呢?答案是肯定的~

一键修改IMEI&NETWORK工具实现过程及原理

Xposed是Android中Hook技术的一个著名框架,它可以在不修改APK的情况下影响程序运行,基于它可以制作出许多功能强大的模块,且在功能不冲突的情况下同时运作。一键修改IMEI&NETWORK就是利用Xposed框架进行系统方法的拦截,详细编写一个Xposed框架的过程如下:

1)新建一个Android项目,导入Xposed工具包;

2)编写模块代码,新建一个实现IXposedHookLoadPackage接口的类,在handleLoadPackage回调方法中进行拦截操作,借助XposedHelpers.findAndHookMethod方法Hook:获取网络环境的类名android.net.NetworkInfo和方法名getType;获取IMEI号的类名android.telephony.TelephonyManager和方法名getDeviceId;

public classhookimplementsIXposedHookLoadPackage{

@Override

public voidhandleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam)throwsThrowable {

XposedHelpers.findAndHookMethod("android.net.NetworkInfo", lpparam.classLoader,"getType",newXC_MethodReplacement() {

protectedObject replaceHookedMethod(MethodHookParam methodHookParam){

intresult =;

try{

if(FileTool.readConfigFromFile("net").contains("wifi")){

result =1;

}else{

result =;

}

}catch(Throwable throwable){

throwable.printStackTrace();

}finally{

Log.e("wyl","return "+result,newException());

returnresult;

}

}

});

XposedHelpers.findAndHookMethod("android.telephony.TelephonyManager", lpparam.classLoader,"getDeviceId",newXC_MethodReplacement() {

protectedObject replaceHookedMethod(XC_MethodHook.MethodHookParam param)throwsThrowable {

returnFileTool.readImeiFromFile();

}

});

}

}

3)添加模块入口。目的是告诉Xposed框架一个模块中Hook的入口,2)中可以看到模块的入口是hook类,所以需要在模块的assets中添加一个xposed_init文件,内容是模块入口类的全称;

4)添加模块的额外信息。在模块的AndroidManifest.xml文件添加额外信息,具体包括模块的描述信息,版本号等;

android:name="xposedmodule"

android:value="true"/>

android:name="xposeddescription"

android:value="TestXposed"/>

android:name="xposedminversion"

android:value="30"/>

xposedmodule:代表的是Android程序作为Xposed中的一个模块,所以值为true;xposeddescription:代表的是对本模块的功能的描述;

xposedminversion:代表的是本模块开发时用到的xposed的jar包的最低版本号,这里是30,而小编所用的xposed的jar包版本是54。

使用过程

1)安装Xposed框架

现在我们知道这个框架的核心技术是系统进程注入,必须要root权限,所以需要一个root的Android设备。具体安装过程是:

①下载安装Xposed安装器;

②打开Xposed安装器,点击”框架“,进入”框架“后点击安装,安装后重启手机。

2)安装一键修改IMEI号&NETWORK工具

工具安装到设备之后,Xposed提示模块未激活,进入Xposed的“模块”,选中该工具,重启手机激活即可。

3)使用该工具修改指定的IMEI号和网络环境

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180102B078XQ00?refer=cp_1026

相关快讯

扫码关注云+社区