编程安全学习笔记

TrueCrypt的国内延伸版本CnCrypt V1.11(单一文件绿色版) CnCrypt是一款专门为用户打造的磁盘加密软件,同时支持Windows2000-Win 10之间的所有操作系统。主要为用户提供便捷的电脑磁盘加密功能,能创建加密的“虚拟磁盘文件”(类似虚拟光驱,大小可以自定义),所有加密数据都是经过AES等加密算法的运算后的结果,无法破解。CnCrypt提供多种加密算法,包括:AES-256, Blowfish (448-bit key), CAST5, Serpent, Triple DES, and Twofish,其他特性还有支持FAT32和NTFS分区、隐藏卷标、热键启动等。 主要特性 1 所有加密都是以分区为基础的。 2 真加密,所有加密数据都是经过AES等加密算法的运算后的结果,无法破解(穷举法除外)。 3 能创建加密的“虚拟磁盘文件”(类似虚拟光驱,大小可以自定义) 4 加密单个分区或整个硬盘。 5 加密过程自动、实时、透明(使用加密文件或分区前输入密码,载入后就可以像使用一个普通分区一样使用加密分区。) 6 提供两级方案,以应对被强迫说出密码的情况(如抢劫)。 6.1 隐藏分区(覆盖式密码术,steganography) 6.2 无法探测到CnCrypt 加密分区(加密数据会被认为是随机数据) 7 加密算法:AES-256、Serpent、Twofish。为取得更好加密效果,可以同时使用两种或三种加密算法。操作模式:XTS。 8 多样化的身份认证 8.1支持通常使用的密码认证; 8.2支持密匙文件认证,通过指定的文件作为密匙对数据加密。(密匙文件支持:任何类型的文件)电脑上那么多文件,要是想尝试暴利破解,就等着累死吧。 8.3支持PKCS 11运行库,可以使用硬件口令卡(例如:U盾)进行加密认证。密钥随身携带,从而再次提高了数据的安全性,以此实现更高规格的防暴力破解。 CnCrypt V1.11 修改记录 实现单文件绿色版本,包括安装,创建,加载功能 修正V1.10中存在的一些细节BUG 密钥文件按钮上显示当前密钥文件个数 某些Windows错误弹窗为空白,无法获取到错误信息描述 菜单增加关联资源管理器,取消关联资源管理器选项 资源管理器菜单修改为子菜单方式 属性中增加占用磁盘空间项,可以显示动态卷目前已经占用的磁盘空间 在加密卷右键菜单上增加了创建桌面快捷方式菜单项 Mount命令行增加盘符被占用时自运选择空闲盘符选项,可与指定盘符功能一块用,例如 "/letter X: /letter auto" 增加快速创建加密卷(一键创建加密卷) 便携版本配置文件目录移动到用户数据目录(之前为程序目录) 增加文件日期修改工具 增加加密卷占用磁盘空间压缩功能 CnCrypt V1.10 修改记录 增加加密卷空间扩充工具 恢复了TrueCrypt原有系统加密功能 修正了TrueCrypt安全审计团队审计发现的几个BUG 当有子窗口时用快捷键退出存在的BUG WIN7之后系统修改显示密码选项后*号显示不一样的问题 对多处界面显示进行了修正 创建新加密卷时‘选择文件’按钮修改为‘指定文件’。 文件浏览窗口为非保存模式时,修改指定文件必须存在。 设备浏览窗口中分区前面加了若干空格来区分磁盘和卷。 Format和Mount的历史记录可以实时同步 挂载盘符时可以使用A和B盘符 盘符列表右键菜单增加了‘打开文件所在位置’功能 增加了检查更新功能,该功能不会自动连接网络,除非用户手动进行操作。 收藏加密卷中存在同样加密卷时进行提醒 对主菜单布局进行了调整 对中文进行了更好的优化 增加了CnCrypt加密方式,同时继续兼容TrueCrypt加密方式 对磁盘大小输入框进行输入验证 自动加载所有设备加密卷时,跳过对系统所在磁盘和系统分区的检测,节省一定时间。 密钥文件按钮上显示当前密钥文件个数 CnCrypt V1.00 修改记录 基于TrueCrypt7.1a的主要修改 完美支持win2000-win10的所有32位和64位版本。 增加了便携磁盘加密卷创建和加载功能(不会出现“未格式化”的提示) 增加了与Windows资源管理器的集成(加载加密卷,保存至加密卷,粉碎选择文件) 去除了有关系统盘\系统驱动器部分(UEFI之后已无法支持之前实现方式) 增加加密卷擦除功能 增加密码生成器功能 增加了密码输入软键盘功能 增加了磁盘痕迹擦除工具 增加了悬浮框,支持拖放加载,右键功能菜单等。 托盘菜单支持快速加载,支持加载历史记录,加载收藏卷等功能。 加密卷创建向导增加了向导步聚显示 界面细节的诸多优化 内核驱动一些BUG的处理 安装包体积缩小至1.67M,便携压缩包缩小至0.9M 界面完美支持中文 界面使用了操作系统风格 在界面中增加了Banner 对加密卷收藏夹界面进行较大修改 对语言选择界面进行较大 立即下载
概念:

