Python 取证 - 移动取证


对硬盘等标准计算机硬件的取证调查和分析已发展成为一门稳定的学科,并借助分析非标准硬件或瞬态证据的技术进行跟踪。

尽管智能手机越来越多地用于数字调查,但它们仍然被认为是非标准的。

法医分析

取证调查搜索数据,例如从智能手机接听的电话或拨打的号码。它可以包括短信、照片或任何其他犯罪证据。大多数智能手机都具有使用密码或字母数字字符的屏幕锁定功能。

在这里,我们将通过一个例子来展示Python如何帮助破解锁屏密码并从智能手机中检索数据。

手工检查

Android 支持使用 PIN 码或字母数字密码进行密码锁定。两个密码的长度都必须在 4 到 16 个数字或字符之间。智能手机的密码存储在 Android 系统中/data/system中一个名为password.key的特殊文件中。

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;
}

由于散列密码存储在盐文件中,因此借助字典攻击来破解密码是不可行的。该是一串 64 位随机整数的十六进制表示形式。使用已 Root 的智能手机JTAG 适配器可以轻松访问

已root的智能手机

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

已root的智能手机

JTAG适配器

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

利用从 Riff-box 获得的信息,我们可以找到加密数据的位置,即salt。以下是规则 -

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

  • 该字节表示 salt 的实际宽度,即它的length

  • 这是实际搜索以获取智能手机存储的密码/PIN 码的长度。

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

JTAG适配器