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 SmartphoneJTAG Adapter 轻松访问 salt

Rooted Smartphone

/data/system/password.key 文件的转储保存在 SQLite 数据库中,其键为 lockscreen.password_salt 。在 settings.db 下存储密码,并且值在以下屏幕截图中清晰可见。

rooted smartphone

JTAG Adapter

可以使用称为 JTAG(联合测试动作组)适配器的特殊硬件来访问 salt 。类似地,也可以使用 Riff-BoxJIG-Adapter 来执行相同的功能。

使用从 Riff 盒获取的信息,我们可以找到加密数据的位置,即 salt 。以下是规则:

  1. 搜索关联的字符串“lockscreen.password_salt”。

  2. 字节表示盐的实际宽度,即其 length

  3. 这是实际搜索的长度,获取智能手机的存储的密码/pin。

这组规则有助于获取适当的盐数据。

jtag adapter