首页 > 其他分享 >MBR病毒IDA逆向分析与重写内容解读

MBR病毒IDA逆向分析与重写内容解读

时间:2022-08-26 23:25:50浏览次数:58  
标签:字符 函数 关机 病毒 重写 loc MBR IDA

1 运行病毒

拍摄快照

img

运行病毒,直接关机

img

重启后出现下面的页面

img

输入任意字符,回车后会清空

img

可以知道,该病毒破坏了windows的启动过程,要进入系统必须输入正确的口令,该病毒属于MBR病毒的类型

2 基础知识

硬盘的主引导区在0柱面0磁道1扇区,包括硬盘主引导记录MBR(Main Boot Record)、四个分区表DPT(Disk Partition Table)信息和主引导记录有效标志字三部分,如表所示:

0000-0088 Master Boot Record主引导程序 主引导程序 0089-01BD 出错信息数据区 数据区 01BE-01CD 分区项1(16字节) 分区表 01CE-01DD 分区项2(16字节) 01DE-01ED 分区项3(16字节) 01EE-01FD 分区项4(16字节) 01FE 55 结束标志 01FF AA

主引导记录MBR从0000H开始到00D9H结束,共218个字节。MBR的作用就是检查分区表是否正确以及确定哪个分区为引导分区,并在程序结束时把该分区的启动程序(也就是操作系统引导扇区)调入内存加以执行。MBR是由分区程序(例如DOS 的Fdisk.exe)产生的,在不同的操作系统平台下,这个扇区的内容可能不完全相同。

3 猜解口令

恢复快照到运行病毒前

如果要找到开机口令那应该是非常的容易,将病毒拖入x32dbg,进行字符串搜索就可以锁定这个特殊的字符串,猜测其为口令

img

4 逆向分析

下面逆向分析病毒原理

首先使用Exeinfo PE查壳,发现无壳

img

IDA中查看汇编指令,发现并没有很多识别不出来的红色语句,所以并没有花指令,到此可以知道病毒并没有保护

img

既然涉及到关机,那么在windows系统下一定涉及到关机的API函数,经过查阅资料,可以找到

img

查找字符串

img

找到关机API位置

img

查看其反编译代码

img

向上找到sub_4456D0函数

img

查看函数内容

img

找到当前进程伪句柄函数GetCurrentProcess、取得程序访问标记函数OpenProcessToken、查找进程权限函数LookupPrivilegeValue、获得关机权限函数AdjustTokenPrivileges,其作用为为关机做好提权

回到关机函数sub_4455E0,交叉引用向上查询

img

img

img

在这个函数中我们会发现关机函数的上面有两个一样的函数,其参数不一样

img

结合之前字符串搜索中发现的本机电脑磁盘标识符,因此可以猜测是完成了MBR的读写操作

img

在病毒感染前使用winhex查看磁盘的MBR

img

找到关机函数的地址,在X32dbg调试中设置断点,然后运行

img

img

再次查看MBR,发现被修改

img

5 重写内容分析

粘贴至新文件,导出MBR被重写的数据

img

将其拖入IDA进行反汇编分析

注意选择no,引导程序为16位

img

5.1 int 10h中断——屏幕显示

首先 int 10中断,这是BIOS对系统屏幕显示器所提供的服务程序,调用int 10h中断来控制显示器的显示控制显示器的显示

其中ES:BP是字符串地址,即00C2

img

cx是14h,即串的长度为22字节

因此确定了开始屏幕上显示的**qq-17412666**

AH = 13,功能号,表示显示字符串

BH表示页号

DH DL表示起始行列

img

5.2 int 16h中断——键盘读入

等待键盘键入字符,其中al代表键盘输入的字符

img

5.3 第一次int 13h中断——密钥比较

下面是从扇区写入内存的中断操作,我们逐步探讨

img

首先涉及到字符的比较,8对应的ASCII码是退格,如果检测到退格键则会跳转到loc_46

img

我们看一下loc_46的内容,属于是清空操作,与退格键的功能对应

img

