Python取证移动取证


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

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

取证分析


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

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

人工考试


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

Android 存储密码的加盐 SHA1-hashsum 和 MD5-hashsum。这些密码可以在下面的代码中处理。

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

破解密码是不可行的 字典攻击 因为哈希密码存储在 盐文件 . This salt 是 64 位随机整数的十六进制表示字符串。很容易访问 salt by using 扎根的智能手机 or JTAG 适配器 .

扎根的智能手机


文件的转储 /data/system/password.key 存储在 SQLite 数据库中 lockscreen.password_salt 钥匙。在下面 设置.db ,密码被存储,值在以下屏幕截图中清晰可见。

Rooted Smartphone

JTAG 适配器


称为 JTAG(联合测试行动组)适配器的特殊硬件可用于访问 salt .同样,一个 Riff-Box or a 夹具适配器 也可以用于相同的功能。

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

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

  • 字节表示盐的实际宽度,即它的 length .

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

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

JTAG Adapter