| name | performing-mobile-device-forensics-with-cellebrite |
| description | 使用 Cellebrite UFED 和开源工具获取和分析移动设备数据,提取通信记录、位置数据和应用程序制品。 |
| domain | cybersecurity |
| subdomain | digital-forensics |
| tags | ["forensics","mobile-forensics","cellebrite","smartphone-analysis","ios-forensics","android-forensics"] |
| version | 1.0 |
| author | mahipal |
| license | Apache-2.0 |
使用 Cellebrite 执行移动设备取证
适用场景
- 在调查期间从智能手机或平板电脑中提取证据时
- 需要从移动设备中恢复已删除的消息、通话记录和位置数据时
- 在涉及即时通讯应用通信的调查中
- 分析移动应用数据以寻找犯罪活动证据时
- 涉及员工移动设备滥用的企业调查中
前置条件
- Cellebrite UFED Touch/4PC 或 UFED Physical Analyzer(需授权)
- 替代开源工具:ALEAPP、iLEAPP、MEAT、libimobiledevice
- 目标设备适用的线缆和转接头
- 法拉第袋(Faraday bag)用于隔离设备网络信号
- 法律授权(搜查令、当事人同意或企业政策)
- 了解 iOS 和 Android 文件系统结构
工作流程
步骤 1:准备设备并隔离
pip install aleapp
pip install ileapp
sudo apt-get install libimobiledevice-utils
步骤 2:执行设备获取
idevice_id -l
ideviceinfo -u <UDID>
idevicebackup2 backup --full /cases/case-2024-001/mobile/ios_backup/
idevicebackup2 backup --full --password /cases/case-2024-001/mobile/ios_backup/
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/
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
步骤 3:使用 ALEAPP(Android)或 iLEAPP(iOS)分析
python3 -m aleapp \
-t fs \
-i /cases/case-2024-001/mobile/android_extraction/ \
-o /cases/case-2024-001/analysis/aleapp_report/
python3 -m ileapp \
-t tar \
-i /cases/case-2024-001/mobile/ios_backup.tar \
-o /cases/case-2024-001/analysis/ileapp_report/
步骤 4:提取通信和即时消息数据
python3 << 'PYEOF'
import sqlite3
import os
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
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")
row cursor.fetchall():
f.write(.(str(x) x row) + )
conn.close()
PYEOF
步骤 5:提取位置数据并生成报告
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
关键概念
| 概念 | 描述 |
|---|
| 逻辑提取(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