首页
社区
课程
招聘
[原创]Android App隐私合规检测系统定制
发表于: 2024-12-11 19:18 40030

[原创]Android App隐私合规检测系统定制

2024-12-11 19:18
40030

       市面上的大部分的合规检测工具是使用Frida或Xposed等Hook框架进行Hook注入代码,通常会带来额外的性能开销,包括更高的延迟和资源消耗,Hook过程中的错误或与应用的不兼容可能导致应用崩溃或不稳定。直接修改AOSP源码能够实现对操作系统所有层级(包括内核、系统服务、框架等)的深度控制和集成,实现从底层到应用层的全面隐私合规检测,系统的稳定性和可靠性相对较高,不会因运行时的动态代码注入带来不确定性的问题。
镜像下载地址:85cK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6S2P5h3I4Z5k6i4S2Q4x3V1k6Z5k6h3N6#2K9g2)9#2k6Y4u0G2L8b7`.`.

基于Android-10.0.0_r2版本源码进行的修改,并编译了适配Pixel 2 XL和Pixel 3机型的镜像,具体改动位置和检测点如下表所示:

准备一台谷歌Pixel 2 XL或者Pixel 3型号的手机,下载提供的镜像进行刷机即可,具体步骤如下:

序号 文件所在路径 监测内容 目标函数
1 frameworks/base/core/java/android/app/ApplicationPackageManager.java 权限申请 int checkPermission(String permName, String pkgName)
2 frameworks/base/core/java/android/app/ApplicationPackageManager.java 获取APP安装列表 List
3 frameworks/base/core/java/android/app/ApplicationPackageManager.java 获取APP安装列表 List
4 frameworks/base/core/java/android/app/ActivityManager.java 正在运行的进程 List
5 frameworks/base/core/java/android/app/ActivityManager.java 正在运行的服务 PendingIntent getRunningServiceControlPanel(ComponentName service)
6 frameworks/base/core/java/android/app/admin/DevicePolicyManager.java 获取Mac地址 String getWifiMacAddress(ComponentName admin)
7 frameworks/base/core/java/android/bluetooth/BluetoothAdapter.java 获取蓝牙名称 String getName()
8 frameworks/base/core/java/android/bluetooth/BluetoothDevice.java 获取蓝牙Mac地址 String getAddress()
9 frameworks/base/core/java/android/bluetooth/BluetoothDevice.java 获取蓝牙名称 String getName()
10 frameworks/base/core/java/android/content/ClipboardManager.java 获取剪切板信息 void setPrimaryClip(ClipData clip)
11 frameworks/base/core/java/android/content/ClipboardManager.java 监测剪切板信息 boolean hasPrimaryClip()
12 frameworks/base/core/java/android/content/ClipboardManager.java 设置剪切板信息 void setPrimaryClip(ClipData clip)
13 frameworks/base/core/java/android/content/Camera.java 打开摄像头 Camera open(int cameraId)
14 frameworks/base/core/java/android/hardware/camera2/CameraManager.java 打开摄像头 openCameraDeviceUserAsync
15 frameworks/base/core/java/android/hardware/SensorManager.java 获取传感器信息 List
16 frameworks/base/core/java/android/os/Build.java 获取设备序列号 String getSerial()
17 frameworks/base/core/java/android/provider/Settings.java 获取Android_id String getString(ContentResolver resolver, String name)
18 frameworks/base/core/java/android/telephony/TelephonyManager.java 获取IMEI String getDeviceId()
19 frameworks/base/core/java/android/telephony/TelephonyManager.java 获取IMEI String getImei(int slotIndex)
20 frameworks/base/core/java/android/telephony/TelephonyManager.java 获取MEID String getMeid(int slotIndex)
21 frameworks/base/core/java/android/telephony/TelephonyManager.java 获取MCC/MNC String getNetworkOperatorName(int subId)
22 frameworks/base/core/java/android/telephony/TelephonyManager.java 获取当前位置信息 CellLocation getCellLocation()
23 frameworks/base/location/java/android/location/Location.java 获取纬度信息 double getLatitude()
24 frameworks/base/location/java/android/location/Location.java 获取经度信息 double getLongitude()
25 frameworks/base/location/java/android/location/LocationManager.java 获取最后已知位置 Location getLastKnownLocation(@NonNull String provider)
26 frameworks/base/location/java/android/location/LocationManager.java 获取最后已知位置 Location getLastLocation()
27 frameworks/base/telephony/java/android/telephony/gsm/GsmCellLocation.java 获取基站cid信息 int getCid()
28 frameworks/base/telephony/java/android/telephony/gsm/GsmCellLocation.java 获取基站lac信息 int getLac()
29 frameworks/base/core/java/android/telephony/TelephonyManager.java 获取SIM卡国际代码 String getSimCountryIsoForPhone(int phoneId)
30 frameworks/base/core/java/android/telephony/TelephonyManager.java 获取IMSI/ICCID String getSimSerialNumber(int subId)
31 frameworks/base/core/java/android/telephony/TelephonyManager.java 获取IMSI String getSubscriberId(int subId)
32 frameworks/base/core/java/android/telephony/TelephonyManager.java 获取电话号码 String getLine1Number(int subId)
33 frameworks/base/core/java/android/telephony/TelephonyManager.java 获取IMSI int getSubscriptionId()
34 frameworks/base/core/java/android/telephony/TelephonyManager.java 检测sim卡是否可用 ServiceState getServiceStateForSubscriber(int subId)
35 frameworks/base/core/java/android/os/SystemProperties.java 获取系统属性 String get(@NonNull String key)
36 frameworks/base/core/java/android/os/SystemProperties.java 设置系统属性 void set(@NonNull String key, @Nullable String val)
37 frameworks/base/wifi/java/android/net/wifi/WifiInfo.java 获取附近Wifi列表 List
38 frameworks/base/wifi/java/android/net/wifi/WifiInfo.java 获取Mac地址 String[] getFactoryMacAddresses()
# 进入到bootloader模式
adb reboot bootloader
 