NT, WDM, WDF驱动模型
设备有可能有名称,如串口\Device\Serial0,也有可能没有设备名称(设备名称与符号连接名不一样,前者
是内核程序对设备的一个标识,内核函数中要用到,后者是外部设备访问设备的标识)

WDM驱动模型:
函数简介:

IoGetDeviceObjectPointer 通过名字来获得设备对象指针
ObReferenceObjectByName 通过名字来获得对象指针(为公开的函数,不只是用于设备指针,还包括驱动对象指针或其他内核对象的指针)
IoGetAttachedDevice 得到绑定设备的最顶层设备对象指针,与下面一个函数有稍微不同
IoGetAttachedDeviceReference 到绑定设备的最顶层设备对象指针
IoCreateDevice 生成设备,需要系统权限的用户才能打开(比如管理员)
IoCreateDeviceSecure 生成有名字的设备(普通用户也可以)
IoAttachDeviceToDeviceStack 绑定设备(依靠设备指针)
IoAttachDeviceToDeviceStackSafe  绑定设备(依靠设备指针,版本要求高)
IoAttachDevice 绑定设备(依靠名字)
IoDetachDevice 解除绑定
IoDeleteDevice 删除设备

IoCallDriver 向设备发送Irp,除了power设备以外
PoCallDriver 向power设备发送请求,在调用IoskipCurrentIrpStackLocation之前先调用PoStartNextPowerIrp.
IoSkipCurrentIrpStackLocation 与 IoCopyCurrentIrpStackLocationToNext 区别:

/*
 1.如果对irp完成之后的事情无兴趣,直接忽略当前IO_STACK_LOCATION, (对我们的程序来说,调用IoSkipCurrentIrpStackLocation),然后向下传递请求,返回IoCallDriver所返回的状态.

2.不但对irp完成之后的事情无兴趣,而且我不打算继续传递,打算立刻返回成功或失败.那么我不用忽略或者拷贝当前IO_STACK_LOCATION,填写参数后调用IoCompleteRequest,并返回我想返回的结果.

3.如果对irp完成之后的事情有兴趣,并打算在完成函数中处理,应该首先拷贝当前 IO_STACK_LOCATION(IoCopyCurrentIrpStackLocationToNext),然后指定完成函数,并返回 IoCallDriver()所返回的status.完成函数中,不需要调用IoCompleteRequest!直接返回Irp的当前状态即可.
IoCompleteRequest 返回给I/o管理器处理完Irp后的状态
*/

IoSetCompletionRoutine 设置完成函数例程
IoCreateSymbolicLink 产生符号连接,通过DeviceIoControl与应用程序进行通信

