Android检测三方库行为


前言

android程序中调用了很多第三方库,由于工信部的监管政策,各个业务需要对第三方库的具体行为负责,如果在APP抽查中发现应用中调用的第三方库有违规行为,APP也会被通知整改或者下架。

因此有必要使用技术手段对第三方库的具体行为进行测试,例如检测第三方库是否有采集MAC地址的行为。由于第三方库的网络请求都进行了加密,因此很难从网络层去检测是否有敏感信息回传。但是可以通过xpose hook关键函数的形式,判断第三方库是否有采集mac信息等行为。

具体方案

一,VirtualXposed的安装

VirtualXposed是一个虚拟环境,可以在设备没有Root的情况下hook系统的api。如果有已经root的设备,或者使用的是手机模拟器,可以使用xposed。

VirtualXposed源码及APK下载地址:https://github.com/android-hacker/VirtualXposed/releases

将VirtualXposed APK文件安装到测试手机(这里需要注意测试手机的CPU架构也需要跟VirtualXposed支持的架构保持一致),安装后需手动进入VirtualXposed的应用权限设置界面,将所有的权限都开启(VirtualXposed并不会自动请求权限,所以需要手动开启),然后运行VirtualXposed。

二,编写Hook程序

编写Hook程序前需要先知道通过哪些接口可以获取到MAC地址

获取MAC地址方法一:调用NetworkInterface类的getHardwareAddress()方法

获取MAC地址方法二:调用WifiInfo类的getMacAddress()方法

获取MAC地址方法三:通过Runtime.getRuntime().exec("cat /sys/class/net/wlan0/address ")方法获取

明确了需要hook的方法,开始编写Hook程序:

1,新建一个类,实现IXposedHookLoadPackage接口

public class Main implements IXposedHookLoadPackage {

private static final String TAG ="Main";

private String HOOK_PREFIX ="getmachook -> ";,

2,针对上文介绍的三种获取mac的形式,进行hook,通过日志形式进行输出

private void hookMacAddresshighversion(XC_LoadPackage.LoadPackageParam lpparam) {

try {

Class clazz = lpparam.classLoader.loadClass("java.net.NetworkInterface");

String methodName ="getHardwareAddress";

XposedHelpers.findAndHookMethod(clazz,methodName,new XC_MethodHook() {

@Override

            protected void beforeHookedMethod(MethodHookParam param)throws Throwable {

super.beforeHookedMethod(param);

Log.i(TAG,HOOK_PREFIX +"hookMacAddresshighversion getHardwareAddress");

Log.e(TAG,HOOK_PREFIX + getStackTrace(new Exception()));

}

});

}catch (Throwable e) {

Log.e(TAG,"hookMacAddresshighversion", e);

}

}

/**

* Detects whether the App has obtained  mac , applicable to the system lower 7.0

*/

private void hookMacAddresslowversion1(XC_LoadPackage.LoadPackageParam lpparam) {

try {

Class clazz = lpparam.classLoader.loadClass("android.net.wifi.WifiInfo");

String methodName ="getMacAddress";

XposedHelpers.findAndHookMethod(clazz,methodName,new XC_MethodHook() {

@Override

            protected void beforeHookedMethod(MethodHookParam param)throws Throwable {

super.beforeHookedMethod(param);

Log.i(TAG,HOOK_PREFIX +"hookMacAddresslowversion1 getMacAddress");

Log.e(TAG,HOOK_PREFIX + getStackTrace(new Exception()));

}

});

}catch (Throwable e) {

Log.e(TAG,"hookMacAddresslowversion1", e);

}

}

private void hookMacAddresslowversion2(XC_LoadPackage.LoadPackageParam lpparam) {

try {

Class clazz = lpparam.classLoader.loadClass("java.lang.Runtime");

String methodName ="exec";

XposedHelpers.findAndHookMethod(clazz,methodName,String.class,new XC_MethodHook() {

@Override

            protected void beforeHookedMethod(MethodHookParam param)throws Throwable {

super.beforeHookedMethod(param);

Log.i(TAG,HOOK_PREFIX +"hookMacAddresslowversion2 getMacAddress param = " + param.args[0]);

Log.e(TAG,HOOK_PREFIX + getStackTrace(new Exception()));

}

});

}catch (Throwable e) {

Log.e(TAG,"hookMacAddresslowversion2", e);

}

}

3.新建xposed配置

在src/main/目录下新建一个Assets Folder,并在Assets Folder中创建xposed_init文件,xposed_init文件中写入Main类的完成名称,例如:com.w.myhook.Main

4.在AndroidManifest.xml中声明xposed meta-data

<meta-data android:name="xposedmodule"

    android:value="true"/>

<meta-data android:name="xposedminversion"

    android:value="53"/>

<meta-data android:name="xposeddescription"

    android:value="myAppHook"/>

5.配置xposed库依赖

compileOnly'de.robv.android.xposed:api:82'

compileOnly'de.robv.android.xposed:api:82:sources'

6.编译运行

三,安装MyHook模块到VirtualXposed

1. 启动VirtualXposed后,点击底部的按钮 - 添加应用 - 选择MyHook - 点击安装 - 选择VirtualXposed

2,2.返回VirtualXposed首页,向上滑动打开抽屉,启动Xposed Installer,开启getmachook模块

3.重启VirtualXposed

不需要重启手机,只需要将VirtualXposed APP的进程重启即可

四,安装需要检测的APP

可以直接从手机SD卡中安装,也可以像第三步的第1步安装MyHook那样把需要检测的APP安装到VirtualXposed,这里就不再赘述了,注:安装APP后不需要再添加模块或重启VirtualXposed了

五,运行被检测的APP

返回VirtualXposed首页,向上滑动打开抽屉,点击运行需要检测的APP.

过滤日志关键字getmachook,就可以看到mac地址的调用情况和调用堆栈.

demo代码地址

https://github.com/crazydigua/getmachook

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容