Python取证 - 移动取证



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

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

取证分析

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

这里,我们将举一个例子来说明Python如何帮助破解屏幕锁定密码以从智能手机检索数据。

手动检查

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

由于哈希密码存储在salt文件中,因此使用字典攻击来破解密码是不可行的。这个salt是64位随机整数的十六进制表示字符串。使用已ROOT的智能手机JTAG适配器很容易访问salt

已ROOT的智能手机

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

Rooted Smartphone

JTAG适配器

一种称为JTAG(联合测试行动组)适配器的专用硬件可用于访问salt。类似地,Riff-BoxJIG-适配器也可以用于实现相同的功能。

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

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

  • 字节表示salt的实际宽度,即其长度

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

这套规则有助于获取合适的salt数据。

JTAG Adapter
广告