IoEnumerateDeviceObjectList列举该驱动下所有的设备
InterLockedExchangePointer原子操作交换指针
/*
更改中断服务向量相关代码:见ps2intcap.c
//得到中断向量表地址:
void *p2cGetIdt()
{
    P2C_IDTR idtr;
    // 一句汇编读取到IDT的位置。
    _asm sidt idtr
    return (void *)idtr.base;
}


*/
__declspec(naked) 表示裸函数,可用于生成纯汇编代码,例如:
/*
__declspec(naked) p2cInterruptProc()
{
    __asm
    {
        pushad                    // 保存所有的通用寄存器
        pushfd                    // 保存标志寄存器
        call p2cUserFilter    // 调一个我们自己的函数。 这个函数将实现
                                    // 一些我们自己的功能
        popfd                    // 恢复标志寄存器
        popad                    // 恢复通用寄存器
        jmp    g_p2c_old        // 跳到原来的中断服务程序
    }
}
*/

设计方法:
1. 过滤程序可以绑定设备,在自己的驱动中定义分发函数,或者直接替换利用已知驱动的分发函数,利用
InterLockedExchangePointer.
2. 可以修改底层中断服务程序来过滤,或者利用IOAPIC寄存器编程来改变中断服务程序(IOAPIC寄存器初始地址:0xfec00000),
3. 虚拟磁盘:

WDF驱动模型:
函数与数据结构简介:

WDFDEVICE 设备
WDFDRIVER 驱动
WDFREQUEST 请求——相当于Irp
WDFQUEUE 队列

WDF_DRIVER_CONFIG_INIT(
    OUT PWDF_DRIVER_CONFIG  Config,
    IN PFN_WDF_DRIVER_DEVICE_ADD  EvtDriverDeviceAdd
    ) 初始化一个驱动的配置项,第二个参数是一个回调函数
WdfDeviceInitAssignName 给一个设备的设备对象指定一个名字
WdfDeviceInitSetDeviceType 设置设备的类型
WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(_, _)可以用于设置设备的扩展,或者其它对象的扩展,例如队列的扩展
WdfDeviceCreate 产生设备对象
WdfDriverCreate 产生驱动对象

WDF_OBJECT_ATTRIBUTES 框架的对象属性,里面有回调函数接口,提供销毁对象的回调函数(如)
WDF_IO_QUEUE_CONFIG_INIT_DEFAULT_QUEUE宏用户配置队列对象(分发函数)分发类型
WDF_IO_QUEUE_CONFIG 配置队列(分发函数)的回调函数等, 分发函数中输入参数有队列对象
WdfIoQueueCreate 产生队列对象,需与某个设备关联
WdfDeviceGetDriver 得到设备对应的的驱动
WdfDriverGetRegistryPath 利用驱动对象得到注册的路径
RtlQueryRegistryValues 请求得到很多注册表项的值
WdfDeviceCreateSymbolicLink 产生设备链接符号
ShareCode:与朋友共享代码 与朋友共享代码 只是与朋友分享我的代码... 立即下载

相关推荐

基于IOAPIC重定位的 键盘监听技术及防御

键盘监听技术会引起个人重要信息的泄露。通过对IOAPIC重定位技术的研究,实现了针对单核系统和多核系统的键盘监听和记录。在Windows Driver Kits7.0.1中编译生成的驱动,能够记录键盘信息,引起重要信息的泄露。通过提出的防御键盘监听的方法能够有效地预防键盘监听。

IoEnumerateDeviceObjectList 枚举驱动的所有设备 文件过滤驱动 windows内核开发

IoEnumerateDeviceObjectList函数,用来枚举某驱动下的所有设备,主要是遍历deviceobject->nextobject字段,该函数第一次可以将DeviceObjectListSize传递0,来获取实际的设备个数,第二次调用,再获取整个设备列表,实现如下: 在文件过滤驱动中,常用该函数来枚举某文件系统下的所有设备,然后根据名字来区别是卷设备还是控制设备,空名字即

