最后在根目录下建立最重要的init文件:

#!/bin/sh

mount -t devtmpfs none /dev
mount -t proc proc /proc
mount -t sysfs sysfs /sys

#
# module
#
insmod /lib/modules/*/error404/*.ko
chmod 666 /dev/Test
# mmap_min_addr to 0 for the challenge to be simpler for now ;)
echo 0 > /proc/sys/vm/mmap_min_addr

#
# shell
#
echo "Hello!"
export ENV=/etc/profile
setsid cttyhack setuidgid 1000 sh

umount /proc
umount /sys
umount /dev

poweroff -f

内核模块代码

这是一个相当简单的内核模块代码

#include <linux/init.h>
#include <linux/module.h>
#include <linux/cred.h>
#include <linux/tty.h>
#include <linux/tty_driver.h>

MODULE_LICENSE("Dual BSD/GPL");

static int hello_init(void)
{
    printk(KERN_ALERT "[ERROR404]My First Module!");
    printk(KERN_ALERT "[ERROR404]sizeof cred   : %d", sizeof(struct cred));
    printk(KERN_ALERT "[ERROR404]sizeof tty    : %d", sizeof(struct tty_struct));
    printk(KERN_ALERT "[ERROR404]sizeof tty_op : %d", sizeof(struct tty_operations));
    return 0;
}

static void hello_exit(void)
{
    printk(KERN_ALERT "[ERROR404]Bye!");
}

module_init(hello_init);
module_exit(hello_exit);

我们首先需要在代码的同目录下写一个makefile,内容如下:

obj-m := Test.o
KERNELBUILD := /home/error404/Desktop/Mac_desktop/Linux-Kernel/SourceCode/linux-5.5.6
CURDIR := /home/error404/Desktop/Mac_desktop/Linux-Kernel/build/Test

modules:
    make -C $(KERNELBUILD) M=$(CURDIR) modules
clean:
    make -C $(KERNELBUILD) M=$(CURDIR) clean

执行make进行编译,将编译出的文件放在/lib/modules/5.5.6/error404/下即可

启动QEMU

建立Start_Kernel.sh文件,内容如下:

#!sh

qemu-system-x86_64   \
        -kernel ./bzImage \
        -initrd ./rootfs.cpio  \
        -append 'console=ttyS0 loglevel=0 pti=off oops=panic panic=1 nokaslr' \
        -nographic

直接运行Start_Kernel.sh即可,紧接着运行dmesg即可看到结果

image-20200417224851754

在下一篇文章的末尾将会展示带交互的内核模块的编写~

0x05 参考链接

【原】GitBook – Linux Inside – 0xax

【原】Linux-内核编译–咲夜南梦

分类: CTF

0 条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注