使用python3编写的Android移动设备加固工具。
Android版本,PObY-A(隐私归你所有 - Android),带有恶意软件和设置扫描功能,已在Play商店上架,源代码可在此处获取。
AMDH旨在帮助自动扫描Android设备上已安装的应用程序,检测一些已知恶意软件,并保护隐私。
$ git clone https://github.com/SecTheTech/AMDH.git; cd AMDH
$ python3 -m venv amdh
$ source amdh/bin/activate
(amdh) $ pip install -r requirement.txt
注意:对于Windows,您需要指定ADB路径,或编辑"config/main.py"中的变量"adb_windows_path"。
警告:当使用-l参数并启用应用程序'-t e'时,将列出系统应用。卸载系统应用可能会破坏您的Android系统。建议对系统应用使用'disable'代替'uninstall'。
$ python amdh.py -h
usage: amdh.py [-h] [-d DEVICES] [-sS] [-sA] [-H] [-a ADB_PATH] [-t {e,d,3,s}] [-D APKS_DUMP_FOLDER]
[-rar] [-R] [-l] [-P] [-S SNAPSHOT_DIR] [-cS SNAPSHOT_REPORT] [-rS SNAPSHOT_TO_RESTORE] [-o OUTPUT_DIR]
Android移动设备加固
optional arguments:
-h, --help 显示此帮助信息并退出
-d DEVICES, --devices DEVICES
用逗号分隔的设备列表或"ALL"表示所有已连接设备
-sS 扫描系统设置
-sA 扫描已安装的应用程序
-H 加固系统设置 /!\ 开发者选项和ADB将被禁用 /!\
-a ADB_PATH, --adb-path ADB_PATH
ADB二进制文件的路径
-t {e,d,3,s} 应用程序类型:
e: 已启用的应用
d: 已禁用的应用
3: 第三方应用
s: 系统应用
-D APKS_DUMP_FOLDER, --dump-apks APKS_DUMP_FOLDER
将APK从设备转储到APKS_DUMP_FOLDER目录
-rar 移除管理员接收器:如果应用不是系统应用,则移除所有管理员接收器
需要扫描应用选项"-sA"
-R 对每个应用撤销所有危险权限
需要扫描应用选项"-sA"
-l 列出带编号的应用以禁用、卸载或分析
-P 列出当前用户进程
-S SNAPSHOT_DIR, --snapshot SNAPSHOT_DIR
将当前手机状态快照到JSON文件,并将应用备份到SNAPSHOT_DIR
-cS SNAPSHOT_REPORT, --cmp-snapshot SNAPSHOT_REPORT
将SNAPSHOT_REPORT与当前手机状态进行比较
-rS SNAPSHOT_TO_RESTORE, --restore-snapshot SNAPSHOT_TO_RESTORE
恢复SNAPSHOT_TO_RESTORE
-o OUTPUT_DIR, --output-dir OUTPUT_DIR
报告和日志的输出目录。默认:out
将已授予的权限与文件malware_perms.json中描述的权限进行比较。该文件包含三个节点:
仅恶意软件使用的权限是那些只被恶意软件使用的权限。分析的恶意软件来自以下仓库:
使用"aapt"命令转储权限。第二部分是转储合法应用(约400个应用)的权限。 仅恶意软件权限是那些被恶意软件使用但从未在分析的合法应用程序中出现的权限。
所有权限同时被恶意软件和合法应用使用。这些值表示恶意软件使用这些权限与合法应用相比的百分比。
快照可以帮助监控系统状态并备份手机数据:
扫描
(amdh)$ python amdh.py -d SERIAL1,SERIAL2,SERIAL3 -sA -o reports
在"reports"文件夹中为每个设备生成两个文件:
{
"com.package.name": {
"malware": true,
"permissions": {
"all_permissions": [
"com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE",
"com.google.android.c2dm.permission.RECEIVE",
"com.google.android.providers.gsf.permission.READ_GSERVICES",
"android.permission.WRITE_SYNC_SETTINGS",
"android.permission.RECEIVE_BOOT_COMPLETED",
"android.permission.AUTHENTICATE_ACCOUNTS"
],
"dangerous_perms": {
"android.permission.ACCESS_FINE_LOCATION": "此应用可以获取您的位置信息,基于GPS或网络位置源(如基站和Wi-Fi网络)。必须打开这些位置服务并在手机上可用,应用才能使用它们。这可能会增加电池消耗。",
"android.permission.READ_EXTERNAL_STORAGE": "允许应用读取您的SD卡内容。",
"android.permission.ACCESS_COARSE_LOCATION": "此应用可以基于网络源(如基站和Wi-Fi网络)获取您的位置信息。必须打开这些位置服务并在手机上可用,应用才能使用它们。",
"android.permission.CAMERA": "此应用可以随时拍照和录制视频。",
"android.permission.WRITE_EXTERNAL_STORAGE": "允许应用写入SD卡。"
},
"is_device_admin": false,
}
}
}
(amdh)$ python amdh.py -sS
在"out"文件夹(默认输出文件夹)中生成名为"SERIAL_report_settings.json"的报告。
加固
(amdh)$ python amdh.py -sA -R -rar
与扫描应用相同的报告,但增加了两个键:
"is_device_admin_revoked": true,
"revoked_dangerous_pemissions": "succeeded"
如果应用不是设备管理员,结果中将不会包含键
is_device_admin_revoked。
(amdh)$ python amdh.py -sS -H -o reports
在"reports"目录中生成报告和日志文件。
静态分析和多个应用卸载/禁用(交互式)
(amdh)$ python amdh.py -l
列出当前正在运行的用户进程
(amdh)$ python amdh.py -P -d SERIAL1,SERIAL2
快照
(amdh)$ python amdh.py -S out
[-] INFO: 开始 ...
解锁设备SERIAL并按回车键继续
[-] INFO: 完成
文件夹"out"将包含子文件夹"SERIAL_DATE-TIME"。其中DATE-TIME的格式为"YYYY-MM-DD-hh:mm:ss"。
快照比较
(amdh)$ python amdh.py -cS out/report.json
[-] INFO: 开始 ...
[-] INFO: 快照后安装的应用
{}
[-] INFO: 快照中存在的应用
{
"com.package.name1": {
"firstInstallTime": "2020-07-06 18:53:07",
"lastUpdateTime": "2020-07-06 18:53:07",
"grantedPermissions": [
"com.google.android.c2dm.permission.RECEIVE",
"android.permission.USE_CREDENTIALS",
"android.permission.MODIFY_AUDIO_SETTINGS",
"com.google.android.providers.gsf.permission.READ_GSERVICES",
"android.permission.MANAGE_ACCOUNTS",
"android.permission.NFC"
],
"deviceAdmin": false,
"apk": "com.package.name1.apk"
},
"com.package.name2": {
"firstInstallTime": "2020-07-10 23:57:53",
"lastUpdateTime": "2020-07-10 23:57:53",
"grantedPermissions": [
"android.permission.DOWNLOAD_WITHOUT_NOTIFICATION",
"com.google.android.c2dm.permission.RECEIVE",
"android.permission.USE_CREDENTIALS",
"android.permission.MODIFY_AUDIO_SETTINGS",
"org.thoughtcrime.securesms.ACCESS_SECRETS",
"android.permission.ACCESS_NOTIFICATION_POLICY",
"android.permission.CHANGE_NETWORK_STATE",
"android.permission.FOREGROUND_SERVICE",
"android.permission.WRITE_SYNC_SETTINGS"
],
"deviceAdmin": false,
"backup": "com.package.name2.ab",
"apk": "com.package.name2.apk"
}
}
[-] INFO: 快照后卸载的应用
{
"com.package.name3": {
"firstInstallTime": "2020-07-18 07:56:44",
"lastUpdateTime": "2020-07-18 07:56:44",
"grantedPermissions": [
"android.permission.INTERNET",
"android.permission.ACCESS_NETWORK_STATE"
],
"deviceAdmin": false,
"backup": "com.package.name3.ab",
"apk": "com.package.name3.apk"
}
}
[-] INFO: 快照后更改的设置
{
"global": [
"stay_on_while_plugged_in"
],
"secure": [],
"system": []
}
快照恢复:应用
(amdh)$ python amdh.py -d SERIAL -rS out/report.json
[-] INFO: 开始 ...
解锁设备SERIAL并按回车键继续
[-] INFO: 开始恢复
[-] INFO: 恢复完成
[-] INFO: 恢复报告
{
"apps": {
"com.package.name1": {
"install": "success",
"backup": "restored"
},
"com.package.name2": {
"install": "success",
"backup": "NOT FOUND"
},
"com.package.name3": {
"install": "success",
"backup": "restored"
}
}
}
(amdh) $ pip install pyinstaller
(amdh) $ pyinstaller --clean amdh.spec
输出二进制文件: dist/amdh.
感谢您对这个项目的兴趣!如果您有任何改进此工具的想法,请创建新的issue或发送pull request。