baund的专栏 3457

share-code:ShareCode的官方网站

股份代号 一个开放源代码的网站,使开发人员可以彼此共享代码。

IoEnumerateDeviceObjectList函数的还原

函数接口解释参考ddk文档(win 7 32),用来遍历某个驱动对象的设备对象。c代码+WinDbg得到的反汇编代码 NTSTATUS IoEnumerateDeviceObjectList(IN PDRIVER_OBJECT DriverObject, //ebp+8 IN PDEVICE_OBJECT *DeviceOb...

pureman_mega的博客 568

AI搜索优化(GEO)实战指南:抢占智能对话流量入口

AI SEO,是针对生成式AI平台(如DeepSeek、豆包、Kimi等)的优化策略,旨在通过适配AI算法对内容的理解和引用逻辑,提升品牌在AI生成答案中的可见性与权威性,从而在对话式搜索场景中抢占流量入口。:强化内容经验性(Experience)、专业性(Expertise)、权威性(Authoritativeness)、可信度(Trustworthiness)内容需避免夸大描述,提供可验证的细节(如数据、用户评价)。

Baixue5209的博客 6780

[Ethernet in CANoe]2--如何在CANoe中去仿真CP版本的SOME/IP通信

上篇文章()介绍了SOME/IP的两种类型的数据格式,根据作者目前的项目经验,目前在CANoe V18之前的版本,CP版本的arxml是最方便实现SOME/IP以太网仿真的。作者目前只有CANoe V17的license,所以本片文章是在CANoe 17上基于CP版本的arxml去做仿真模拟。

汽车ECU自动化测试 1764

硬件ID查询欺骗驱动程序样本逆向分析练习IDA使用

参数 *(_QWORD *)(v6 + 24)确定为搜索开始的地址,再向上一行,V6=V24,v24是一个指针地址,结构体指针,还不能确定是哪个结构体,因为ObReferenceObjectByName调用的参数明显不对,IDA中还出现了UNK字段,F5也不是那么好用啊,先向下看。分析到这里可以确定这个驱动为开源的写法,通过关闭smart,hookirp函数达到hwid欺骗的目的,再查询过程中直接找到了个项目的开源地址,哈哈,不过我是为了熟悉ida操作来分析的,无所谓咯。

weixin_62197674的博客 1450

【Python机器学习实战】 | 基于PCA主成分分析技术读入空气质量监测数据进行数据预处理并计算空气质量综合评测结果

主成分分析(Principal Component Analysis, PCA)是一种常用的机器学习和数据分析技术,用于降低数据维度、识别数据中的模式、发现变量之间的关系等。

一伦明悦的博客 1263

sfilter开源驱动分析(一)--文件过滤的基本步骤

NT的I/O管理器支持分层的驱动程序模式。         当应用层的CreateFile() (R3层)  --> || NtCreateFile() [I/O管理器在这一层,ntdll.dll]  -->|| 内核驱动层(R0层) ,这里讨论的主要是针对最后的内核驱动层的处理。          当每个IRP被处理的时候,它会经过驱动层中的各个驱动程序,直到最终被某个驱动程序调用IoCo

jimk1983的专栏 2697

零基础玩转STM32CubeIDE LL库:5分钟搞定串口通信(附完整代码)

本文为零基础开发者提供了一份STM32CubeIDE LL库串口通信的快速实战指南。通过CubeMX配置、LL库核心API详解,以及中断接收与环形缓冲区的完整代码实现,帮助读者在5分钟内搭建稳定可靠的串口收发框架,解决从HAL切换到LL库的常见困惑,提升嵌入式开发效率。

weixin_29159441的博客 306

OnlyOffice Docker部署实战:解除20连接限制+500M文件上传配置(附中文字体解决方案)

本文详细介绍了OnlyOffice企业级Docker部署的全过程,包括解除20并发连接限制、提升文件上传大小至500MB以及解决中文字体显示问题。通过定制镜像、优化配置和字体安装,帮助技术团队快速搭建高性能的文档协作平台,适用于企业级应用场景。

weixin_26850069的博客 444

Windows 驱动中获取指定的设备对象

转载自:http://tudian2007.blog.163.com/blog/static/3156641320137295338938/Windows 驱动中获取指定的设备对象  众所周知应用层要和驱动层通讯的话需要先打开驱动设备对象,因为驱动设备名只是对内核模式中的驱动所识别的,应用层是无法识别的,所以一般驱动都有对应的symboliclink供应用层用使用的,如”\\.\C:”,”\??\C

Vinx Blog 6997

解决【x2openEuler环境检查未通过——CheckRepoCurlActor不通过】问题

摘要:x2openEuler使用默认repo源时出现环境检查失败问题,原因是默认源返回308永久重定向错误。解决方法包括:1)为CentOS主机配置华为yum源;2)在x2openEuler Web界面修改为自定义可用源。具体步骤包括备份原源、下载华为源、清除缓存,并通过curl测试确认新源可用性。最终成功配置openEuler-24.03-LTS-SP1版本的repo源后,环境检查顺利通过。

