npx claudepluginhub killvxk/cybersecurity-skills-zhThis skill uses the workspace's default tool permissions.
- 在调查期间从智能手机或平板电脑中提取证据时
Acquire and analyze mobile device data using Cellebrite UFED and open-source tools like ALEAPP, iLEAPP to extract communications, locations, and app artifacts for forensic investigations.
Guides acquisition and analysis of mobile device data using Cellebrite UFED and tools like ALEAPP/iLEAPP to extract communications, location, and app artifacts from iOS/Android.
Identifies and exploits insecure local data storage in Android/iOS mobile apps, including unencrypted databases, SharedPreferences, world-readable files, and Keychain/Keystore misuse. For OWASP M9 pentesting.
Share bugs, ideas, or general feedback.
# 关键:立即将设备置于飞行模式或法拉第袋中
# 防止远程擦除命令和额外数据变更
# 获取前记录设备状态
# 记录:品牌、型号、IMEI、序列号、操作系统版本、屏幕锁定状态
# 从各角度拍摄设备照片
# 对于 Android - 如可访问则启用 USB 调试
# 设置 > 开发者选项 > USB 调试 > 启用
# 对于 iOS - 信任取证工作站
# 设备提示时点击"信任此电脑"
# 若设备已锁定,记录锁定类型(PIN、图案、生物识别)
# Cellebrite UFED 可根据设备型号绕过某些锁定类型
# 安装开源工具作为替代方案
pip install aleapp # Android 日志事件和 Protobuf 解析器(Android Logs Events And Protobuf Parser)
pip install ileapp # iOS 日志事件和属性解析器(iOS Logs Events And Properties Parser)
sudo apt-get install libimobiledevice-utils # Linux 上的 iOS 获取工具
# === Cellebrite UFED 获取 ===
# 1. 启动 UFED 4PC 或连接 UFED Touch
# 2. 选择设备 > 自动识别设备型号
# 3. 选择提取类型:
# - 逻辑提取(Logical):应用数据、联系人、消息、通话记录(最快,数据最少)
# - 文件系统提取(File System):完整文件系统访问,包含数据库
# - 物理提取(Physical):包含已删除和未分配数据的逐位镜像(最完整)
# - 高级模式(Checkm8/GrayKey):针对已锁定 iOS 设备(特定型号)
# 4. 选择输出格式和目标位置
# 5. 开始提取
# === 使用 libimobiledevice 进行开源 iOS 获取 ===
# 列出已连接的 iOS 设备
idevice_id -l
# 获取设备信息
ideviceinfo -u <UDID>
# 创建 iOS 备份(逻辑获取)
idevicebackup2 backup --full /cases/case-2024-001/mobile/ios_backup/
# 加密备份(包含更多数据,如密码)
idevicebackup2 backup --full --password /cases/case-2024-001/mobile/ios_backup/
# === 使用 ADB 进行 Android 获取 ===
# 列出已连接设备
adb devices
# 完整备份(需要解锁屏幕)
adb backup -apk -shared -all -f /cases/case-2024-001/mobile/android_backup.ab
# 提取特定应用数据
adb shell pm list packages | grep -i "whatsapp\|telegram\|signal"
adb pull /data/data/com.whatsapp/ /cases/case-2024-001/mobile/whatsapp/
# 对于已 root 的 Android 设备 - 完整文件系统
adb shell "su -c 'dd if=/dev/block/mmcblk0 bs=4096'" | \
dd of=/cases/case-2024-001/mobile/android_physical.dd
# 对获取结果进行哈希验证
sha256sum /cases/case-2024-001/mobile/*.dd > /cases/case-2024-001/mobile/acquisition_hashes.txt
# === 使用 ALEAPP 分析 Android ===
# ALEAPP 处理 Android 文件系统提取结果
python3 -m aleapp \
-t fs \
-i /cases/case-2024-001/mobile/android_extraction/ \
-o /cases/case-2024-001/analysis/aleapp_report/
# ALEAPP 提取并报告的内容:
# - 通话记录、短信/彩信消息
# - Chrome 浏览历史和搜索记录
# - WiFi 连接历史
# - 已安装应用程序
# - Google 账户活动
# - 位置数据(Google 地图、照片)
# - WhatsApp、Telegram、Signal 消息
# - 应用使用统计
# - 设备设置和账户
# === 使用 iLEAPP 分析 iOS ===
python3 -m ileapp \
-t tar \
-i /cases/case-2024-001/mobile/ios_backup.tar \
-o /cases/case-2024-001/analysis/ileapp_report/
# iLEAPP 提取并报告的内容:
# - iMessage 和短信消息
# - Safari 浏览历史
# - WiFi 和蓝牙连接
# - 健康数据和位置历史
# - 应用使用情况(KnowledgeC)
# - 含 EXIF/GPS 数据的照片
# - 备忘录、日历、提醒事项
# - 钥匙串数据(如可解密)
# - 屏幕时间数据
# 从 Android 提取 WhatsApp 消息
python3 << 'PYEOF'
import sqlite3
import os
# WhatsApp 数据库位置
db_path = "/cases/case-2024-001/mobile/android_extraction/data/data/com.whatsapp/databases/msgstore.db"
if os.path.exists(db_path):
conn = sqlite3.connect(db_path)
cursor = conn.cursor()
# 提取消息
cursor.execute("""
SELECT
key_remote_jid AS contact,
CASE WHEN key_from_me = 1 THEN 'SENT' ELSE 'RECEIVED' END AS direction,
data AS message_text,
datetime(timestamp/1000, 'unixepoch') AS msg_time,
media_mime_type,
media_size
FROM messages
WHERE data IS NOT NULL
ORDER BY timestamp DESC
LIMIT 1000
""")
with open('/cases/case-2024-001/analysis/whatsapp_messages.csv', 'w') as f:
f.write("contact,direction,message,timestamp,media_type,media_size\n")
for row in cursor.fetchall():
f.write(','.join(str(x) for x in row) + '\n')
conn.close()
print("WhatsApp messages extracted successfully")
PYEOF
# 从 iOS sms.db 提取 iMessage/SMS
python3 << 'PYEOF'
import sqlite3
db_path = "/cases/case-2024-001/mobile/ios_extraction/HomeDomain/Library/SMS/sms.db"
conn = sqlite3.connect(db_path)
cursor = conn.cursor()
cursor.execute("""
SELECT
h.id AS phone_number,
CASE WHEN m.is_from_me = 1 THEN 'SENT' ELSE 'RECEIVED' END AS direction,
m.text,
datetime(m.date/1000000000 + 978307200, 'unixepoch') AS msg_time,
m.service
FROM message m
JOIN handle h ON m.handle_id = h.ROWID
ORDER BY m.date DESC
""")
with open('/cases/case-2024-001/analysis/imessage_sms.csv', 'w') as f:
f.write("phone,direction,text,timestamp,service\n")
for row in cursor.fetchall():
f.write(','.join(str(x) for x in row) + '\n')
conn.close()
PYEOF
# 从照片提取 GPS 数据
pip install pillow
python3 << 'PYEOF'
from PIL import Image
from PIL.ExifTags import TAGS, GPSTAGS
import os, json
def get_gps(exif_data):
gps_info = {}
for key, val in exif_data.items():
decoded = GPSTAGS.get(key, key)
gps_info[decoded] = val
if 'GPSLatitude' in gps_info and 'GPSLongitude' in gps_info:
lat = gps_info['GPSLatitude']
lon = gps_info['GPSLongitude']
lat_val = lat[0] + lat[1]/60 + lat[2]/3600
lon_val = lon[0] + lon[1]/60 + lon[2]/3600
if gps_info.get('GPSLatitudeRef') == 'S': lat_val = -lat_val
if gps_info.get('GPSLongitudeRef') == 'W': lon_val = -lon_val
return lat_val, lon_val
return None
locations = []
photo_dir = "/cases/case-2024-001/mobile/ios_extraction/CameraRollDomain/Media/DCIM/"
for root, dirs, files in os.walk(photo_dir):
for fname in files:
if fname.lower().endswith(('.jpg', '.jpeg', '.heic')):
try:
img = Image.open(os.path.join(root, fname))
exif = img._getexif()
if exif and 34853 in exif:
coords = get_gps(exif[34853])
if coords:
locations.append({'file': fname, 'lat': coords[0], 'lon': coords[1]})
except Exception:
pass
with open('/cases/case-2024-001/analysis/photo_locations.json', 'w') as f:
json.dump(locations, f, indent=2)
print(f"找到 {len(locations)} 张带地理标记的照片")
PYEOF
# 从 Android 提取位置历史(Google 位置历史)
# 文件:/data/data/com.google.android.gms/databases/lbs.db
# 或导出的 Google Takeout 位置数据
| 概念 | 描述 |
|---|---|
| 逻辑提取(Logical extraction) | 通过设备 API 提取可访问的用户数据(联系人、消息、照片) |
| 文件系统提取(File system extraction) | 完整访问设备文件系统,包括应用数据库 |
| 物理提取(Physical extraction) | 包含已删除和未分配数据的设备存储逐位复制 |
| UFED | 通用取证提取设备(Universal Forensic Extraction Device)—— Cellebrite 的旗舰获取平台 |
| ADB | Android 调试桥(Android Debug Bridge),用于与 Android 设备通信 |
| KnowledgeC | iOS 数据库,记录详细的应用程序和设备使用模式 |
| SQLite 数据库 | 移动应用数据的主要存储格式(消息、联系人、历史记录) |
| Checkm8 | 基于硬件的 iOS 漏洞利用,可对 A5-A11 设备执行提取 |
| 工具 | 用途 |
|---|---|
| Cellebrite UFED | 商业移动设备获取和分析平台 |
| Cellebrite Physical Analyzer | 移动设备提取结果深度分析 |
| ALEAPP | 开源 Android 制品解析器和报告生成器 |
| iLEAPP | 开源 iOS 制品解析器和报告生成器 |
| libimobiledevice | 开源 iOS 通信库 |
| Magnet AXIOM | 商业移动端和计算机取证平台 |
| MEAT | 移动证据获取工具包(Mobile Evidence Acquisition Toolkit) |
| ADB | Android 调试桥,用于设备交互和数据提取 |
场景 1:刑事通信调查 使用 UFED 物理提取获取设备,解密即时通讯数据库,提取 WhatsApp/Telegram/Signal 对话,从 WAL 文件中恢复已删除消息,建立通信时间线,导出供法律诉讼使用。
场景 2:员工通过私人手机窃取数据 在员工同意下执行逻辑提取,分析企业邮件和云存储应用数据,检查机密文件截图,审查文件传输应用活动,查看浏览器历史中的云上传记录。
场景 3:失踪人员位置追踪 提取 Google 位置历史中的位置数据,解析照片中的 GPS 数据,分析 WiFi 连接历史以确定最后已知位置,检查健身应用数据获取移动轨迹,查看即时通讯应用中的最后通信记录。
场景 4:儿童剥削调查 物理提取保留所有数据,包括已删除内容;对所有图像与 NCMEC/ICSE 数据库进行哈希比对;提取通信记录;从未分配空间恢复已删除媒体;严格记录证据保管链以备起诉。
移动取证摘要:
设备: Samsung Galaxy S23 Ultra(SM-S918B)
操作系统: Android 14,One UI 6.0
IMEI: 353456789012345
提取方式: 物理提取(通过 Cellebrite UFED)
耗时: 45 分钟
已提取数据:
联系人: 1,234 条
通话记录: 5,678 条
短信/彩信: 3,456 条
WhatsApp 消息: 12,345 条(234 条已删除已恢复)
Telegram 消息: 2,345 条
照片/视频: 4,567 个(345 个含地理标记)
浏览历史: 2,345 条 URL
WiFi 网络: 67 个已保存连接
已安装应用: 145 个
关键发现:
- 已恢复与嫌疑人的已删除 WhatsApp 对话
- 23 张在案发现场拍摄的含地理标记照片
- 与调查对象相关的浏览器搜索记录
- 事件期间使用了 Signal 应用(已加密,部分恢复)
报告:
ALEAPP 报告: /analysis/aleapp_report/index.html
消息导出: /analysis/whatsapp_messages.csv
位置数据: /analysis/photo_locations.json