草庐IT

自己动手从零写桌面操作系统GrapeOS系列教程——23.从硬盘读取文件

学习操作系统原理最好的方法是自己写一个简单的操作系统。本讲代码文件为boot.asm,要读取的文件为data.txt。一、在FAT16文件系统中读取文件的流程在GrapeOS中用到的文件少且小,所有文件都放在了根目录下,数量不会超过16个,占用的簇不会超过254个。所以读取目录项只需要读取根目录的第1个扇区即可,读取FAT表项也只需读取FAT1表的第1个扇区即可。以下是读取文件的流程图:二、代码及讲解boot.asm中的代码如下:;--------------------定义常量--------------------;FAT16目录项中各成员的偏移量:;名称偏移长度描述DIR_Nameequ

自己动手从零写桌面操作系统GrapeOS系列教程——21.汇编语言写硬盘实战

学习操作系统原理最好的方法是自己写一个简单的操作系统。在上一讲中我们学习了用汇编语言读硬盘,本讲我们来学习用汇编语言写硬盘。同样也是设计一个简单的实验,实验内容为:在内存中准备一段有特征的512字节数据,地址为0x7e00~0x7fff,其特征是前3个字节依次为4、5、6,最后3个字节依次为6、5、4。然后将该段内存数据写入到硬盘的第2个扇区,并查看虚拟硬盘第2个扇区的数据是否与内存中0x7e00~0x7fff的数据一致,如果一致则说明写硬盘成功。本讲代码文件只有一个boot2.asm。boot2.asm代码如下:;定义常量DISK_BUFFERequ0x7e00;临时存放数据用的缓存区,放到

自己动手从零写桌面操作系统GrapeOS系列教程——20.汇编语言读硬盘实战

学习操作系统原理最好的方法是自己写一个简单的操作系统。本讲我们设计一个简单的读硬盘实验。通过一定的方法使硬盘第二个扇区的前3个字节依次为1、2、3,最后3个字节依次为3、2、1,中间的506个字节全为0。然后通过读硬盘程序将硬盘第二个扇区的数据读取到内存0x7e00-0x7fff的地方,也就是内存中MBR之后的512个字节。最后通过QEMU+DGB调试的方式来查看内存中0x7e00-0x7fff的数据,是否与硬盘第二个扇区中的数据一致,如果一致说明读硬盘成功。本讲代码文件共2个:data1.asmboot1.asm下面我们开始实验。一、设置硬盘第二个扇区中的数据data1.asm代码如下:db

What is UDS Service 0x10 - Diagnostic Session Control ?

WhyneedtheUDSService0x10?ECU在正常工作时会处于某一个会话模式下,上电后会自动进入默认会话模式,所以ECU启动后我们不需要输入0x1001来进入该会话模式。ECU的不同会话模式间存在一定的状态转换关系规则(特定逻辑)。初次接触UDS的话,可能不太理解这个0x10服务的含义和用途,我们通过一个隐喻公司的大厅和两个私密的会议室的例子来进行类比。例如:我们将ECU之间的通讯类比成两个员工之间的对话。两个人在公司的大厅随便畅所欲言,随意讨论非私密性的话题,这个场景类似默认会话,不会对安全性有要求,无需刻意寻找专门使用场所,即不需要专门会话控制进入此模式,上电即默认进入。如果两

What is UDS Service 0x10 - Diagnostic Session Control ?

WhyneedtheUDSService0x10?ECU在正常工作时会处于某一个会话模式下,上电后会自动进入默认会话模式,所以ECU启动后我们不需要输入0x1001来进入该会话模式。ECU的不同会话模式间存在一定的状态转换关系规则(特定逻辑)。初次接触UDS的话,可能不太理解这个0x10服务的含义和用途,我们通过一个隐喻公司的大厅和两个私密的会议室的例子来进行类比。例如:我们将ECU之间的通讯类比成两个员工之间的对话。两个人在公司的大厅随便畅所欲言,随意讨论非私密性的话题,这个场景类似默认会话,不会对安全性有要求,无需刻意寻找专门使用场所,即不需要专门会话控制进入此模式,上电即默认进入。如果两

