17

xposed 入门之修改手机 IMEI

 3 years ago
source link: https://mp.weixin.qq.com/s?__biz=MzA3NDcyMTQyNQ%3D%3D&%3Bmid=2649265648&%3Bidx=1&%3Bsn=394169942b6847fc24300528c1882745
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

点击蓝字,关注我们

作者简介

吕元江

nMNBfeE.png!mobile

2019年1月加入去哪儿网,现负责app的分析和设备指纹反爬事项,对app脱壳,java/nativec层加解密算法分析还原有丰富经验。

1. 背景

xposed 对于很多安卓安全和逆向人员来说并不陌生,在对 app 的函数功能分析和拦截时经常会用到。本文以 xposed 修改某个应用的 IMEI 为例,作为一个简单入门介绍。供新手了解如何使用 xposed 编写自己所需的 hook 模块,以及简单介绍 xposed 在其他方面的应用场景。

2. 环境要求

手机系统:4.4.4-8.0 手机环境:必须为 root 环境 本文环境为:nexus 6P(android7.1.2)

3. xposed 环境配置所需文件

第三方 recovery:twrp-3.2.1-1-hammerhead.img 手机 root 管理:SR5-SuperSU-v2.82-SR5-20171001224502.zip xposed 框架:xposed-v89-sdk25-arm64.zip hook 模块管理 apk:XposedInstaller_3.1.4.apk

4. xposed 框架刷入步骤

4·1 刷入第三方 recovery:twrp (twrp-3.2.1-1-hammerhead.img)

可在 https://twrp.me/Devices/ 中查找你自己手机型号的版本。下载后将其 push 到手机 sdcard 根目录下。

a) adb reboot bootloader b) fastboot flash recovery twrp-3.2.1-1-hammerhead.img c) 不要重启,不要重启,不要重启,直接音量键选择进入 recovery 模式 d)刷入 twrp 成功的话,此时会进入 twrp 界面

yuyAjmy.png!mobile

4·2 xposed 框架的刷入

紧跟上一步:点击 Install 选择安装 xposed-v89-sdk25-arm64.zip 框架。

JV3QVbV.png!mobile

4·3 刷入获取 root 管理工具

提前将下载的 SR5-SuperSU-v2.82-SR5-20171001224502.zip 包 push 到 sdcard 根目录,同4·2步骤一样,选择 SR5-SuperSU-v2.82-SR5-20171001224502.zip 后刷入。

4·4 最后安装 XposedInstaller(可在 xposed 官网下载)

可通过 adb 命令进行安装:adb install XposedInstaller_3.1.4.apk

5. hook 模块的编写

以上环境搭建好了之后就可以编写我们的第一个 hook 模块了,我们以 Device Id 这个 app 为例进行篡改它的IMEI。

5·1 创建一个空的安卓工程

F3YRjef.png!mobile

5·2 修改 AndroidManifest.xml 添加如下三个 meta-data

eq22ArY.png!mobile

5·3 导入 Xposed api 库(XposedBridageApi-54.jar,xposed 官网提供下载)

XposedBridageApi.jar 复制到 app/libs 后,通过 build.gradle 引入。

ZBrMnye.png!mobile

5·4 编写 hook 模块的入口 MainHook 类,实现 IXposedHookLoadPackage 接口

EzYBbm7.png!mobile

5·5 配置文件 hook 模块主入口(告诉 xposed 从这里开始启动 hook 逻辑)

在 app/src/main/ 下创建文件夹 assets,并创建文件 xposed_init,将入口类全路径配置到该文件中。

yqEJ7n.png!mobile

6.开始编写 hook 代码

6·1 定位要 hook 的函数

我们修改软件的 IMEI 这一行作为目标测试,修改前如下图展示:

bmQzquE.png!mobile

通过反编译工具确定获取 IMEI 的 api,对其进行 hook,通过反编译工具分析后确定 acr 类的 c 方法是返回 IMEI 的值,我们 hook 此方法修改返回值达到篡改 IMEI 的目的。

JZr2eeu.png!mobile

6·2 完整 hook 代码如下

当然还可以通过 hook 安卓获取 IMEI 的 api 来进行篡改 IMEI(一劳永逸,此处留给感兴趣的同学自己来实现)。

package com.phone.fakeimei;
import android.content.Context;
import android.util.Log;
import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage;


public class MainHook implements IXposedHookLoadPackage {
private static final String TAG = "fakeimei";
//只对目标应用Device Id进行hook
public static String needHookApp = "com.evozi.deviceid";
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {
if(!loadPackageParam.packageName.equals(needHookApp)){
return;
}
Log.d(TAG,"发现要hook的app包名:"+loadPackageParam.packageName);
//load要hook的类,判断是否存
Class<?> acrClazz = XposedHelpers.findClassIfExists("acr", loadPackageParam.classLoader);
if(null!=acrClazz){
Log.d(TAG,"发现要hook的app类:"+acrClazz.getSimpleName());
XposedHelpers.findAndHookMethod(acrClazz, "c", Context.class, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
super.beforeHookedMethod(param);
//hook 之前操作:可以修改入参
}
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
super.afterHookedMethod(param);
//hook之后,可以修改返回值
String realImei =(String) param.getResult();
String fakeImei = "123456789";
Log.d(TAG,"真的IMEI:"+realImei+"假的IMEI:"+fakeImei);
//用假的替换真的IMEI 调用setResult方法
param.setResult(fakeImei);
}
});
}
}
}

6·3 编译 hook 模块打包为 apk,再勾选 hook 模块,然后选择重启设备(软重启在7.0手机上有时不生效)手机使 hook 模块生效

eEJrq2v.png!mobile

eANr2qu.png!mobile

7. 模块生效后的 hook 效果

aQZJf2n.png!mobile

AJ7v2qr.png!mobile

8. xposed 在其他方面的应用

xposed 作为一款 hook 工具它的应用场景有很多,并不仅仅只是一个工具而已,如上所述你可以用来修改手机的设备信息,来模拟一台新的手机。

8·1 保护个人隐私信息

比如,你不想接受电商推送的广告或者垃圾短信,由于安卓权限的开放泛滥,很多 app 都会收集手机号,联系人,最近通话记录等等,甚至有些收集短信内容。每当电商狂欢节时会收到一堆的所谓的优惠券垃圾短信。你可以利用 xposed 将关键信息 hook 掉,在某些 app 获取你的敏感信息时返回假的数据或者空,拦截骚扰短信等,以此保护个人隐私。

8·2 黑灰产的利用 xposed 一键新机

利用 xposed 配合成熟的设备模拟插件,可以实现一键新机,一台手机变多台,羊毛党常用来薅电商的羊毛,目前很多电商判断一个新注册用户是否为新用户的时候,往往会采集设备的一些信息,而非单一的从注册时间来判断。羊毛党们为了降低成本,通常会采用 xposed 不定期模拟出一台新设备的方式,甚至能模拟出手机的文件路径,地理位置,电量,和通话记录信息等等。

在618,双十一电商大战中的百亿补贴,不仅吸引了众多用户,更吸引了羊毛党,无数用户在准备下单时发现商品已处售罄的状态,然而真实情况可能是已经被羊毛党捷足先登,甚至于在今年的十月一时,某个电器旗舰店因此面临倒闭的风险。

8·3 app 的去广告,模拟点击等等

某些 app 的自动点击,关注,甚至视频类 app 的去广告,某些 app 的优惠活动,抢单之类等等,都会发现 xposed 的身影。

BZFRriZ.jpg!mobile

6jemIbu.jpg!mobile


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK