标签: initrd

破解以下复制保护有多容易?

我正在尝试复制保护一些工作,这是一个可引导的 SD 卡,用于在 ARM 设备(Raspberry Pi)上引导 Linux 内核。我正在使用这种方法:

  1. 该方法使用 initrd 来挂载加密的根文件系统。
  2. initrd 根据 SD 卡的 CID 生成文件系统的密码。(使用散列函数,尚未决定 md5 或 sha1)。Initrd 将尝试使用生成的密码挂载文件系统。
  3. 现在是最有趣/最可疑的部分:initrd 本身是使用自定义 C 函数加密的,基本上每个字节都使用自定义伪随机生成器进行 XOR 运算。内核被修改为具有相同的加密功能,作为解密器工作。
  4. 系统本身被剥离,因此无法使用键盘或外部存储。单个应用程序全屏运行。

所以在引导加载程序加载内核和 initrd 后,内核解密 initrd 并执行其 init 脚本,这将生成密码并挂载根文件系统。

我的问题是:打破这个设置(解密根文件系统并使其从任何 SD 卡启动)有多容易?最薄弱的部分是什么?反编译内核并找到那些自定义加密函数有多容易?

编辑:这里有一些更正,这样你就不会在明显的事情上浪费时间:

  1. 根设备将使用 LUKS (aes256) 加密,密钥将由某些 HMAC 函数使用 SD 卡的 CID 和一些盐生成。
  2. 用于 initramfs 加密的伪随机算法实际上是 RC4,只会使用一些自定义函数生成密钥,因为如果我只是将密钥存储在一个字节数组中,那么检索它就会变得非常简单(是的,这是通过默默无闻的安全性但似乎没有其他办法)。
  3. 我知道如果使用 SD 卡模拟器,有人可以开始复制这个系统,但这对我来说没问题,因为它非常困难,而且不是任何人都可以做到这一点。(也不是任何人都愿意与模拟器打交道)

linux encryption sd-card initrd

11
推荐指数
1
解决办法
8928
查看次数

在 QEMU 中使用目录作为 initrd

有没有办法在启动 QEMU 时使用目录作为 initrd?

我知道如何使用QEMU的-kernel-initrd标志来引导内核和 initrd,而无需先创建包含这两个文件的可引导设备。现在我想知道是否有办法跳过cpio用于创建 initrd 文件的步骤。

通常在更改包含我的 initrd 的所有文件的目录时。我会通过运行来测试它们

(cd initrd ; find . | cpio --quiet -R 0:0 -o -H newc) | gzip >initrd.gz
qemu-system-i386 -kernel /boot/vmlinuz -initrd initrd.gz
Run Code Online (Sandbox Code Playgroud)

我可以以某种方式实现相同的功能而不必在文件系统上创建 initrd 文件吗?

到目前为止我尝试的是以下内容:

qemu-system-i386 -kernel /boot/vmlinuz -initrd initrd
Run Code Online (Sandbox Code Playgroud)

导致内核启动但在尝试挂载根文件系统时出现混乱。

qemu-system-i386 -kernel /boot/vmlinuz -initrd <(
   cd initrd ; find . | cpio --quiet -R 0:0 -o -H newc)
Run Code Online (Sandbox Code Playgroud)

导致 QEMU 死亡:

qemu: error reading initrd /dev/fd/63: Illegal seek
Run Code Online (Sandbox Code Playgroud)

linux qemu initrd

7
推荐指数
1
解决办法
1874
查看次数

将 initramfs 嵌入到现有内核中

是否可以将 initramfs 映像嵌入到现有内核中而无需重新编译整个内容?我没有资源去做那件事。

linux kernel initrd

5
推荐指数
1
解决办法
1882
查看次数

Linux 中根文件系统的 FUSE?

甚至可以在 Linux 中使用 FUSE(非网络)文件系统作为 root 吗?我认为该程序必须存在于 initrd 中,但我不确定具体细节。例如,FUSE 程序是否也必须存在于主根上的同一位置,或者它只需要存在于 initrd 中?

linux filesystems fuse initrd

5
推荐指数
1
解决办法
259
查看次数

可以在没有 initrd 的情况下启动 Linux 内核吗?

这些天是否可以在没有 initrd 的情况下启动 Linux 内核(比如 2.6.35)?我似乎记得这在之前是可能的(2.6.x 和 2.4 早期)。我的意思是,理论上,如果内核具有内置的所有硬件支持(无模块),它就不需要早期的用户空间,对吗?

kernel initrd

4
推荐指数
1
解决办法
5044
查看次数

“挂载根文件系统”到底是什么意思?

在Linux的引导过程中,我们有一个initrd根文件系统,它是在真正的根文件系统准备好挂载之前挂载的。安装的流程是怎样的?应该发生什么才能让我们说文件系统已挂载?为什么我们说“根文件系统”而不是“文件系统”?

linux boot filesystems initrd

3
推荐指数
1
解决办法
2万
查看次数

