Python 取证 - 移动设备取证

  • 简述

    对硬盘等标准计算机硬件的取证调查和分析已经发展成为一门稳定的学科,并借助技术分析非标准硬件或临时证据。
    尽管智能手机越来越多地用于数字调查,但它们仍然被认为是非标准的。
  • 取证分析

    取证调查从智能手机搜索数据,例如接听电话或拨打的号码。它可以包括短信、照片或任何其他有罪的证据。大多数智能手机都具有使用密码或字母数字字符的屏幕锁定功能。
    在这里,我们将通过一个示例来展示 Python 如何帮助破解屏幕锁定密码以从智能手机中检索数据。
  • 手动检查

    Android 支持使用 PIN 码或字母数字密码进行密码锁定。两个密码的限制都必须在 4 到 16 个数字或字符之间。智能手机的密码存储在 Android 系统中的一个特殊文件中,称为password.key/data/system.
    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;
    }
    
    字典破解密码是不可行的因为哈希密码存储在盐文件. salt是 64 位随机整数的十六进制表示字符串。很容易访问salt通过使用Rooted Smartphone要么JTAG Adapter.
  • root智能手机

    文件的转储/data/system/password.key存储在 SQLite 数据库中lockscreen.password_salt key。在下面settings.db,密码被存储,值在以下屏幕截图中清晰可见。
    ROOT的智能手机
  • JTAG 适配器

    称为 JTAG(联合测试行动组)适配器的特殊硬件可用于访问salt. 同样,一个Riff-Box或一个JIG-Adapter也可以用于相同的功能。
    使用从 Riff-box 获得的信息,我们可以找到加密数据的位置,即salt. 以下是规则 -
    • 搜索关联的字符串“lockscreen.password_salt”。
    • 字节表示盐的实际宽度,即它的length.
    • 这是实际搜索以获取存储的智能手机密码/pin 的长度。
    这些规则集有助于获取适当的盐数据。
    JTAG 适配器