读取硬盘的MBR引导扇区(Windows各系统通用)
来源:互联网 发布:开发java最好用的软件 编辑:程序博客网 时间:2024/05/18 11:45
原文:
http://bbs.fishc.com/thread-18255-1-1.html
http://bbs.fishc.com/thread-18256-1-1.html
-----------------------------------------------------------------------------------------------------------
知识普及:
硬盘的引导扇区位于 0 磁道 0 磁头 1 扇区位置,该扇区存放着系统的引导程序和硬盘的分区表等重要信息。另外小甲鱼八卦一下,该扇区常常是病毒的重点攻击目标!
实现要求:读取硬盘引导扇区并保存为boot.ini文件
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
实现原理:
上节课小甲鱼不是说会告诉大家如何在用户模式下直接访问硬盘么?嗯,而且承诺绝对简单通俗。好吧,事实上,硬盘内核驱动程序将硬盘作为一个文件,文件名为:"\\.\\physicaldrive0"
我们可以利用这个鲜为人知的文件名,通过 CreateFile, ReadFile, WriteFile 和 DeviceIoControl API 来进行访问硬盘。
代码及详细注释:
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>; by 小甲鱼, http://www.fishc.com;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>; 功能:读取硬盘引导扇区并保存于boot.ini文件中;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> .386 .model flat,stdcall option casemap:noneinclude windows.incinclude comdlg32.incinclude user32.incinclude kernel32.incincludelib comdlg32.libincludelib user32.libincludelib kernel32.lib .dataszFileName db '\\.\\physicaldrive0', 0 ; 硬盘设备名 .data?szBuffer db 512 dup (?)@hFile dd ?@dwBytesRead dd ?@szLogFile db MAX_PATH dup (?) .constszNewFile db 'boot.ini', 0szErrOpenFile db '无法打开硬盘文件!', 0szErrCreateFile db '无法创建boot.ini文件!', 0szSuccess db '成功读取硬盘引导区并写入boot.ini文件!', 0 szCaption db '鱼C工作室', 0 .codestart: invoke CreateFile, ; 打开或创建文件 addr szFileName, ; 文件的名字 GENERIC_READ, ; 允许读访问 FILE_SHARE_READ, ; 允许对文件进行共享访问 0, ; 指向一个SECURITY_ATTRIBUTES结构的指针 OPEN_EXISTING, ; 文件必须存在 FILE_ATTRIBUTE_NORMAL, ; 默认属性 0 .if eax == INVALID_HANDLE_VALUE ; 打开文件错误 invoke MessageBox, NULL, addr szErrOpenFile, addr szCaption, MB_OK jmp exit .endif mov @hFile, eax ; 返回文件句柄,这时候硬盘被看成是一个文件的哦~ invoke ReadFile, ; 从文件中读取数据 @hFile, ; 文件句柄 addr szBuffer, ; 用于保存读入数据的缓冲区 sizeof szBuffer, ; 需要读入的字符数 addr @dwBytesRead, ; 实际读入的字节数 0 invoke CloseHandle, @hFile ; 小甲鱼温馨提醒:记得文件打开后要擦屁股->关闭文件,否则造成内存泄漏 invoke lstrcpy, ; 拷贝字符串 addr @szLogFile, addr szNewFile invoke CreateFile, ; 创建boot.ini文件 addr @szLogFile, GENERIC_WRITE, FILE_SHARE_READ, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0 .if eax != INVALID_HANDLE_VALUE mov @hFile, eax invoke WriteFile, ; 将数据写入boot.ini文件 @hFile, addr szBuffer, sizeof szBuffer, addr @dwBytesRead, 0 invoke CloseHandle, @hFile ; 擦屁股 invoke wsprintf, ; 这个事实上常用的函数,如果有问题的鱼油可以在论坛搜索下,有篇文章中小甲鱼已经做好了详细的解释给大家。 addr szBuffer, addr szSuccess invoke MessageBox, NULL, addr szBuffer, addr szCaption, MB_OK .else invoke MessageBox, NULL, addr szErrCreateFile, addr szCaption, MB_OK .endif exit: invoke ExitProcess, NULL end start
0 0
- 读取硬盘的MBR引导扇区(Windows各系统通用)
- 读取硬盘的第一扇区数据(MBR+DPT+Signature)
- 主引导扇区代码(MBR)
- 主引导扇区代码(MBR)
- MBR主引导扇区上,0扇区,512个字节,(主引导区一般在C盘,记录整个硬盘的情况;多系统其他盘也有引导区)
- 硬盘的那些事(主分区、扩展分区、逻辑分区、活动分区、系统分区、启动分区、引导扇区、MBR等)
- 硬盘的那些事(主分区、扩展分区、逻辑分区、活动分区、系统分区、启动分区、引导扇区、MBR等)
- 读取硬盘扇区的数据
- 硬盘的那些事(主分区、扩展分区、逻辑分区、活动分区、系统分区、启动分区、引导扇区、MBR等
- 硬盘和软盘的引导扇区结构
- 硬盘和软盘的引导扇区结构
- 主引导扇区(MBR)释疑
- 硬盘主引导扇区
- 硬盘主引导扇区
- 硬盘扇区探索MBR篇
- 主引导扇区代码(MBR)分析(转)
- 主引导扇区(Master Boot Record:MBR)
- 认识硬盘主引导扇区
- 基于事件I/O模型的socket通信
- HDU 3982 半平面交+圆与多边形面积交
- 指针常量与常量指针
- 史上最简单的带流控功能的http server
- Arcpy基础入门-6、遍历
- 读取硬盘的MBR引导扇区(Windows各系统通用)
- Get和Post的区别
- clang_complete插件所需的libclang 的编译
- axjzsubggnabvvdshnfljqydcl
- 教育中的反思精神——从书籍《创造:一流大学之魂》的一则评论谈起
- Sonar的安装
- 在虚拟机上同步服务器上的时间_Hbase
- 士兵杀敌(三)
- 黑马程序员_java基础