# 设置环境变量,下载的镜像存储路径
export ANDROID_PRODUCT_OUT='/Users/xxxx/xxx/taimen_rom'
 
# 刷机
fastboot flashall -w
 
# 如果刷机过程中,提示存储空间不够,可以指定刷机文件系统分区大小
fastboot flashall -S 50M -w
# 进入到bootloader模式
adb reboot bootloader
 
# 设置环境变量,下载的镜像存储路径
export ANDROID_PRODUCT_OUT='/Users/xxxx/xxx/taimen_rom'
 
# 刷机
fastboot flashall -w
 
# 如果刷机过程中,提示存储空间不够,可以指定刷机文件系统分区大小

[培训]Windows内核深度攻防:从Hook技术到Rootkit实战!

最后于 2025-7-4 10:46 被FIGHTING安编辑 ,原因: 增加功能+新机型适配
收藏
免费 5
支持
分享
最新回复 (5)
雪    币: 3261
活跃值: (12385)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
TQL
2024-12-12 09:17
0
雪    币: 125
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
难道也是某个大厂大佬,应对职业危机来宣传吗?
2024-12-12 11:43
0
雪    币: 1565
活跃值: (2457)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
 不错.
2024-12-12 15:01
0
雪    币: 138
活跃值: (822)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
看到基本都是基于java层做的检测。可能还不够,如果对方通过纯c代码(非反射java)去进行获取,可能就会遗漏。本身这是一个检测与反检测的过程。
2024-12-20 10:07
0
雪    币: 1235
活跃值: (5947)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
6

刚发现 好像一直没有放镜像下载地址:140K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6S2P5h3I4Z5k6i4S2Q4x3V1k6Z5k6h3N6#2K9g2)9#2k6Y4u0G2L8b7`.`.

最后于 2025-7-4 10:48 被FIGHTING安编辑 ,原因:
2025-7-4 10:45
0
游客
登录 | 注册 方可回帖
返回