第二次比较是与0Dh对应的ASCII码回车的比较,如果用户输入完毕进行了回车的话,那么就会跳转到loc_52

img

我们看一下loc_52的内容,一个段寄存器的转换,然后清空bx,继续进行下面的操作

img

若不是退格和回车键的话,就继续存入字符,[bx]存入键盘输入的字符,然后地址+2,cx记录输入字符的个数

img

下面将注意力集中在回车之后的操作

loc_58这里给si写入了一个很重要的地址

img

其正好是以下字符串的初始地址

img

下面就开始字符的比较,al是键盘输入的字符,ah是上面的字符串中的逐个字符,如果不相等的话会跳转到loc_9C进行出错处理;每个字符如果比较完成,就会取下一个字符继续比较,完成循环,loop循环次数由cx决定,即我们输入的字符的数量

img

再往下是为中断做参数准备

img

所以,按照上面的分析,我们只要将输入的字符与d8h地址开始的字符逐一比较,这就是口令

5.4 第二次int 13h中断——MBR写回

img

从内存将MBR写入扇区

6 遇到的问题

输入我们分析的口令之后并没有进入系统,而是出现了下面的情况,卡死在下面的页面,这个问题到现在还没有解决

img

和同学讨论发现,XP虚拟机不会存在这样的问题,可能是win7的引导与xp有区别导致的

标签:字符,函数,关机,病毒,重写,loc,MBR,IDA
From: https://www.cnblogs.com/yuxiaohan1236/p/16629534.html

相关文章

  • frida打印类下方法模板
    Java.use('类名').class.getDeclaredMethods().forEach(function(method){varmethodName=method.toString();console.log("methodname="+methodName);......
  • DRF当中序列化器中通过重写create()来实现保护登录保护
    在DRF原来源码框架中,我们知道保存的用户信息时,用户的密码是被明文保存到数据库中。代码实classUserRegisterModelSerializer(serializers.ModelSerializer)   """......
  • 自己重写的基于BootStrap的记住选择
    问题背景:(1)在Ruoyi中,使用弹窗式列表获取合同对应商品,再选择增加商品;(2)要能翻页保存点击记录(3)经过长时间检测,发现原Ruoyi自带的  $.table.selectColumns("userCode"); ......
  • Flink1.10定义UDAGG遇到SQL validation failed. null 问题
    按照以下代码测试定义的UDAGG会一直出现org.apache.flink.table.api.ValidationException:SQLvalidationfailed.null问题importorg.apache.flink.configuration.Jo......
  • 51单片机 idata pdata xdata
    1内部RAM 内部RAM共256个字节,分为两个部分,低128字节和高128字节,低128字节是传统51单片机的地址,既可以直接寻址也可以间接寻址,高128位是在8052中扩展的,这部分RAM和特殊......
  • IDA Pro 7 for Mac(最强交互式反汇编工具)中文版
    IDAProformac全名InteractiveDisassemblerProfessional,是目前最棒的一个静态反编译软件,小编这次带来了支持macos10.15系统的idapro7破解版资源,它支持数十种CPU指令......
  • 参数校验---gin框架内置使用validator
    type SignUpParam struct {    Age       uint8 `json:"age" binding:"gte=1,lte=130"`    Name      string`json:"name" binding:"req......
  • 算法提高课 第二章 迭代加深、双向DFS、IDA*
    一、迭代加深适用场景:某些分支的层数特别深,但答案在比较浅的层数里170.加成序列剪枝一:优先枚举较大的数减少搜索层数剪枝二:排除等效冗余前面任意两个数的和可能相等......
  • flex项目属性align-self属性重写align-item属性
    <style>#main{width:220px;height:300px;border:1pxsolidblack;display:-webkit-flex;/*Safari*/-webkit-align-items:flex-start;/*Saf......
  • SQLAlchemy学习-10. validates()校验器
    前言向属性添加“验证”的一种快速方法是使用validates()装饰器。校验器属性验证器可以引发异常,停止改变属性值的过程,或者可以将给定值更改为不同的值。与所有属性扩......