1、usbzip+引导技术分析usbzip+引导技术分析 通过对ultroiso的usbzip+启动方式的分析,现分享心得如下: 一.usbzip简介 ZIP一种软驱,在U盘广泛普及的今天很少用了,但是U盘也需要格式,象量产出的usb-cdrom光盘格式,格式化出的hdd硬盘格式,当然还有zip软盘格式. zip是一个软盘,他的结构是hdd的一个子集,很象hdd硬盘的一个卷,但没有mbr,不能分区,形式和硬盘其中的一个分区fat32分区完全一样. 二、usbzip+原理 usbzip+的目标是兼容usbzip和usbhdd两种格式,他的技术核心是启动扇区同时拥有硬盘分区和卷bpb表,这样他看起来即
2、是一个硬盘,又是一个软盘, 目的就是欺骗bios,试图(只是试图)让bios把他当软盘和硬盘都可以引导。这个设计是很棒的,但是实际测试效果却不太好。因为bios版本种类太多, 不是个个bios都会上当的。 注:BPB是Bios Paramater Block的缩写,在分区的第一个扇区,保存着卷的资料,有大量信息。 usbzip+的核心技术就是hdd硬盘分区表和软盘(卷)bpb表双格式,其他没有对zip增强什么。 三、usbzip+和usbhdd+的区别( 二者完全不同) usbzip+兼容zip和hdd,但usbhdd+反过来并不兼容zip,他们是完全不同的技术。usbhdd+是对usbhdd
3、的加强,他是一个c/h/s(磁头/道/扇区)老的硬盘访问方式和lba扩展访问方式的隐身中转者(拦截int 13),让老的读盘程序不知不觉的使用了新的读盘技术,并没有试图去兼容zip(不过如果有的bios只检验了引导区的55aa标志,usbhdd+还是有可能以zip方式启动的, 不过这时usbhdd也可以) 而usbzip+是在引导区格式上下功夫,兼容usbhdd,算是不同领域、各显其能。 四、usbzip+的来源 usbzip+在ultroiso中出现很晚,其实grub早就实现了这个双格式。很久前软盘流行的时候,grub由于比较大,不能安装在软盘,是一个缺点.grub就在设计上支持分区表和bp
4、b双格式,目的是把软盘格式化硬盘分区的结构,以安装体积较大的grub,正好和现在的zip+技术不谋而合(但是在windows版本的安装程序Grubinst中并没有实现这个安装功能),usbzip+的始作佣应该是Grub。 五、我们什么时候需要usbzip+ 从核心技术来看,zip+远没有hdd+精彩,而zip+的启动率也远没有hdd/hdd+高。但是某台机器需要U盘引导,但是只支持zip的情况下,就要用到usbzip,当你不想把usbhdd闪存重新格式化,就可以用ultroiso便捷启动写入usbzip+的MBR,以尝试兼容性启动。 附:分析代码seg000:7C00 jmp short lo
5、c_7C5E;按照分区引导代码的约定,下面是bpb表,存放着分区卷的各种数据.可以参考ms fat12/16/32说明查看,同时可以看到熟悉的mswin4.1标志seg000:7C00 EB 5C 90 4D 53 57 49 4E 34 2E 31 00 02 02 41 00 隲怣SWIN4.1.A.seg000:7C10 02 00 02 00 00 F8 FB 00 3F 00 FF 00 00 00 00 00 . .?. .seg000:7C20 C1 F7 01 00 00 01 29 C2 5F BE 90 4E 4F 20 4E 41 流.)耞緪NO NAseg000:7C3
6、0 4D 45 20 20 20 20 46 41 54 31 36 20 20 20 00 00 ME FAT16 .seg000:7C40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .seg000:7C50 00 00 00 00 00 00 00 00 00 00 55 53 42 2B FA 31 .USB+?;bpb表结束seg000:7C5Eseg000:7C5E loc_7C5E: ; CODE XREF: seg000:7C00jseg000:7C5E cli ;关中断seg000:7C5F xor ax, axseg000
7、:7C61 mov ds, axseg000:7C63 mov es, axseg000:7C65 mov ss, axseg000:7C67 mov sp, 7C00hseg000:7C6A stiseg000:7C6B cldseg000:7C6C mov si, spseg000:7C6E mov di, 600hseg000:7C71 mov cx, 100hseg000:7C74 rep movswseg000:7C76 jmp far ptr 0:67Bh ;传送自身全部200字节去600处,把此处空间留给分区引导代码-seg000:067B mov ds:byte_65D, dl
8、 ;备份bios参数,dl代表驱动器类型seg000:067F mov si, 787h ;调用显示子程序显示启动信息seg000:0682 call sub_72Dseg000:0685 test dl, 80h ;00H7FH:软盘;80H0FFH:硬盘seg000:0688 jz short loc_6A8 ;是硬盘则转6a8seg000:068A mov ah, 8 ;否则取磁盘参数seg000:068C stcseg000:068D int 13h ; DISK - DISK - GET CURRENT DRIVE PARAMETERS (XT,AT,XT286,CONV,PS)se
9、g000:068D ; DL = drive numberseg000:068D ; Return: CF set on error, AH = status code, BL = drive typeseg000:068D ; DL = number of consecutive drivesseg000:068D ; DH = maximum value for head number, ES:DI - drive parameterseg000:068F jb short loc_6A8 ;这段是zip方式启动的处理 seg000:0691 and ah, ahseg000:0693 j
10、nz short loc_6A8seg000:0695 mov al, dhseg000:0697 inc alseg000:0699 jz short loc_6A8seg000:069B and cx, 3Fhseg000:069F jz short loc_6A8seg000:06A1 mov ds:word_61A, axseg000:06A4 mov ds:word_618, cxseg000:06A8seg000:06A8 loc_6A8: ; CODE XREF: seg000:0688jseg000:06A8 ; seg000:068Fj .seg000:06A8 mov si
11、, 7BEh ;si指向分区表seg000:06AB xor ax, ax ;ax清0seg000:06AD mov cx, 4 ;分区表项计数器seg000:06B0seg000:06B0 loc_6B0: ; CODE XREF: seg000:06BCjseg000:06B0 test byte ptr si, 80h ;是活动分区吗seg000:06B3 jz short loc_6B8 ;是转6b8seg000:06B5 inc ax ;不是,计数器+1,继续查seg000:06B6 mov bp, siseg000:06B8seg000:06B8 loc_6B8: ; CODE X
12、REF: seg000:06B3jseg000:06B8 add si, 10h ;指向下一个分区项seg000:06BC loop loc_6B0 ;循环查seg000:06BE dec ax ;ax-1=0的话,只有一个活动分区,正常,转6c3seg000:06BF jz short loc_6C3 ;否则报告bios boot异常seg000:06C1 int 18h ; TRANSFER TO ROM BASICseg000:06C1 ; causes transfer to ROM-based BASIC (IBM-PC)seg000:06C1 ; often reboots a c
13、ompatible; often has no effect at allseg000:06C3seg000:06C3 loc_6C3: ; CODE XREF: seg000:06BFj;查测扩展int 13功能是否存在 AH = 41h; BX = 55AAh; DL = 驱动器号seg000:06C3 mov dl, ds:byte_65Dseg000:06C7 mov ah, 41h ; Aseg000:06C9 mov bx, 55AAhseg000:06CC int 13h ; DISK -seg000:06CE jb short loc_6E1seg000:06D0 cmp bx
14、, 0AA55h ;如果BX = AA55h则存在seg000:06D4 jnz short loc_6E1 ;不存在转6e1seg000:06D6 test cl, 1 ;cl是返回的每磁道扇区数seg000:06D9 jz short loc_6E1 ;为1转6e1seg000:06DB mov ax, 4200h ;这里是用lba方式读盘seg000:06DE mov ds:word_782, ax ;782存成0042seg000:06E1seg000:06E1 loc_6E1: ; CODE XREF: seg000:06CEjseg000:06E1 ; seg000:06D4j .
15、seg000:06E1 call loc_73C ;73c是读分区引导公用子程序, ;由于zip是软盘方式,不一定支持lba int 13,不支持的话刚才跳过2条指令seg000:06E4 jb short loc_725 ;读盘失败,进行死循环seg000:06E6 mov ax, ds:7DFEh ;seg000:06E9 cmp ax, 0AA55h ;判断是不是正常分区标志seg000:06EC jnz short loc_725 ;没有标志55aa,死循环seg000:06EE mov ax, ds:word_61A ;传递一些bpb参数给读出来的分区扇区bpb表中seg000:06
16、F1 mov ds:7C1Ah, axseg000:06F4 mov ax, ds:word_618seg000:06F7 mov ds:7C18h, axseg000:06FA mov dl, ds:byte_65Dseg000:06FE mov si, 7C24hseg000:0701 cmp byte ptr ds:7C10h, 0seg000:0706 jz short loc_713seg000:0708 cmp word ptr ds:7C16h, 0seg000:070E jnz short loc_713seg000:0710 mov si, 7C40hseg000:0713s
17、eg000:0713 loc_713: ; CODE XREF: seg000:0706jseg000:0713 ; seg000:070Ejseg000:0713 mov si, dlseg000:0715 or byte ptr ds:word_782+1, 1seg000:071A call loc_73Cseg000:071D mov si, bpseg000:071F cliseg000:0720 jmp far ptr 0:7C00h ;放出控制权seg000:0725 ; -seg000:0725seg000:0725 loc_725: ; CODE XREF: seg000:0
18、6E4jseg000:0725 ; seg000:06ECjseg000:0725 mov si, 7AAhseg000:0728 call sub_72Dseg000:072Bseg000:072B loc_72B: ; CODE XREF: seg000:loc_72Bjseg000:072B jmp short loc_72Bseg000:072Dseg000:072D ; = S U B R O U T I N E =seg000:072D ;显示功能子程序seg000:072Dseg000:072D sub_72D proc near ; CODE XREF: seg000:0682
19、pseg000:072D ; seg000:0728p .seg000:072D lodsbseg000:072E and al, alseg000:0730 jz short locret_73B;al如果为零,不显示返回seg000:0732 mov ah, 0Ehseg000:0734 mov bx, 7seg000:0737 int 10h ; - VIDEO - WRITE CHARACTER AND ADVANCE CURSOR (TTY WRITE)seg000:0737 ; AL = character, BH = display page (alpha modes)seg00
20、0:0737 ; BL = foreground color (graphics modes)seg000:0739 jmp short sub_72Dseg000:073B ; -seg000:073Bseg000:073B locret_73B: ; CODE XREF: sub_72D+3jseg000:073B retnseg000:073B sub_72D endpseg000:073Bseg000:073C ; -seg000:073C ;由于zip/hdd兼容方式的局限,有可能是不支持的lba 读盘的, ;这里把读盘子程序独立出来,作为公用seg000:073C loc_73C: ; CODE XREF: seg000:loc_6E1pseg000:073C ; seg000:071Apseg000:073C
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1