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

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有区别导致的

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