VisualC++信息安全编程(1)内联汇编实现NT下读MBR
来源:互联网 发布:淘宝保证金在哪里交 编辑:程序博客网 时间:2024/05/21 14:51
MBR,全称为Master Boot Record,即硬盘的主引导记录。
为了便于理解,一般将MBR分为广义和狭义两种:广义的MBR包含整个扇区(引导程序、分区表及分隔标识),也就是上面所说的主引导记录;而狭义的MBR仅指引导程序而言。
硬盘的0柱面、0磁头、1扇区称为主引导扇区(也叫主引导记录MBR)。它由三个部分组成,主引导程序、硬盘分区表DPT(Disk Partition table)和硬盘有效标志(55AA)。在总共512字节的主引导扇区里主引导程序(boot loader)占446个字节,第二部分是Partition table区(分区表),即DPT,占64个字节,硬盘中分区有多少以及每一分区的大小都记在其中。第三部分是magic number,占2个字节,固定为55AA。
我们来实现在VC++下面实现读取MBR。
C++内联汇编
在C++代码中插入__asm {}即可
;**************************************************.386p.model flat, stdcall ;平坦内存模式option casemap :none ; 大小写敏感;***************************************************include \masm32\include\windows.incinclude \masm32\include\user32.incinclude \masm32\include\kernel32.incinclude \masm32\include\advapi32.inc includelib \masm32\lib\user32.libincludelib \masm32\lib\kernel32.libincludelib \masm32\lib\advapi32.libShowError proto :DWORDShowBuffer proto .data ;数据段FileName db '\\.\PHYSICALDRIVE0',0 ;打开第一个物理硬盘align 4;双字对齐readeddd 0 ;实际读出的字节数Buffer db 512 dup (0) ;存放读出的数据的缓冲区hFile dd 0 ;句柄存放处Captiondb 'NT中读写物理磁盘',0 ;Caption的字符串ErrCreatedb '建文件错,该程序不能在Win9X下执行!',0 ;出错信息ErrReaddb '读盘错误!',0 ;出错信息ShowTextdb 4096*3 dup (0) ;转换后用于显示的字符串Numberdb '0123456789ABCDEF' ;16进制数转换为ACSII码要用到的数据.code ;代码段main:;建立文件invoke CreateFile,offset FileName,\GENERIC_READ,FILE_SHARE_READ OR FILE_SHARE_WRITE,\NULL,OPEN_EXISTING,NULL,NULLmov [hFile],eaxcmp eax,INVALID_HANDLE_VALUEjnz readinvoke ShowError,offset ErrCreate ;显示错误信息read: ;读数据invoke ReadFile,eax,offset Buffer,512,offset readed,NULLcmp eax,0jnz showinvoke ShowError,offset ErrRead ;显示错误信息show: invoke ShowBuffer ;显示读出的内容invoke CloseHandle ,[hFile] ;关闭文件句柄invoke ExitProcess,0 ;退出ShowError proc ,MESSAGE:DWORD ;显示出错信息并退出invoke MessageBoxA,NULL,MESSAGE,offset Caption,MB_OKcmp [hFile],0jz ShowErrorEndinvoke CloseHandle ,[hFile];关闭句柄ShowErrorEnd:invoke ExitProcess,0;退出ShowError endpShowBuffer proc ;显示所读出的信息 ;把16进制数据转换成ASCII码的形式mov esi,offset Buffer;数据mov edi,offset ShowText ;转换后的数据mov ebx,offset Numbermov ecx,0xor eax,eaxAgain:cmp [readed],0jz ConversionEnddec [readed]mov al,[esi]push eax shr eax,4 ;高4位mov al,[ebx+eax]mov byte ptr[edi],al inc edipop eaxand eax,0FH ;低4位 mov al,[ebx+eax]mov byte ptr[edi],alinc edi mov byte ptr[edi],' ';空格inc edi inc esi inc ecxcmp ecx,16jnz Againxor ecx,ecxmov byte ptr[edi-1],13;是回车jmp AgainConversionEnd:;显示转换后的字符串invoke MessageBoxA,NULL,offset ShowText,offset Caption,MB_OKretShowBuffer endpend main
- VisualC++信息安全编程(1)内联汇编实现NT下读MBR
- VisualC++信息安全编程(2)内联汇编实现NTFS文件恢复
- VisualC++信息安全编程(3)内联汇编实现主引导区备份与恢复
- VisualC++信息安全编程(4)实现文件自我删除
- VisualC++信息安全编程(4)实现文件自我删除
- VisualC++信息安全编程(4)实现文件自我删除
- VisualC++信息安全编程
- VisualC++信息安全编程(6)穿透卡巴斯基的键盘记录编程-网络战技术
- VisualC++信息安全编程(6)穿透卡巴斯基的键盘记录编程-网络战技术
- VisualC++信息安全编程(5)获取windows登陆账户密码
- VisualC++信息安全编程(5)获取windows登陆账户密码
- C++编程->汇编内联实现加法运算
- 内联汇编 实现 strlen
- GCC内联汇编(1)Get started
- Gcc内联汇编1
- C++编程->加法的七种方式实现(命名空间,类,模板,结构体,函数,位运算,内联汇编)
- VC++信息安全编程(1)分析实现程序自我复制
- x86内联汇编(一)
- 阶乘之计算从入门到精通--汇编版
- 软件测试
- 关于RROR: JDWP Unable to get JNI 1.2 environment的错误解释
- 变与不变——2012新年献辞
- Windows7旗舰版下安装Oracle 11g R2
- VisualC++信息安全编程(1)内联汇编实现NT下读MBR
- VisualC++信息安全编程(2)内联汇编实现NTFS文件恢复
- VisualC++信息安全编程(3)内联汇编实现主引导区备份与恢复
- 东芝L730-T21N 升级小记
- VisualC++信息安全编程(4)实现文件自我删除
- VisualC++信息安全编程(5)获取windows登陆账户密码
- 各种NO-SQL的Web界面管理工具
- ibatis+spring存储blob数据
- SIP与H323