提供C#相关开发 、云计算、运维测试、网络安全相关技术分享与服务,有意向可联系。 258

寒江独钓windows 内核安全编程学习笔记(双机调试)

寒江独钓windows 内核安全编程学习笔记(双机调试) 双机调试虽然简单,但是步骤有点繁琐。参考了各位大神的博客,记录一下。 https://blog.youkuaiyun.com/nonecode/article/details/82491923 https://blog.youkuaiyun.com/u013299004/article/details/75033025 https://blog.youkuaiyun.com/...

gtm12345的博客 225

使用CUDA进行按流排序的内存分配的示例程序

在GPU编程中,按流排序的内存分配是一种常见的优化技术,它可以提高内存访问的效率。通过将内存分配与特定的CUDA流相关联,可以确保在GPU上的并发操作期间,内存分配操作与其他GPU计算操作同时进行,从而减少了潜在的内存访问延迟。请注意,上述示例中的代码仅供参考,并可能需要根据实际需求进行修改和调整。此外,为了完整性,我们省略了一些细节,例如主机指针的分配和释放,以及错误处理和错误检查等。在该示例中,我们创建了4个CUDA流,并使用内存池进行内存分配。然后,我们在每个流上执行了相应的内存访问操作,并使用。

Byte_O_O的博客 281

(八)DDR_PHY架构及功能——(PUB组成、初始化及Training流程、Clock关系)

文章目录一、DDR_PHY结构组成1.1、DDR Memory子系统1.2、DDR_PHY架构组成1.3、PUB模块功能实现流程1.3.1、DDR系统初始化流程1.3.2、PLL初始化流程 一、DDR_PHY结构组成 1.1、DDR Memory子系统   Memory子系统主要由DDR Controller和DDR_PHY(含DDR_IO)两个部分组成。DDR Controller主要承担其它子系统(如CPU)与Memory子系统进行数据交互时的传输效率及调度,DDR_PHY主要负责数据交互过程中的传输速

Mr.翟的博客 1万+

探索高效、安全的未来编程——拥抱Rust学习笔记

探索高效、安全的未来编程——拥抱Rust学习笔记 Rust,这门新兴的系统级编程语言,因其独特的设计理念和强大的安全特性,正在逐步改变我们对编程的看法。如果你追求极致的效率和内存安全性,那么Rust绝对值得你投入时间和精力去学习。让我们一起深入这个由顶尖工程师打造的开源项目——Rust学习笔记,开启一段全新的编程之旅。 项目介绍 《Rust学习笔记》是一个全面的在线资源库,旨在帮助开发者掌握Ru...

gitblog_00074的博客 421

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Java学习笔记:安全编程详解

Java学习笔记:安全编程详解

