光盘文件系统中的隐写术

在寻找有关隐写术的有趣信息时,我遇到了一篇关于文件系统中隐写术的有趣文章,一段时间后,它使我想到了在光盘文件系统中创建隐写术的想法。

大概这些天来,几乎没有人会在日常生活中使用驱动器,因为它们已被闪存驱动器形式的更有价值的选择所取代。

稍加思考,我决定仍然可以发现光盘的某些用途,例如,在光盘的文件系统中,您可以隐藏一些机密信息,然后将其传送给另一光盘,这样就不会有人怀疑任何东西。

这就是我们要做的,即:我们将使用python库,该库将帮助我们对文本文件中的信息进行编码,然后将其隐藏在磁盘的肠道中。

图片

但是,在开始之前,我们先来看一些小事情,然后定义光盘的概念。

什么是光盘?


光盘(Eng。Optical disc)-以磁盘形式制成的存储介质的总称,使用光(激光)辐射进行读取。

图片

计算机上的每个磁盘都以特定的格式以图像的形式显示,其中包含磁盘的所有信息和结构,它用于处理没有光学介质的信息,以及将数据存档在固态介质上
光盘的标准格式为iso9660 ,但仍然存在
请记住,映像包含的信息少于原始CD。 光盘中包含服务信息,该信息尤其可以用于防止复制。 我们将使用ISO9660。

内部外观


现在,让我们从内部了解iso9660的结构,您可以在这里这里这里找到详细信息,对于那些也知道英语的人来说。 就我自己而言,我只说它主要由2个描述符组成: 引导记录主卷描述符(PVD) ,您可以在010editor中打开任何iso并自己查看。

图片

尽管ISO 9660并未指出启动记录中的信息或如何使用它,但是那些需要初始化许多类型的数据才能使磁盘可用的系统可以使用启动记录。

PVD是识别iso9660的起点它看起来像这样:

图片

图片

对于计划的爱好者:

图片

您将在此处找到更多信息

而且我们正在前进。

ISO结构中的初始化


我们将使用根目录,在其中创建我们自己的目录并添加必要的文件。

为此,我们将使用pycdlib库,您可以在下面的链接中熟悉它。

让我们继续编写程序,但是谁不想一步一步走,您都可以在github上我的存储库的链接中找到源代码:

#     import base64 import pycdlib 

准备文本文件


现在我们需要准备我们的文件,这些文件将放入iso的结构中。

行动过程如下:

  1. 我们将原始文本存储在某些文件中,并将其读入变量中-没有什么可以阻止我们提取大量文本,但是为了演示起见,我在每个文件中只使用了几句话-我们将继续操纵这些变量
  2. 考虑完句子后,我们需要对内容进行编码,我们将使用base64进行编码
  3. 我们将编码后的内容写入名为UPDOWN的新文件中。 之所以使用这些文件,是因为我决定将第1个文件的1部分和第2个文件的1部分(即上部)写在UP中 ,并在DOWN中写第1个文件的2部分和第2个文件的2部分。即下部

 with open('/home/ul/stegist1.txt','rb') as stegist1:#   for line1 in stegist1.readlines(2): print(line1)#   1  for line2 in stegist1.readlines(2): print(line2)#   1  stegist1.close() enc_line1=base64.b64encode(line1)#     base64 enc_line2=base64.b64encode(line2) with open('/home/ul/stegist2.txt','rb') as stegist2: for line3 in stegist2.readlines(2):#   2  print(line3) for line4 in stegist2.readlines(2):#   2  print(line4) stegist2.close() enc_line3=base64.b64encode(line3)#   print(enc_line3) enc_line4=base64.b64encode(line4) print(enc_line4) with open('/home/ul/UP.txt','ab') as up:#  UP    up.write(enc_line1) up.write(enc_line3) with open('/home/ul/DOWN.txt','ab') as down:#  DOWN    down.write(enc_line2) down.write(enc_line4) 

隐藏


现在是时候进入我最初谈到的pycdlib库了。 使用它并不难:我们创建一个对象,通过该对象我们可以进一步在其中添加各种文件和目录。

 iso=pycdlib.PyCdlib() #   PyCdlib iso.new(rock_ridge='1.09')#  rockridge(    iso   ) iso.add_directory(iso_path='/A1',rr_name='a1')#  (  ) iso.add_directory(iso_path='/B1',rr_name='b1') iso.add_directory(iso_path='/B1/B2',rr_name='b1b2') iso.add_directory(iso_path='/A1/A2',rr_name='a1a2') iso.add_file('/home/ul/stegistup.txt', iso_path='/A',rr_name='a')#   up iso.add_file('/home/ul/stegistdown.txt', iso_path='/B',rr_name='b')#   down iso.write('papastegisto.iso')#  iso () 

如我们所见,我们的文字已成功编写

图片

我想注意到我们可以在某个路径中创建文件,例如/ A ,可以是文件或文件夹。

如果我们首先在/ A中指定目录的创建,然后在/ A中指定文件的创建,则会显示一条错误消息,这与将文件放入文件夹不同。

ISO9660文件系统的扩展


