- Python取证教程
- 首页
- 简介
- Python安装
- Python概述
- 基本的取证应用
- 哈希函数
- 破解加密
- 虚拟化
- 网络取证
- Python模块
- Dshell和Scapy
- 搜索
- 索引
- Python图像处理库
- 移动取证
- 网络时间协议
- 多进程支持
- 内存与取证
- Linux中的取证
- 入侵指标
- 云实施
- Python取证有用资源
- Python取证 - 快速指南
- Python取证 - 有用资源
- Python取证 - 讨论
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中,密码被存储,其值在下面的截图中清晰可见。
JTAG适配器
一种称为JTAG(联合测试行动组)适配器的专用硬件可用于访问salt。类似地,Riff-Box或JIG-适配器也可以用于实现相同的功能。
使用从Riff-box获得的信息,我们可以找到加密数据的位 置,即salt。以下是规则:
搜索关联字符串“lockscreen.password_salt”。
字节表示salt的实际宽度,即其长度。
这就是实际搜索以获取存储的智能手机密码/PIN的长度。
这套规则有助于获取合适的salt数据。