-
Notifications
You must be signed in to change notification settings - Fork 147
Home
hkx3upper edited this page May 28, 2022
·
25 revisions
项目里的开发文档有些错误,所以在wiki里写一下重要的项目方法,有需要的结合着看吧。
因为最近找我的人有很多是刚开始写驱动的,所以wiki将分为八部分写,并包含一些基础的知识。
- 介绍minifilter框架和一些概念;
- 本文使用双缓冲,授权进程和非授权进程分别使用明文和密文缓冲,
授权进程允许修改明文缓冲,非授权进程不允许修改密文缓冲; - 本文使用StreamContext存放驱动运行时的文件信息,使用文件标识尾的方式,
在文件的尾部4KB储存文件所需的解密信息; - 加密算法使用AES-128 ECB模式,并且使用密文挪用(Ciphertext stealing)的方法,
处理块大小不对齐的明文需要填充的问题; - 本文的Write(写操作)和Read(读操作)使用SwapBuffers的方式进行透明加密解密;
- 对文件的特权加密和特权解密使用重入(Reentry)的方式,
让minifilter重新进入自己的加密或解密代码中,使驱动加密解密文件; - 为了适配office文件,本文在文件FileRenameInformationEx和FileRenameInformation时做特殊处理,
因此可以自动加密解密docx,doc,pptx,ppt,xlsx,xls等使用tmp文件重命名方式读写的文件; - 关于进程的控制与保护,本文使用双向链表存储进程策略,并注册相关进程回调函数,
同时定时扫描授权进程代码段(.text段)的完整性,实现进程的控制与保护。
有些bug或者目前不太确定的部分,我会标注出来。
_最后,这只是一个实验性的项目, _
_对于高IRQL下的代码处理我还不太懂,写入文件标识尾时有可能会有死锁, _
_有些地方的处理并不是那么的合规范(稍微糊弄了一下)等等等等。 _
_总之,论文我也写完了,项目我想还是放到github上让它充满活力的好。 _