iso文件系统有2个主要扩展名RockRidge和Joilet

罗基奇


这是一个ISO 9660文件系统扩展,旨在存储POSIX操作系统(即Unix兼容)中使用的文件属性。

Rock Ridge扩展名是通过ISO 9660文件系统写入的,因此可以通过设计用于ISO 9660的软件读取Rock Ridge光盘。

更多细节
Rock Ridge可能会存储有关光盘内容的以下附加信息:

  • 长文件名(最多255个字符);
  • 在文件名中使用字符的限制较少;
  • 目录结构的任意嵌套。
  • 每个文件的属性写为:
  • 文件权限,包括uid和gid字段;
  • 文件的硬链接数;
  • 创建,修改,访问,属性更改的时间等。
  • 支持的特殊文件:
  • 稀疏文件;
  • 符号链接;
  • 设备文件
  • 套接字文件
  • FIFO文件。

此数据记录在特殊目录中,这些目录通常是隐藏的。

朱丽叶


这是一个ISO 9660文件系统扩展,旨在缓解ISO 9660施加的文件名限制。该规范由Microsoft开发,自Windows 95和Windows NT 4.0以来,所有版本的Microsoft Windows均已支持该规范。
默认情况下,它用于1995年之后发布的所有CD-ROM介质。

更多细节
Joliet引入了另一组文件名。 名称最多可包含64个Unicode字符,并以UCS-2编码存储。 对于它们的存储,使用了特殊的附加头(补充卷描述符,SVD),兼容ISO 9660的程序无条件地忽略了该头,从而确保了向后兼容性。

大多数现有的软件平台,包括Microsoft Windows,Linux,Mac OS X和FreeBSD,都能够读取带有Joliet文件系统扩展名的存储介质,即使使用非拉丁字母(例如阿拉伯语,日语,西里尔字母),也可以在这些操作系统之间交换文件。通常的ISO 9660无法做到这一点。

实际上,iso文件系统还有3个扩展名,称为Romeo

这是用于MS Windows 95的ISO 9660的扩展,Internet上没有足够的信息,很可能此扩展未在其他任何地方使用。

您可以在此处找到有关CD / DVD扩展名和文件系统的更多信息 ,现在回到我们的程序。

用于对文件中的信息进行编码并将带有编码信息的文件放置在iso中的结果代码如下所示:

 #     import base64 import pycdlib #   with open('/home/ul/stegist1.txt','rb') as stegist1: #  for line1 in stegist1.readlines(2): print(line1) #  for line2 in stegist1.readlines(2): print(line2) #  enc_line1=base64.b64encode(line1) print(enc_line1) enc_line2=base64.b64encode(line2) print(enc_line2) with open('/home/ul/stegist2.txt','rb') as stegist2: #  for line3 in stegist2.readlines(2): #  print(line3) for line4 in stegist2.readlines(2): #  print(line4) enc_line3=base64.b64encode(line3) #  print(enc_line3) enc_line4=base64.b64encode(line4) print(enc_line4) with open('/home/ul/UP.txt','ab') as up: #  UP    up.write(enc_line1) up.write(enc_line3) with open('/home/ul/DOWN.txt','ab') as down: #  DOWN    down.write(enc_line2) down.write(enc_line4) #   iso iso=pycdlib.PyCdlib() iso.new(rock_ridge='1.09') iso.add_directory(iso_path='/A1',rr_name='a1') iso.add_directory(iso_path='/B1',rr_name='b1') iso.add_directory(iso_path='/B1/B2',rr_name='b1b2') iso.add_directory(iso_path='/A1/A2',rr_name='a1a2') iso.add_file('/home/ul/stegistup.txt', iso_path='/A',rr_name='a') iso.add_file('/home/ul/stegistdown.txt', iso_path='/B',rr_name='b') iso.write('papastegisto.iso') 

我想提醒您,完整的代码也可以在github的链接上找到
现在,我们继续进行最后一部分-将我们生成的iso写入磁盘
您可以录制任何内容,我将使用Nero 7
我们将使用CD-R
CD-ROM,CD-R和CD-RW
它们的区别在于CD-ROM是只读磁盘,不能在其中写入任何内容。 CD-R和CD-RW是可刻录光盘。 CD-R允许您一次写入CD-RW光盘。

但是DVD呢?

与CD-R / RW的主要区别是可写入4.7 GB DVD-ROM的数据量为650,700 MB。 某些DVD格式最多支持13 GB甚至17 GB
更多光盘信息

如我们所见,该程序已成功写入磁盘。

图片

现在我们可以将其通过磁盘转移给我们想要的人。

解码方式


如果信息不能被解码,为什么我们要做所有这些呢?

如果您对该方法感兴趣,则可以编写一个程序来提取和解码附件,这将正是您的人员所使用的程序。

仅此而已。 我的任务是演示使用似乎已被遗忘的磁盘来隐藏信息的一种可能方法。

图片

我很高兴看到您的建议,补充,更正和其他反馈。

PS我要特别感谢@PavelMSTU的咨询和激励。

Source: https://habr.com/ru/post/zh-CN449016/


All Articles