解密设备驱动程序

时间:2017-03-29 06:46:29

标签: c linux encryption drivers

我有一个任务是创建一个小图像,以最简单的方式加密它并编写解密驱动程序。

制作图片:

dd if=/dev/zero of=myFS bs=1024 count=60
mkfs.ext2 myFS

使用XOR加密:

int main()
{
    std::fstream streamIn;
    std::fstream streamOut;

    const char key = 0b00001111;

    streamIn.open("myFS", std::ios_base::binary | std::ios_base::in);
    streamOut.open("newFS", std::ios_base::binary | std::ios_base::trunc | std::ios_base::out);

    char b;
    while (streamIn.read(&b, 1))
    {
        b ^= key;
        streamOut.write(&b, 1);
    }

    streamIn.close();
    streamOut.close();

    return 0;
}

然后,写下司机。它基于device-mapper-target内核模块,因此它的主映射函数有这个原型:

static int sddm_target_map(struct dm_target *ti, struct bio *bio);

你知道,我有一个生物结构,我想,我应该解密它包含的每个字节。我现在拥有的:

struct bio_vec vec;
struct bvec_iter it;
unsigned int len;
char *addr;
unsigned int i;
unsigned long flag;

bio_for_each_segment(vec, bio, it)
{
    len = vec.bv_len;
    addr = bvec_kmap_irq(&vec, &flag);

    for (i = 0; i != len; ++i)
    {
        *(addr+i) ^= 0b00001111;
    }

    bvec_kunmap_irq(addr, &flag);
}

当然,它不起作用。不知道为什么,但它甚至不会改变查询中的任何内容。我可以写*(addr+i) ^= 0;,什么都不会改变。如果我将此驱动程序应用于非加密图像,它将安装得很好。

所以我的问题是如何更改存储在生物结构中的数据?

0 个答案:

没有答案