需求背景
前段时间有这样一个需求需要小编测试: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号和网络环境
领取专属 10元无门槛券
私享最新 技术干货