安卓手机的数据销毁方法

2017-04-05 19:10 #旧文章

警告

本文内容偏理论性,需要一定的专业知识。
数据销毁具有一定的风险性,本文所述方法不保证适用于所有安卓手机,不当的操作可能导致系统崩溃甚至产生更严重的后果,请谨慎行事。

小心

免责声明
您知道数据销毁的风险性,您的行为造成的一切后果由您自行承担。

前言

在手机更新换代的步伐日渐加快的情况下,许多人选择出售旧手机来减少购买新手机带来的支出,殊不知在出售旧手机时个人隐私可能随之泄漏。有人说:“我把手机恢复出厂设置不就可以了吗?”明确一下,不可以。

我曾在小学的时候通过 Ghost 重装系统,却选择了恢复到硬盘,结果我的电脑上只剩下 C: 盘了。怎么办,我也很绝望啊。但在 FinalData 的帮助下,我找回了 E: 盘中所有的照片。

没错,我的照片全部被找了回来,同理,手机上被删除的数据也可以被恢复。

数据恢复的原理

在我们删除文件时,数据真的被删掉了吗?显然没有。

硬盘中有一个分区表,分区表定义了硬盘中那个分区占有那一块数据区域,每个分区都会有且仅有一个特定的文件系统来管理文件。大多数文件都使用了下图的想法来管理文件:

在删除文件时,文件系统实际上只取消了对文件数据的索引,而文件数据依然留在硬盘上,这就是为什么被删除的文件可以被恢复出来。

如何真正地抹掉数据

如何销毁数据?通过对文件系统的了解我们可以产生以下想法:

想法一:向文件内覆写数据

基于覆盖数据的想法,我么可以试图向原文件中写入与原文件大小相同的随机数据,大小相同可以最大程度地防止随机数据被写到原数据区域以外的地方。然而不同的文件系统之间存在行为差异,所以这个方法并不能保证原数据一定被覆盖。

想法二:格式化文件系统并写入大文件

由想法一引申,我们可以先把文件系统格式化再向文件系统内放入若干个大文件直至文件系统被填满,然后再把这些文件删除。同样的,由于不同文件系统的行为差异,这一招也不能确保数据被清理干净。

想法三:向分区内写入随机数据并重建文件系统

由于一个分区内有且仅有一个文件系统,那么我们可以通过向分区内写入随机数据来达到覆盖数据的目的。由于随机数据会破坏文件系统,所以我们还要重建文件系统。

该方法理论上对所有文件系统有效。

安卓上想法三的实现

首先,你需要向手机中刷入一个满足以下条件的 recovery,例如 TWRP

  1. 可以通过 adb shell 执行命令
  2. 有 root 权限
  3. 可以对分区进行格式化

同时,你还需要一台安装了 adb 的电脑以及一条 USB 线。

准备好后,我们重启手机进入 recovery 并在电脑上执行 adb shell 命令进入 revovery 的命令行环境。

本文可能会延期,因为我刚刚不知道怎么就把手机给清空了,我现在还在忙着恢复数据
我回来了,然而那些数据找不回来了,因为那种清空是通过删除命令进行删除的,不是直接格式化,所以我没法把文件夹结构恢复回来,只能恢复文件内容,所以我干脆换了个系统。

OK,继续正题。

进入 adb shell 了以后,我们先执行 whoami 命令确认我们现在是 root,然后我们执行 df 命令查看分区及挂载点:

Terminal window
root@:/ # df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/block/mmcblk0p30 2539312 804152 1735160 32% /system
/dev/block/mmcblk0p38 56487728 48910060 7577668 87% /data
/dev/block/mmcblk0p31 253920 196 253724 1% /cache
/dev/block/mmcblk0p32 28144 1348 26796 5% /persist

我们可以看到 /data 目录对应的分区设备是 /dev/block/mmcblk0p38,所以我们可以用 dd 命令将这个分区用 00 填充:

Terminal window
root@:/ # dd if=/dev/zero of=/dev/block/mmcblk0p38

然后执行。这个命令会执行很长时间,去喝杯茶吧。

小心

这个命令会使文件系统严重损坏,所有数据不可恢复!请谨慎。

在这个命令执行完后,这个分区上不存在任何的文件系统,所以我们要重建文件系统:

Terminal window
root@:/ # mke2fs -t ext3 /dev/block/mmcblk0p38

这篇文章就到这里为止吧。离高考还有 54 天。