weixin_46619605的博客 852

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【Java学习】安全编程——学习笔记

Java安全编程一.古典密码学1.1 替换法1.2 移位法1.3 破解方法二.现代密码学2.1 散列函数(哈希函数)2.2 对称加密2.3 非对称加密2.4 如何设置密码才安全2.5 byte和bit2.6 base64和base582.7 ASCII表:2.8 加密模式:2.9 填充模式:2.10 消息摘要(数字摘要):2.11 非对称加密:2.12 数字签名2.13 数字证书 一.古典密码学 1.1 替换法 分为单表替换和多表替换 单表替换:替换的规则在同一张表上。 多表替换:替换的规则在不

CHANGE_A1的博客 1163

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

7 年的 web 编程生涯,今天系统整理学习web 安全学习笔记

为了帮助大家更好的学习网络安全,我给大家准备了一份网络安全入门/进阶学习资料,里面的内容都是适合零基础小白的笔记和资料,不懂编程也能听懂、看懂,所有资料共282G,朋友们如果有需要全套网络安全入门+进阶学习资源包,可以点击免费领取(如遇扫码问题,可以在评论区留言领取哦)~😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓👉优快云大礼包🎁:全网最全《网络安全入门&进阶学习资源包》免费分享**(安全链接,放心点击)**👈。

jennycisp的博客 1241

寒江独钓windows 内核安全编程学习笔记

寒江独钓windows 内核安全编程学习笔记 本博客记录自己的学习过程,如有侵犯或者打扰请告知。 由于项目的需求,第一次接触到驱动程序。开始学习了寒江大神的的内核安全编程。小白一个,第一章就遇到了问题。按照书中的步骤,成功对first服务build了之后,在对first进行net start 时发生了错误。按照网上的说法,说重启关闭强制签名,试了N多次还是不行。会出现错误577或者错误1275!!...

gtm12345的博客 345

VC++网络安全编程范例(1)--数字证书有效期验证--学习笔记

一、准备工作     1步、必须在#include前进行宏定义 #ifndef _WIN32_WINNT #define _WIN32_WINNT 0xXXXX  //其中0xXXXX对应于下面Windows版本宏定义中的0x0XXX,不同操作系统版本对应不同。 //   // _WIN32_WINNT version constants   //   #define _WIN32_

骑蜗牛散步的专栏 1094

《寒江独钓windows内核安全编程》学习笔记之一

iCrack007的博客 2287

TypeScript学习笔记:迈向更安全的JavaScript编程

本文将记录学习TypeScript的过程,包括其基本概念、类型系统、接口和泛型等特性,以及如何在项目中使用TypeScript。TypeScript是JavaScript的一个超集,提供了静态类型检查和多种其他特性,使得JavaScript编程更加安全和高效。了解TypeScript的基本概念、类型系统、接口和泛型等特性对于开发者来说具有重要意义。掌握TypeScript的使用可以帮助我们编写出更安全、可维护的JavaScript代码。

你若盛开,清风自来 1272

学习笔记分享-juc并发编程-concurrenthashmap(jdk7-原理-get、size)、linkedblockingqueue(原理-入队、出队、安全性分析)

学习笔记分享-juc并发编程-concurrenthashmap(jdk7-原理-get、size)、linkedblockingqueue(原理-入队、出队、安全性分析)

2301_81243975的博客 1064

6 年的 web 编程生涯,今天系统整理学习web 安全学习笔记

说来惭愧,6 年的 web 编程生涯,一直没有真正系统的学习 web 安全知识(认证和授权除外),这个月看了一本《Web 安全设计之道》,书中的内容多是从微软官方文档翻译而来,这本书的含金量不高,不过也不能说没有收获,本文简单记录一下我学习 Web 安全方面的笔记。

Y525698136的博客 1016
上一篇: JQuery版本冲突问题
下一篇: javascript访问 xml
shareCode
博客等级 码龄15年 125粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值