[已解决]内核里与读写文件有关的问题
发表于 : 2024-01-20 19:56
我通过hook系统调用,实现应用层度“读加密文件时的自动解密”和“写文件时的自动加密”
hook了 openat、read、write、fstat等函数
测试读,暂时没问题,能解密
测试写,有问题!
printk输出如下: 上图是我应用层点保存时触发的输出。看样子,点保存后,程序调用openat函数重新打开文件,fd是10; 然后lseek了一次,不过这个事件在本次测试里没什么意义; 程序然后close了这个fd。这里就有问题了,为啥要close呢? 我为了避免影响无关文件,所以openat时记录了加密文件的fd,close时会把这个fd从链表里清理掉。它close,我就得清理掉,然后下边write时就不对了, wirte调用的hook版本认为参数里的fd代表非加密文件,所以没有给文件加文件头,也没有走加密数据分支,保存的文件于是就变成明文了。
我不明白,应用层wirte文件之前,为啥要把fd close掉?close之后的write函数使用的fd是怎么来的?
hook了 openat、read、write、fstat等函数
测试读,暂时没问题,能解密
测试写,有问题!
printk输出如下: 上图是我应用层点保存时触发的输出。看样子,点保存后,程序调用openat函数重新打开文件,fd是10; 然后lseek了一次,不过这个事件在本次测试里没什么意义; 程序然后close了这个fd。这里就有问题了,为啥要close呢? 我为了避免影响无关文件,所以openat时记录了加密文件的fd,close时会把这个fd从链表里清理掉。它close,我就得清理掉,然后下边write时就不对了, wirte调用的hook版本认为参数里的fd代表非加密文件,所以没有给文件加文件头,也没有走加密数据分支,保存的文件于是就变成明文了。
我不明白,应用层wirte文件之前,为啥要把fd close掉?close之后的write函数使用的fd是怎么来的?