注册 登录
编程论坛 VB6论坛

[反取证] VB6文件覆写技术,二进制全0全1覆写(反取证技术)

yuma 发布于 2022-08-27 08:48, 2775 次点击
由于Byte 0 的二进制是 0000 0000 ,而Byte 255 的二进制是 1111 1111  ,因此可以实现用字节进行文件二进制全0和全1填充,实现文件覆写的目的。进行35次的全0和全1填充,可有效的防范电子取证技术中的实验室数据恢复。

程序代码:
Function Overwrite(FileName As String) '要覆写的文件
    Dim x As Long, y As Long
    Kill Left(FileName, InStrRev(FileName, "\")) & "0"
   
    '二进制全0和全1覆写文件内容
    For x = 1 To 35  '覆写35x2次
        Dim sum As Long, n As Long, fxByte As Byte
        n = 0
        Open FileName For Binary Access Write As #1
        For sum = 1 To FileLen(FileName)
            n = n + 1
            'MsgBox n  '初始值为1
            fxByte = 255
            Put #1, n, fxByte  '二进制全1覆写1 2 3 ....
        Next sum
        Close #1
        n = 0
        Open FileName For Binary Access Write As #1
        For sum = 1 To FileLen(FileName)
            n = n + 1
            'MsgBox n  '初始值为1
            fxByte = 0
            Put #1, n, fxByte  '二进制全0覆写1 2 3 ....
        Next sum
        Close #1
        DoEvents '释放系统控制权
    Next
   
    '覆写文件名
    For y = 1 To 35  '覆写35x2次
        If Dir(FileName) <> "" Then Name FileName As Left(FileName, InStrRev(FileName, "\")) & "0"
        Name Left(FileName, InStrRev(FileName, "\")) & "0" As Left(FileName, InStrRev(FileName, "\")) & "1"
        Name Left(FileName, InStrRev(FileName, "\")) & "1" As Left(FileName, InStrRev(FileName, "\")) & "0"
    Next
    Kill Left(FileName, InStrRev(FileName, "\")) & "0"
End Function

Private Sub Form_Load()
Me.Hide
Overwrite ("C:\Users\Admin\Desktop\1.php")
End Sub


程序代码:
Private Sub Form_Load()
Dim x As Long, FileName As String

FileName = "1.exe"  '要覆写的文件

For x = 1 To 35  '覆写35x2次
Call qyfx(FileName) '二进制全1覆写
Call qlfx(FileName) '二进制全0覆写
DoEvents '释放系统控制权
Next
MsgBox "任务完成!"
End Sub

Function qlfx(FileName) '二进制全0覆写1 2 3 ....
Dim sum As Long, n As Long, fxByte As Byte
n = 0
Open "1.exe" For Binary Access Write As #1
For sum = 1 To FileLen(FileName)
n = n + 1
'MsgBox n  '初始值为1
fxByte = 0
Put #1, n, fxByte  '二进制全0覆写1 2 3 ....
Next sum
Close #1
End Function

Function qyfx(FileName) '二进制全1覆写1 2 3 ....
Dim sum As Long, n As Long, fxByte As Byte
n = 0
Open "1.exe" For Binary Access Write As #1
For sum = 1 To FileLen(FileName)
n = n + 1
'MsgBox n  '初始值为1
fxByte = 255
Put #1, n, fxByte  '二进制全1覆写1 2 3 ....
Next sum
Close #1
End Function


[此贴子已经被作者于2022-8-27 08:54编辑过]

17 回复
#2
风吹过b2022-08-27 09:37
想法是不错的。
但你要注意一下,文件存储空间是怎么分配的,
分配给当前 文件的,你重写时,并不一定永远是分配给当前文件的,特别是 SSD 上尤其明显。

#3
yuma2022-08-27 11:21
直接对文件内容重写,如果文件内容在磁盘中不是连续存放的,重写也不会受到影响。

如果有影响的话,文件内容是重写不完整的。在WinHex软件下是可以观察到的。
#4
yuma2022-08-27 11:29
如果直接对磁盘重写0和1来覆盖指定的文件,会出现你说的那种情况。
#5
风吹过b2022-08-27 20:12
需要底层直接对 扇区 或块 直接读写,这个是可以的,就像WinHex 里那样直接读到扇区,写入扇区 ,那样是可以的。

我只知道 FAT 大体的形式
文件保存在磁盘上,占用的扇区是写在分配表中,但占用的顺序是生成一个链,首地址写在目录记录里,其他扇区的地址是写在前一个扇区结尾。形成一个单向链表。
重写时,我不知道VB会不会重置所有的链单元,然后重新申请新链。也许不会,对于磁盘来说,这样的结果是我们期待。
如果是申请新扇区,会导致原的扇区在分配表中标记为未使用,但扇区内容不会去修改,直接下一次IO申请到这个扇区时,直接覆写。

但对于 SSD 时,就不同了,SSD 读 和 写 是二个完全不兼容的操作,写之前,需要把这个块清零,而清零的操作是很慢的操作,所以SSD都支持 TRIM指令,
这个指令的含义是把需要清零的块标记出来,由主控后台操作慢慢的去清零。需要写的数据去写到一个新的块中。。
所以,反删除软件 针对 SSD 来说是没的意义的,原因也在这,主控在后台慢慢清零,哪怕找到了首链,但反删除出来的全是乱码或全是零(这种情况更大一些)。

#6
yuma2022-08-27 20:46
我看过很多电子反取证博硕论文、书籍,自有分寸。

你可能没有看过多少电子反取证博硕论文。论文上和你说的不一样。
#7
yuma2022-08-27 20:56
35次的全0和全1覆写,目的是为了将磁盘的磁场拉高拉低,让磁盘的磁场趋于平均化水平,防止“剩磁恢复设备”进行基于磁场的数据恢复。

博硕论文有讲到这些。

因为科学家发现,覆写20多次仍然可以恢复出数据,覆写次数被提高到了35次。这就是“35次随机覆写擦除”算法的理论基础。
#8
yuma2022-08-27 21:14
以下是引用风吹过b在2022-8-27 20:12:31的发言:

需要底层直接对 扇区 或块 直接读写,这个是可以的,就像WinHex 里那样直接读到扇区,写入扇区 ,那样是可以的。

我只知道 FAT 大体的形式
文件保存在磁盘上,占用的扇区是写在分配表中,但占用的顺序是生成一个链,首地址写在目录记录里,其他扇区的地址是写在前一个扇区结尾。形成一个单向链表。
重写时,我不知道VB会不会重置所有的链单元,然后重新申请新链。也许不会,对于磁盘来说,这样的结果是我们期待。
如果是申请新扇区,会导致原的扇区在分配表中标记为未使用,但扇区内容不会去修改,直接下一次IO申请到这个扇区时,直接覆写。

但对于 SSD 时,就不同了,SSD 读 和 写 是二个完全不兼容的操作,写之前,需要把这个块清零,而清零的操作是很慢的操作,所以SSD都支持 TRIM指令,
这个指令的含义是把需要清零的块标记出来,由主控后台操作慢慢的去清零。需要写的数据去写到一个新的块中。。
所以,反删除软件 针对 SSD 来说是没的意义的,原因也在这,主控在后台慢慢清零,哪怕找到了首链,但反删除出来的全是乱码或全是零(这种情况更大一些)


取证人员会先提取SSD分区的完整镜像,得到完整的镜像文件。

这个镜像可以无限次在另一台电脑上重复使用,进行数据恢复操作。

甚至通过磁盘文件系统重构、介质恢复设备、剩磁恢复设备,照样可以提取到需要的数据。(通过分区完整镜像文件,可以把数据完美克隆到另一块新硬盘进行分析



多看看网警的数据取证技术博硕论文、《电子数据取证》、《电子数据取证技术》专业书籍吧。

[此贴子已经被作者于2022-8-27 21:24编辑过]

#9
风吹过b2022-08-27 23:05
先区分 HDD 和 SSD 再说,这二种的存储数据 原理是不同的。

HDD,现在的设备,覆写10+次以内都可以读出来。因为有剩磁。这种读剩磁很多需要开盘。
那你告诉我 SSD 那来的剩磁? 也许用 电镜测量 隔膜 的剩余 厚度能得到一个数据吧。
#10
yuma2022-08-28 05:04
参考:https://blog.

以下为论文中的部分:
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录


[此贴子已经被作者于2022-8-28 11:56编辑过]

#11
yuma2022-08-28 12:02
论文中针对覆写技术的研究(部分)

只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录
#12
风吹过b2022-08-28 13:06
注意看到吗? windows XP 以前的操作系统,可以进行数据 恢复的尝试,如果是WINdows 7及后续的操作系统,则应把取证的重点放在未删除的数据上。

为什么,因为 从 windows 7 开始,操作系统支持 SSD 的 TRIM 指令,支持这个指令的结果就是主控后台把标记为删除的块清空,连警方都不去尝试做数据恢复了。


[此贴子已经被作者于2022-8-28 13:09编辑过]

#13
风吹过b2022-08-28 13:09
11楼,多次覆写
第一段前二个字,磁盘。
这个是什么,机械硬盘属于磁盘,缩写 HDD

那SSD属于磁盘吗?不属于,所以你11楼的文章不适用 SSD 。
#14
风吹过b2022-08-28 13:18
以下是引用风吹过b在2022-8-28 13:06:23的发言:

注意看到吗? windows XP 以前的操作系统,可以进行数据 恢复的尝试,如果是WINdows 7及后续的操作系统,则应把取证的重点放在未删除的数据上。

为什么,因为 从 windows 7 开始,操作系统支持 SSD 的 TRIM 指令,支持这个指令的结果就是主控后台把标记为删除的块清空,连警方都不去尝试做数据恢复了。


如果 你去看 装什么系统 推荐什么硬盘,就会发现,推荐装 Windows 7的系统,才会推荐SSD ,也就是这个原因。
如果 XP 使用SSD,就会发现速度与 HDD相比,没多少改变,因XP不支持 TRIM 指令,当需要使用一个新的块时,发现只剩下脏块,那系统就只能等 把一个脏块清零变成干净块,然后再重新写数据,
在这个等待过程中,就明显的会拉慢速度。

针对 windows 7 以上的系统,现在的SSD,特别是 NVME 协议,不带缓存的SSD,会使用全盘模拟  SLC ,缓存过程中会使用所有空白块,当不缓存数据写入完成后,缓存的块都变成了脏块,都需要清零,这个过程中,还需要覆写干嘛,都已被自动覆盖了。对是 SATA 协议的SSD,有些是全盘模拟 SLC,有些是固定容量模拟SLC,不能一概而定。但有一点可以肯定的,支持 TRIM 指令后,主控会自动清块,不需要再去覆盖了,因为数据已经没有了。

#15
yuma2022-08-28 13:58
设备发明出来后就不一样了。
只有本站会员才能查看附件,请 登录

这个链接看一下:https://blog.
#16
风吹过b2022-08-29 11:07
TRIM 指令分二步,
第一步,标记为删除
第二步,清零。

这个文章里也写了,针对 没有完成第二步的 数据进行恢复。没有进行第二次的,WINHEX 就可以啊,直接读块的内容就行。
进行了第二次步, SRS6900 很多时候也无能为力 。看 友情提示。
因为TRIM是在后台由主控操作清零,时间越长,被清零的可能性越高,能恢复的概率也就降低。
-----------
这里就是反应一个问题,OS 支持 TRIM 指令,SSD 支持 TRIM 指令,二者配合后,删除的文件留下的脏块, 当SSD空闲时,就会立即清零的。
根据这个文章的设定,这个 TRIM 删除数据恢复,适用什么情况呢?
1、查获时,正在删除文件,然后立即断电。
2、删完文件,然后立即关机,然后一直没通电,直接查获。

--------
针对 SSD 反取证,很简单,
删除文件后,电脑继续通电,不要再读写SSD,过一段时间后,SSD后台就自动清零了。
#17
yuma2022-08-29 15:21
我查询了我电脑SSD硬盘的TRIM情况,TRIM默认是开启的
只有本站会员才能查看附件,请 登录


但不确定是不是所有型号SSD的TRIM都默认是开启的。


附:
fsutil behavior query disabledeletenotify-----查询TRIM启用情况,结果为0代表开启,结果为1代表关闭
fsutil behavior set disabledeletenotify 0-----开启TRIM
fsutil behavior set disabledeletenotify 1-----关闭TRIM


[此贴子已经被作者于2022-8-29 15:40编辑过]

#18
风吹过b2022-08-29 17:26
是的,WIN7 开始,默认就是开启了 TRIM,一般情况不用去管它。
现在的 SSD 一般都支持 TRIM 指令。因为这个指令会加快 SSD 的写入速度。还有 SLC 模拟缓存,也需要使用到这个指令,而SLC模拟缓存是在无专用缓存芯片的SSD上的加快写入速度立竿见影的方案。

什么情况下要管呢?
你的系统(WIN7及以上)原来是做在 HDD 上的,然后直接克隆到 SSD 上,就需要关注一下这个问题。



1