好事成双嘛,今天发了篇脱壳的文章,那就再发一个凑一对儿好了。
这是几周心血来潮想研究下bootkit,正好偶有个vista的虚拟机镜像,就搞了一下,结果就出了今天大家看到的这个半成品。(并且是很少的一部分)
一. 制作vista的bochs镜像
工具
把vmware镜像转成image格式 qemu-img.exe
qemu-img.exe x:\xx.vmdk x:\xx.img
二. 设置bochs
直接拷贝dlxlinux的设置,修改bochsrc.bxrc里的
ata0-master: type=disk, path="vista.img", cylinders = 0, heads=64, spt=64
cylinders 设为0
后面heads 和 spt 设为 8的整数倍
三. 完全记录vista启动过程
>b 0x7c00
>disassemble 0x7c00 0x7c20
00007c00: ( ) : xor ax, ax ; 33c0
00007c02: ( ) : mov ss, ax ; 8ed0
00007c04: ( ) : mov sp, 0x7c00 ; bc007c
00007c07: ( ) : mov es, ax ; 8ec0
00007c09: ( ) : mov ds, ax ; 8ed8
00007c0b: ( ) : mov si, 0x7c00 ; be007c
00007c0e: ( ) : mov di, 0x0600 ; bf0006
00007c11: ( ) : mov cx, 0x0200 ; b90002
00007c14: ( ) : cld ; fc
00007c15: ( ) : rep movsb byte ptr es:[di], byte ptr ds:[si] ;
f3a4
00007c17: ( ) : push ax ; 50
00007c18: ( ) : push 0x061c ; 681c06
00007c1b: ( ) : retf ; cb
把各种段寄存器置零,把0x7c00处的0x200个字节拷贝到0x0600处,并跳转到0x061c处执行
<bochs:46> disassemble 0x061c 0x0762
0000061c: ( ) : sti ; fb
0000061d: ( ) : mov cx, 0x0004 ; b90400
00000620: ( ) : mov bp, 0x07be ; bdbe07 这里是分区表
00000623: ( ) : cmp byte ptr ss:[bp], 0x00 ; 807e0000 判断该分区是否是活动分区
00000627: ( ) : jl .+0x000b ; 7c0b jl 00000634 若是80就跳转
00000629: ( ) : jnz .+0x0110 ; 0f851001 jnz 0000073D 若不是0就跳转,及出现错误
0000062d: ( ) : add bp, 0x0010 ; 83c510
00000630: ( ) : loop .+0xfff1 ; e2f1 loop 00000623
00000632: ( ) : int 0x18 ; cd18 reboots
00000634: ( ) : mov byte ptr ss:[bp], dl ; 885600 这里dl = 0x80,把分区
00000637: ( ) : push bp ; 55
00000638: ( ) : mov byte ptr ss:[bp+0x11], 0x05 ; c646 临时的循环变量
0000063c: ( ) : mov byte ptr ss:[bp+0x10], 0x00 ; c646 临时变量标识是否支持int 13H 扩展的第二个子集
00000640: ( ) : mov ah, 0x41 ; b441
00000642: ( ) : mov bx, 0x55aa ; bbaa55
00000645: ( ) : int 0x13 ; cd13 检查扩展Int13H是否存在,进位标志为1是不支持
00000647: ( ) : pop bp ; 5d
00000648: ( ) : jb .+0x000f ; 720f 不支持就跳转到00000659
0000064a: ( ) : cmp bx, 0xaa55 ; 81fb55aa cflage为0,同时bx = 0xAA55h说明支持int 13H 扩展
0000064e: ( ) : jnz .+0x0009 ; 7509 不支持就跳转到00000659
00000650: ( ) : test cx, 0x0001 ; f7c10100 判断是否支持哪一个API子集
;第一个子集提供了访问大硬盘所必须的功能, 包括 检查扩展 In13H
;是否存在( 41h ), 扩展读( 42h ), 扩展写( 43h ), 校验扇区( 44h ),
;扩展定位( 47h ) 和 取得驱动器参数( 48h ).
;第二个子集提供了对软件控制驱动器锁定和弹出的支持, 包括 检查扩展
;Int13H 是否存在( 41h ), 锁定/解锁驱动器( 45h ), 弹出驱动器( 46h ),
;取得驱动器参数( 48h ), 取得扩展驱动器改变状态( 49h ), int 15h.
;如果使用了调用规范中不支持的功能, BIOS 将返回错误码 ah = 01h,
;CF = 1.
00000654: ( ) : jz .+0x0003 ; 7403
00000656: ( ) : inc byte ptr ss:[bp+0x10] ; fe4610
00000659: ( ) : pushad ; 6660
0000065b: ( ) : cmp byte ptr ss:[bp+0x10], 0x00 ; 807e 是否支持第二个子集
0000065f: ( ) : jz .+0x0026 ; 7426 不支持就跳转到00000687
00000661: ( ) : push 0x00000000 ; 6668000000
00000667: ( ) : push dword ptr ss:[bp+0x8] ; 66ff7608 block_num
0000066b: ( ) : push 0x0000 ; 680000
0000066e: ( ) : push 0x7c00 ; 68007c buffer_addr
00000671: ( ) : push 0x0001 ; 680100 block_count
00000674: ( ) : push 0x0010 ; 681000 packet_size and reserved
00000677: ( ) : mov ah, 0x42 ; b442
00000679: ( ) : mov dl, byte ptr ss:[bp] ; 8a5600 驱动器号
0000067c: ( ) : mov si, sp ; 8bf4
0000067e: ( ) : int 0x13 ; cd13
;struct DiskAddressPacket
;{
; BYTE PacketSize; // 数据包尺寸:
; //(固定值,恒等于16,即10H,指本结构所占用的存储空间)
; BYTE Reserved; // ==0
; WORD BlockCount; // 要传输的数据块个数(以扇区为单位)
; DWORD BufferAddr; // 传输缓冲地址(segment:offset)
; QWORD BlockNum; // 磁盘起始绝对块地址
;};
;这里是从在MBR的分区表中读出1个扇区数据到0x7c00
00000680: ( ) : lahf ; 9f 把 eflage 低 8 位放进ah中
00000681: ( ) : add sp, 0x0010 ; 83c410 恢复堆栈
00000684: ( ) : sahf ; 9e 把 ah 写入 eflage 低 8 位
00000685: ( ) : jmp .+0x0014 ; eb14 jmp 0000069b
00000687: ( ) : mov ax, 0x0201 ; b80102 ah = 2, al = 1, 1扇区数
0000068a: ( ) : mov bx, 0x7c00 ; bb007c
0000068d: ( ) : mov dl, byte ptr ss:[bp] ; 8a5600 驱动器 (00H~7FH:软盘;80H~0FFH:硬盘)
00000690: ( ) : mov dh, byte ptr ss:[bp+0x1] ; 8a7601 磁头
00000693: ( ) : mov cl, byte ptr ss:[bp+0x2] ; 8a4e02 扇区
00000696: ( ) : mov ch, byte ptr ss:[bp+0x3] ; 8a6e03 柱面
00000699: ( ) : int 0x13 ; cd13
0000069b: ( ) : popad ; 6661
0000069d: ( ) : jnb .+0x001e ; 731e jnb 000006bd 正确读取数据就跳转到000006bd
0000069f: ( ) : dec byte ptr ss:[bp+0x11] ; fe4e11
000006a2: ( ) : jnz .+0x000c ; 0f850c00 jnz 000006b2
000006a6: ( ) : cmp byte ptr ss:[bp], 0x80 ; 807e0080
000006aa: ( ) : jz .+0x008a ; 0f848a00 jz 00000738
000006ae: ( ) : mov dl, 0x80 ; b280
000006b0: ( ) : jmp .+0xff82 ; eb82
000006b2: ( ) : push bp ; 55
000006b3: ( ) : xor ah, ah ; 32e4
000006b5: ( ) : mov dl, byte ptr ss:[bp] ; 8a5600
000006b8: ( ) : int 0x13 ; cd13
000006ba: ( ) : pop bp ; 5d
000006bb: ( ) : jmp .+0xff9c ; eb9c
000006bd: ( ) : cmp word ptr ds:0x7dfe, 0xaa55 ; 813ef
000006c3: ( ) : jnz .+0x006e ; 756e jnz 00000733 判断引导扇区结束标志
000006c5: ( ) : push word ptr ss:[bp] ; ff7600
000006c8: ( ) : call .+0x008a ; e88a00 call Func1
000006cb: ( ) : jnz .+0x0015 ; 0f851500 jnz 000006e4
000006cf: ( ) : mov al, 0xd1 ; b0d1
000006d1: ( ) : out 0x64, al ; e664
000006d3: ( ) : call .+0x007f ; e87f00 call Func1
000006d6: ( ) : mov al, 0xdf ; b0df
000006d8: ( ) : out 0x60, al ; e660
000006da: ( ) : call .+0x0078 ; e87800 call Func1
000006dd: ( ) : mov al, 0xff ; b0ff
000006df: ( ) : out 0x64, al ; e664
000006e1: ( ) : call .+0x0071 ; e87100
000006e4: ( ) : mov ax, 0xbb00 ; b800bb int 0x1a / AH=0xBB 没有查到是什么作用
000006e7: ( ) : int 0x1a ; cd1a
000006e9: ( ) : and eax, eax ; 6623c0
000006ec: ( ) : jnz .+0x003b ; 753b jnz 00000729
000006ee: ( ) : cmp ebx, 0x41504354 ; 6681fb5443
000006f5: ( ) : jnz .+0x0032 ; 7532 jnz 00000729
000006f7: ( ) : cmp cx, 0x0102 ; 81f90201
000006fb: ( ) : jb .+0x002c ; 722c jb 00000729
000006fd: ( ) : push 0x0000bb07 ; 666807bb00 eax
00000703: ( ) : push 0x00000200 ; 6668000200 ecx
00000709: ( ) : push 0x00000008 ; 6668080000 edx
0000070f: ( ) : push ebx ; 6653 ebx
00000711: ( ) : push ebx ; 6653 esp
00000713: ( ) : push ebp ; 6655 ebp
00000715: ( ) : push 0x00000000 ; 6668000000 esi
0000071b: ( ) : push 0x00007c00 ; 6668007c00 edi
00000721: ( ) : popad ; 6661 AX = 0xBB00
00000723: ( ) : push 0x0000 ; 680000
00000726: ( ) : pop es ; 07
00000727: ( ) : int 0x1a ; cd1a
00000729: ( ) : pop dx ; 5a
0000072a: ( ) : xor dh, dh ; 32f6
0000072c: ( ) : jmp far 0000:7c00 ; ea007c0000 jmp DBR 的代码中
00000731: ( ) : int 0x18 ; cd18
00000733: ( ) : mov al, byte ptr ds:0x7b7 ; a0b707
00000736: ( ) : jmp .+0x0008 ; eb08
00000738: ( ) : mov al, byte ptr ds:0x7b6 ; a0b607
0000073b: ( ) : jmp .+0x0003 ; eb03 jmp 00000740
0000073d: ( ) : mov al, byte ptr ds:0x7b5 ; a0b507
00000740: ( ) : xor ah, ah ; 32e4
00000742: ( ) : add ax, 0x0700 ; 050007
00000745: ( ) : mov si, ax ; 8bf0
00000747: ( ) : lodsb al, byte ptr ds:[si] ; ac
00000748: ( ) : cmp al, 0x00 ; 3c00
0000074a: ( ) : jz .+0xfffc ; 74fc jz 00000748
0000074c: ( ) : mov bx, 0x0007 ; bb0700
0000074f: ( ) : mov ah, 0x0e ; b40e
00000751: ( ) : int 0x10 ; cd10
00000753: ( ) : jmp .+0xfff2 ; ebf2 jmp 00000747
;Delay 无论向0x60还是0x64端口写东西前都有等状态寄存器0BF变0
00000755: ( ) : sub cx, cx ; 2bc9
00000757: ( ) : in al, 0x64 ; e464
00000759: ( ) : jmp .+0x0000 ; eb00 jmp 0000075b
0000075b: ( ) : and al, 0x02 ; 2402
0000075d: ( ) : loopne .+0xfff8 ; e0f8
0000075f: ( ) : and al, 0x02 ; 2402
00000761: ( ) : ret ; c3
DBR 分析
00007c00: ( ) : jmp .+0x0052 ; eb52 jmp 00007c54
后面是数据
nop
db "NTFS", 0
00007c54: ( ) : cli ; fa
00007c55: ( ) : xor ax, ax ; 33c0
00007c57: ( ) : mov ss, ax ; 8ed0 堆栈段寄存器置为0
00007c59: ( ) : mov sp, 0x7c00 ; bc007c 把0x7c00 置为栈顶
00007c5c: ( ) : sti ; fb
00007c5d: ( ) : push 0x07c0 ; 68c007
00007c60: ( ) : pop ds ; 1f 数据段寄存器置为0x07c0
00007c61: ( ) : push ds ; 1e
00007c62: ( ) : push 0x0066 ; 686600
00007c65: ( ) : retf ; cb 相当于jmp 07c0:0066 (0x07c0 << 4 + 0x0066 = 0x7c66)
00007c66: ( ) : mov byte ptr ds:0xe, dl ; 88160e00 Reserved sectors 置为0x80
00007c6a: ( ) : cmp dword ptr ds:0x3, 0x5346544e ; 66813e03004e544653 判断File system ID是否是ntfs
00007c73: ( ) : jnz .+0x0015 ; 7515 jnz 00007c8a
00007c75: ( ) : mov ah, 0x41 ; b441
00007c77: ( ) : mov bx, 0x55aa ; bbaa55
00007c7a: ( ) : int 0x13 ; cd13 检查扩展Int13H是否存在,进位标志为1是不支持
00007c7c: ( ) : jb .+0x000c ; 720c jb 00007c8a 不支持跳转
00007c7e: ( ) : cmp bx, 0xaa55 ; 81fb55aa
00007c82: ( ) : jnz .+0x0006 ; 7506 jnz 00007c8a 不支持跳转
00007c84: ( ) : test cx, 0x0001 ; f7c10100
00007c88: ( ) : jnz .+0x0003 ; 7503 jnz 00007c8d 支持第二api子集
00007c8a: ( ) : jmp .+0x00d2 ; e9d200 jmp 00007d5f
支持int 13H 第一个api子集
00007c8d: ( ) : push ds ; 1e
00007c8e: ( ) : sub sp, 0x0018 ; 83ec18
00007c91: ( ) : push 0x001a ; 681a00
00007c94: ( ) : mov ah, 0x48 ; b448
00007c96: ( ) : mov dl, byte ptr ds:0xe ; 8a160e00
00007c9a: ( ) : mov si, sp ; 8bf4
00007c9c: ( ) : push ss ; 16
00007c9d: ( ) : pop ds ; 1f
00007c9e: ( ) : int 0x13 ; cd13
;AH = 48h
;DL = 驱动器号
;DS:DI = 返回数据缓冲区地址
;取得驱动器参数
;struct DriveParametersPacket
;{
;WORD InfoSize; // 数据包尺寸:
;//(固定值,等于26,即1AH,指本结构所占用的存储空间)
;WORD Flags; // 信息标志
;DWORD Cylinders; // 磁盘柱面数
;DWORD Heads; // 磁盘磁头数
;DWORD SectorsPerTrack; // 每磁道扇区数
;QWORD Sectors; // 磁盘总扇区数
;WORD SectorSize; // 扇区尺寸 (以字节为单位)
;};
执行该int 0x13前的堆栈
<bochs:22> print-stack
Stack address size 2
| STACK 0x7be4 [0x001a]
| STACK 0x7be6 [0x07c0]
| STACK 0x7be8 [0x0000]
| STACK 0x7bea [0x0800]
| STACK 0x7bec [0x7e00]
| STACK 0x7bee [0x07be]
| STACK 0x7bf0 [0x0080]
| STACK 0x7bf2 [0xaa55]
| STACK 0x7bf4 [0x0080]
| STACK 0x7bf6 [0x0007]
| STACK 0x7bf8 [0x3000]
| STACK 0x7bfa [0x007c]
| STACK 0x7bfc [0x07c0]
执行该int 0x13后的堆栈
Stack address size 2
| STACK 0x7be4 [0x001a] InfoSize
| STACK 0x7be6 [0x0002] Flags
| STACK 0x7be8 [0x2000]
| STACK 0x7bea [0x0000] Cylinders
| STACK 0x7bec [0x0040]
| STACK 0x7bee [0x0000] Heads
| STACK 0x7bf0 [0x0040]
| STACK 0x7bf2 [0x0000] SectorsPerTrack
| STACK 0x7bf4 [0x0000]
| STACK 0x7bf6 [0x0200]
| STACK 0x7bf8 [0x0000]
| STACK 0x7bfa [0x0000] Sectors
| STACK 0x7bfc [0x0200] SectorSize
恢复堆栈
00007ca0: ( ) : lahf ; 9f
00007ca1: ( ) : add sp, 0x0018 ; 83c418
00007ca4: ( ) : sahf ; 9e
00007ca5: ( ) : pop ax ; 58 SectorSize
00007ca6: ( ) : pop ds ; 1f
00007ca7: ( ) : jb .+0xffe1 ; 72e1 jb 0x7c8a 失败的话就尝试第一api子集
00007ca9: ( ) : cmp ax, word ptr ds:0xb ; 3b060b00 判断SectorSize是否和bpb参数中的对应值一致
00007cad: ( ) : jnz .+0xffdb ; 75db jnz 0x7c8a
00007caf: ( ) : mov word ptr ds:0xf, ax ; a30f00 SectorSize
00007cb2: ( ) : shr word ptr ds:0xf, 0x04 ; c12e0f0004 SectorSize / 16
;这里是为了加到断基址上所以右移4位
00007cb7: ( ) : push ds ; 1e
00007cb8: ( ) : pop dx ; 5a
00007cb9: ( ) : xor bx, bx ; 33db
00007cbb: ( ) : mov cx, 0x2000 ; b90020
00007cbe: ( ) : sub cx, ax ; 2bc8
00007cc0: ( ) : inc dword ptr ds:0x11 ; 66ff061100 读了多少个Sector的计数
00007cc5: ( ) : add dx, word ptr ds:0xf ; 03160f00
00007cc9: ( ) : mov es, dx ; 8ec2 指向下一个Sector,接收copy数据
00007ccb: ( ) : inc word ptr ds:0x16 ; ff061600
00007ccf: ( ) : call .+0x0040 ; e84000 call ReadData
00007cd2: ( ) : sub cx, ax ; 2bc8
00007cd4: ( ) : jnbe .+0xffef ; 77ef
00007cd6: ( ) : mov ax, 0xbb00 ; b800bb
00007cd9: ( ) : int 0x1a ; cd1a
00007cdb: ( ) : and eax, eax ; 6623c0
00007cde: ( ) : jnz .+0x002d ; 752d
00007ce0: ( ) : cmp ebx, 0x41504354 ; 6681fb54435041
00007ce7: ( ) : jnz .+0x0024 ; 7524 jnz 00007d0d
00007ce9: ( ) : cmp cx, 0x0102 ; 81f90201
00007ced: ( ) : jb .+0x001e ; 721e
00007cef: ( ) : push ss ; 16
00007cf0: ( ) : push 0xbb07 ; 6807bb
00007cf3: ( ) : push ss ; 16
00007cf4: ( ) : push 0x0e70 ; 68700e
00007cf7: ( ) : push ss ; 16
00007cf8: ( ) : push 0x0009 ; 680900
00007cfb: ( ) : push ebx ; 6653
00007cfd: ( ) : push ebx ; 6653
00007cff: ( ) : push ebp ; 6655
00007d01: ( ) : push ss ; 16
00007d02: ( ) : push ss ; 16
00007d03: ( ) : push ss ; 16
00007d04: ( ) : push 0x01b8 ; 68b801
00007d07: ( ) : popad ; 6661
00007d09: ( ) : push cs ; 0e
00007d0a: ( ) : pop es ; 07
00007d0b: ( ) : int 0x1a ; cd1a
00007d0d: ( ) : jmp .+0x016a ; e96a01 jmp 00007E7A 跳转到下一个扇区的7A偏移处执行
;及开始执行ntldr代码
00007d10: ( ) : nop ; 90
00007d11: ( ) : nop ; 90
;ReadData
00007d12: ( ) : pushad ; 6660
00007d14: ( ) : push ds ; 1e
00007d15: ( ) : push es ; 06
00007d16: ( ) : mov eax, dword ptr ds:0x11 ; 66a11100
00007d1a: ( ) : add eax, dword ptr ds:0x1c ; 6603061c00 Hidden sectors 也就是起始扇区的开始
00007d1f: ( ) : push ds ; 1e
00007d20: ( ) : push 0x00000000 ; 666800000000
00007d26: ( ) : push eax ; 6650 BlockNum
00007d28: ( ) : push es ; 06
00007d29: ( ) : push bx ; 53 BufferAddr
00007d2a: ( ) : push 0x0001 ; 680100 BlockCount
00007d2d: ( ) : push 0x0010 ; 681000 PacketSize 和 Reserved
00007d30: ( ) : mov ah, 0x42 ; b442
00007d32: ( ) : mov dl, byte ptr ds:0xe ; 8a160e00 Reserved sectors
00007d36: ( ) : push ss ; 16
00007d37: ( ) : pop ds ; 1f
00007d38: ( ) : mov si, sp ; 8bf4
00007d3a: ( ) : int 0x13 ; cd13
00007d3c: ( ) : pop ecx ; 6659
00007d3e: ( ) : pop bx ; 5b
00007d3f: ( ) : pop dx ; 5a
00007d40: ( ) : pop ecx ; 6659
00007d42: ( ) : pop ecx ; 6659
00007d44: ( ) : pop ds ; 1f
00007d45: ( ) : jb .+0x0016 ; 0f821600 jb 00007d5f
00007d49: ( ) : inc dword ptr ds:0x11 ; 66ff061100
00007d4e: ( ) : add dx, word ptr ds:0xf ; 03160f00
00007d52: ( ) : mov es, dx ; 8ec2
00007d54: ( ) : dec word ptr ds:0x16 ; ff0e1600
00007d58: ( ) : jnz .+0xffbc ; 75bc
00007d5a: ( ) : pop es ; 07
00007d5b: ( ) : pop ds ; 1f
00007d5c: ( ) : popad ; 6661
00007d5e: ( ) : ret ; c3
不支持int 13H 第一个api子集
00007d5f: ( ) : mov al, byte ptr ds:0x1f8 ; a0f801
00007d62: ( ) : call .+0x0008 ; e80800 call PrintErrorMsg
00007d65: ( ) : mov al, byte ptr ds:0x1fb ; a0fb01
00007d68: ( ) : call .+0x0002 ; e80200 call PrintErrorMsg
00007d6b: ( ) : jmp .+0xfffe ; ebfe hlt
PrintErrorMsg
00007d6d: ( ) : mov ah, 0x01 ; b401
00007d6f: ( ) : mov si, ax ; 8bf0
00007d71: ( ) : lodsb al, byte ptr ds:[si] ; ac
00007d72: ( ) : cmp al, 0x00 ; 3c00
00007d74: ( ) : jz .+0x0009 ; 7409
00007d76: ( ) : mov ah, 0x0e ; b40e
00007d78: ( ) : mov bx, 0x0007 ; bb0700
00007d7b: ( ) : int 0x10 ; cd10
00007d7d: ( ) : jmp .+0xfff2 ; ebf2
00007d7f: ( ) : ret ; c3
总结DBR,拷贝Hidden sectors + 1之后的16个Sector到7e00开始扇区中,然后跳转到0x7e7a处开始执行
BOOTMGR 分析
00007e7a: ( ) : movzx eax, word ptr ds:0xb ; 660fb7060b00 Bytes per sector
00007e80: ( ) : movzx ebx, byte ptr ds:0xd ; 660fb61e0d00 Sectors per cluster
00007e86: ( ) : mul eax, ebx ; 66f7e3 计算每个蔟的字节数
00007e89: ( ) : mov dword ptr ds:0x252, eax ; 66a35202 dword ptr[0x7e52] < eax
00007e8d: ( ) : mov ecx, dword ptr ds:0x40 ; 668b0e4000 FILE record size indicator
00007e92: ( ) : cmp cl, 0x00 ; 80f900
00007e95: ( ) : jnle .+0x000e ; 0f8f0e00 jnle 00007ea7
00007e99: ( ) : neg cl ; f6d9
00007e9b: ( ) : mov eax, 0x00000001 ; 66b801000000
00007ea1: ( ) : shl eax, cl ; 66d3e0 0x400
00007ea4: ( ) : jmp .+0x0008 ; eb08 jmp 00007eae
00007ea6: ( ) : nop ; 90
00007ea7: ( ) : mov eax, dword ptr ds:0x252 ; 66a15202
00007eab: ( ) : mul eax, ecx ; 66f7e1 计算File Record Entry的大小
; (字节为单位)
00007eae: ( ) : mov dword ptr ds:0x266, eax ; 66a36602
00007eb2: ( ) : movzx ebx, word ptr ds:0xb ; 660fb71e0b00 Bytes per sector
00007eb8: ( ) : xor edx, edx ; 6633d2
00007ebb: ( ) : div eax, ebx ; 66f7f3
00007ebe: ( ) : mov dword ptr ds:0x256, eax ; 66a35602
00007ec2: ( ) : call .+0x0495 ; e89504 call 0000835a
偶现在也就分析到这儿了,以后再续吧
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课