从零写一个兼容MySQL/Oracle的Proxy中件间(一)《初识Oracle的通信协议》

0.前言MySQL由于开源的原因,有各式各样的中件间Proxy,极大的丰富了做高可用或迁移的方案,习惯了MySQL生态圈的灵活和便利,Oracle官方不开源代码和协议,没有中间件proxy,显得很笨重。比如以下的方案就会很不好办:实时抓取Oralce的访问SQL日志慢日志捕获和收集高可用中件间Proxy在故障时自动切换SQL访问黑名单。基于以上的一些困难,打算自己从头写一个兼容MySQL/Oracle的中件间,希望从中件间层同时支持两种数据库。方便我们做数据库的高可用管理和从Oracle到MySQL的迁移。这个计划是在年前的2021年最后一次组内会议上提出来的构想。元旦放假期间我就一直在想这事

从零写一个兼容MySQL/Oracle的Proxy中件间(一)《初识Oracle的通信协议》

0.前言MySQL由于开源的原因,有各式各样的中件间Proxy,极大的丰富了做高可用或迁移的方案,习惯了MySQL生态圈的灵活和便利,Oracle官方不开源代码和协议,没有中间件proxy,显得很笨重。比如以下的方案就会很不好办:实时抓取Oralce的访问SQL日志慢日志捕获和收集高可用中件间Proxy在故障时自动切换SQL访问黑名单。基于以上的一些困难,打算自己从头写一个兼容MySQL/Oracle的中件间,希望从中件间层同时支持两种数据库。方便我们做数据库的高可用管理和从Oracle到MySQL的迁移。这个计划是在年前的2021年最后一次组内会议上提出来的构想。元旦放假期间我就一直在想这事

驱动开发:内核枚举Minifilter微过滤驱动

Minifilter是一种文件过滤驱动,该驱动简称为微过滤驱动,相对于传统的sfilter文件过滤驱动来说,微过滤驱动编写时更简单,其不需要考虑底层RIP如何派发且无需要考虑兼容性问题,微过滤驱动使用过滤管理器FilterManager提供接口,由于提供了管理结构以及一系列管理API函数,所以枚举过滤驱动将变得十分容易。通常文件驱动过滤是ARK重要功能之一,如下是一款闭源ARK工具的输出效果图。由于MiniFilter提供了FltEnumerateFilters函数,所以只需要调用这些函数即可获取到所有的过滤器地址,我们看下微软公开的信息。NTSTATUSFLTAPIFltEnumerateF

驱动开发:内核枚举Minifilter微过滤驱动

Minifilter是一种文件过滤驱动,该驱动简称为微过滤驱动,相对于传统的sfilter文件过滤驱动来说,微过滤驱动编写时更简单,其不需要考虑底层RIP如何派发且无需要考虑兼容性问题,微过滤驱动使用过滤管理器FilterManager提供接口,由于提供了管理结构以及一系列管理API函数,所以枚举过滤驱动将变得十分容易。通常文件驱动过滤是ARK重要功能之一,如下是一款闭源ARK工具的输出效果图。由于MiniFilter提供了FltEnumerateFilters函数,所以只需要调用这些函数即可获取到所有的过滤器地址,我们看下微软公开的信息。NTSTATUSFLTAPIFltEnumerateF

巧用Windows事件日志“隐藏”载荷

背景根据卡巴斯基发布的研究报告发现一项恶意活动,其中的技术涉及将shellcode直接放入Windows事件日志,Windows事件日志可以被攻击者用来掩盖特洛伊木马病毒的恶意使用。实现了”无文件”攻击技术,下面就利用该涉及的技术,简单尝试一下。前置知识Windows事件日志Windows默认事件日志查看器为eventvwr.msc,能实现简单的使用,Win+R键后输入eventvwr回车即能打开。Windows主要的日志在“Windows日志”中,该文件夹中包含所有Windows系统上的五个标准类别。比较常用的Windows日志有系统日志、安全日志、应用程序日志这三个日志内容。应用程序安全S