kernel 环境搭建

Author Avatar
Aryb1n 7月 12, 2018

这个make bzImage用了我2G硬盘…
搞得我已经不敢随便make了

其实在做MIT vx6的那实验的时候就搭过类似的环境了…

这里基本是按照传说的v爷爷的blog做的
https://veritas501.space/2018/06/03/kernel%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE/

就最后的脚本路径稍微改了一下

#!/bin/sh
qemu-system-x86_64 \
-m 64M \
-kernel arch/x86_64/boot/bzImage \
-initrd ../busybox-1.28.4/rootfs.img \
-append "root=/dev/ram rw console=ttyS0 oops=panic panic=1 kalsr" \
-netdev user,id=t0, -device e1000,netdev=t0,id=nic0 \
-nographic \
-monitor /dev/null \
-smp cores=2,threads=1 \
-enable-kvm \
-cpu kvm64,+smep \
# -gdb tcp::1234 \
# -S

我为什么编译了那么大的东西….QAQ

最后看到一句…可以直接下载kernel

apt download linux-image-4.15.0-22-generic

所以….编译内核的意义在哪…
是可以对源码定制, 然后重新生成内核吗

我遇到了新的问题…怎么关机

好吧, 关不了机…只能直接Ctrl+c

2 Demo

由于大家在做这demo的时候是用的2.x内核…而我照着大佬搭了一个4.15…(因为没有磁盘空间了,,,就不继续make了)
而这其中发生了…一个变迁就是create_proc_entry函数不能用了…就好像你用PHP7跑了SQLi-LAB…发现旧的数据库连接函数都废弃了的时候, 哈哈哈, 这里倒是没那么严重…换了新的函数, 稍作了修改

// vim null_dereference.c 
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/proc_fs.h>
void (*my_funptr)(void);


static ssize_t bug1_write(struct file *file,const char __user *buf,size_t len, loff_t *f_pos)
{
    my_funptr();
    return len;
}

struct file_operations proc_fops=
{
    .write=bug1_write
};

static int __init null_dereference_init(void)
{
    printk(KERN_ALERT "null_dereference driver init!\n");
    proc_create("bug1",0666,0, &proc_fops);
    return 0;
}

static void __exit null_dereference_exit(void)
{
    printk(KERN_ALERT "null_dereference driver exit\n");
}

module_init(null_dereference_init);
module_exit(null_dereference_exit);

另一个栈溢出的demo也是照着改, 而且栈溢出的demo需要关闭ALSR, 然后重新编译内核我就没做了

推荐的资料

Linux device driver (LDD)
linux kernel development (LKD)

Keegan McAllister的Writing kernel exploits…一份ppt, 就大家在传的两个demo