哪个是用于从休眠状态恢复的 user?space 命令?

在很长一段时间内,我使用

echo disk > /sys/power/state
Run Code Online (Sandbox Code Playgroud)

为了休眠/dev/sda10,我使用 Debian 发行版的 initrd 来恢复。

但是最近,我切换到了一个需要我使用完全自定义的 initramfs 的 raid 阵列(我必须从头开始构建它,因为尝试修改现有的 initrd 没有奏效)以便在挂载 root 之前设置?划分。

有两种恢复方式:内核可以直接读取带有resume=内核参数的交换文件系统(并且它会在启动 init 之前恢复)?或者它需要一些用户空间(例如加载模块)才能访问交换分区。

那么用户空间命令是什么才能从 /dev/mapper/isw_qfyzrvbsusf_Volume0p9??

linux debian hibernate initrd linux-kernel

3
推荐指数
1
解决办法
1473
查看次数

如何在 Ubuntu 9.10 上构建没有 dmraid-driver 的 initrd?

我想遵循维基百科文章中的这条建议mdadm(让mdadmRAID 在我的 Karmic 工作站上工作):

为了解决这个问题,你需要在没有dmraid-driver的情况下构建一个新的initrd。以下命令在具有“2.6.18-8.1.6.el5”-kernel 的系统上执行此操作:

mkinitrd --omit-dmraid /boot/NO_DMRAID_initrd-2.6.18[..].img 2.6.18[..]

然而,事实证明Ubuntu 使用mkinitramfs; initrd-tools(因此mkinitrd)不再适用于它。

我可以mkinitramfs用来构建省略 dmraid 的 initrd 吗?该手册页没有提及在所有这些选项。或者,如果没有mkinitramfs,在 Ubuntu 9.10 上还有其他方法吗?

这个问题的后续。)

linux ubuntu-9.10 initrd ubuntu

2
推荐指数
1
解决办法
1万
查看次数

Linux内核编译:独立操作系统

大家好,我是 linux 内核编译的新手,所以我有一些问题:通过编译 linux 内核,我们是否构建了一个完全独立的操作系统,它不依赖于任何 linux 发行版?

如果是的话......好吧,当我想使用 initramfs 命令创建 initrd 文件时,为什么要添加一些有关我正在运行的 linux 解构(我正在运行 Ubuntu 10.4)的信息?

我应该如何编译并将模块添加到我编译的 linux 中,我应该把它们放在哪里?

这是我一直在做的事情的总结:

1.获取内核源代码(3.4.1)并使用“make all”命令编译它(我使用我当前的linux .config)

  1. 在我的记忆棒上安装 grub

  2. 把编译好的 bzImage 放到记忆棒的 /boot 目录下

  3. 使用“initramfs”命令创建initrd文件并将其也放入/boot。

  4. 使用记忆棒启动我的电脑并进入 grub> 终端

  5. 使用 "root (hd0,0)" ; "内核/boot/bzImage"; “initrd /boot/initrd.img”,然后“boot”命令启动。

  6. 在出现错误后进入(initramfs)终端,指出找不到“/lib/modules/3.4.1/modules.dep”文件!!!

我究竟做错了什么 ?

compile initrd linux-kernel kernel-module

2
推荐指数
1
解决办法
1288
查看次数

如何引导到作为分区映像文件存储在可引导 DVD 上的根文件系统?

我创建了从USB记忆棒可引导CD(根据这个从Ubuntu的核心12.04建成例如)通过

  • 将U盘启动分区(包含vmlinuz和initrd.img)的文件复制到一个文件夹中CD_root/
  • 将 isolinux 添加到该文件夹​​(根据这些说明
  • rootfs.partU 盘根分区的映像复制到文件夹中,然后
  • 使用 mkisofs。

如何从 DVD 引导到根分区的映像?

问题的更多细节和更精确的版本:

我可以开始引导到 init 脚本(在 Ubuntu 12.04 主机上使用 virtualbox):使用内核参数,break=mountroot我可以rootfs.part在安装映像之前放入shell并插入:

mkdir /run/cdrom
mount -t iso9660 /dev/sr0 /run/cdrom
losetup /dev/loop0 /run/cdrom/rootfs.part
mount -o ro /dev/loop0 /root
Run Code Online (Sandbox Code Playgroud)

我怎样才能自动实现这部分(或其挂载 /root 的要点)?我是否必须修补initrd.img(如何)或是否有其他选项,例如内核参数?

此时,里面的文件rootfs.partroot/. (它们包括/root/sbin/init, /root/sbin/modprobe, root/lib/modules/*, ...)我尝试继续并模拟 init 脚本的正常处理(当然有点脱离上下文):

udevadm control --timeout=121 --exit
mount -n -o move /dev /root/dev
mount -n -o …
Run Code Online (Sandbox Code Playgroud)

boot dvd mount initrd ubuntu

2
推荐指数
1
解决办法
6432
查看次数