Python Forensics 简明教程
Python Forensics - Mobile Forensics
对标准计算机硬件(如硬盘)的取证调查和分析已发展成为一门稳定的学科,并遵循分析非标准硬件或瞬态证据的技术。
尽管智能手机越来越多地用于数字调查,但它们仍被视为非标准的。
Forensic Analysis
法医调查会搜索来自智能手机的诸如接听电话或拨出电话号码等数据。它可能包括文本信息、照片或任何其他危害证据。大多数智能手机都有使用密码或字母数字字符的屏幕锁定功能。
在这里,我们将通过一个示例来说明如何使用 Python 破解屏幕锁定密码以便从智能手机提取数据。
Manual Examination
Android 支持使用 PIN 码或字母数字密码的密码锁定。这两个密码的限制都要求介于 4 到 16 位数字或字符之间。智能手机的密码保存在 Android 系统中的一个名为 password.key 的特殊文件中,位于 /data/system 。
Android 会存储密码的 SHA1 盐渍哈希和 MD5 哈希。可以处理以下代码中的这些密码。
public byte[] passwordToHash(String password) {
if (password == null) {
return null;
}
String algo = null;
byte[] hashed = null;
try {
byte[] saltedPassword = (password + getSalt()).getBytes();
byte[] sha1 = MessageDigest.getInstance(algo = "SHA-1").digest(saltedPassword);
byte[] md5 = MessageDigest.getInstance(algo = "MD5").digest(saltedPassword);
hashed = (toHex(sha1) + toHex(md5)).getBytes();
} catch (NoSuchAlgorithmException e) {
Log.w(TAG, "Failed to encode string because of missing algorithm: " + algo);
}
return hashed;
}
无法借助 dictionary attack 破解密码,因为哈希密码存储在 salt file 中。此 salt 是 64 位随机整数的十六进制表示的字符串。可以通过 Rooted Smartphone 或 JTAG Adapter 轻松访问 salt 。