无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 7189|回复: 6
打印 上一主题 下一主题

BOOTFIX.BIN 逆向分析

[复制链接]
跳转到指定楼层
1#
发表于 2009-9-30 17:01:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
花了一上午终于把windows启动光盘中的Bootfix.bin反汇编并看完了。
其实我们可以改写bootfix.bin程序来实现光盘启动的多菜单功能。

反汇编代码如下:

192F:0100 1E            PUSH    DS
192F:0101 06            PUSH    ES
192F:0102 8CC8          MOV     AX,CS                 ;
192F:0104 8ED8          MOV     DS,AX                 ;
192F:0106 8EC0          MOV     ES,AX                 ;
192F:0108 06            PUSH    ES                    ;
192F:0109 B80030        MOV     AX,3000               ;
192F:010C 8EC0          MOV     ES,AX                 ;扇区装入数据段3000
192F:010E BB0000        MOV     BX,0000               ;扇区装入地址0000
192F:0111 B80102        MOV     AX,0201               ;
192F:0114 B90100        MOV     CX,0001               ;
192F:0117 BA8000        MOV     DX,0080               ;
192F:011A CD13          INT     13                    ;读入硬盘引导扇区
192F:011C 7304          JNB     0122                  ;读入  成功跳转
192F:011E 07            POP     ES                    ;
192F:011F E9E400        JMP     0206                  ;读入  失败跳转
192F:0122 07            POP     ES                    ;多此一举出栈又入栈
192F:0123 06            PUSH    ES                    ;
192F:0124 B80030        MOV     AX,3000               ;
192F:0127 8EC0          MOV     ES,AX                 ;
192F:0129 B90400        MOV     CX,0004               ;
192F:012C BDBE01        MOV     BP,01BE               ;BP指向第一分区表记录
192F:012F 26            ES:                           ;
192F:0130 807E0000      CMP     BYTE PTR [BP+00],00   ;是不是活动分区?
192F:0134 7C0B          JL      0141                  ;是,活动分区跳转
192F:0136 7518          JNZ     0150                  ;
192F:0138 83C510        ADD     BP,+10                ;不是,指向下一个分区记录
192F:013B E2F2          LOOP    012F                  ;继续查找活动分区
192F:013D 07            POP     ES                    ;
192F:013E E9C500        JMP     0206                  ;
192F:0141 55            PUSH    BP                    ;
192F:0142 83C510        ADD     BP,+10                ;指向下一个分区记录;只允许1活动分区其他都是非活动分区才可
192F:0145 49            DEC     CX                    ;
192F:0146 740C          JZ      0154                  ;
192F:0148 26            ES:                           ;
192F:0149 807E0000      CMP     BYTE PTR [BP+00],00   ;是不是活动分区?
192F:014D 74F3          JZ      0142                  ;是,非活动分区跳转
192F:014F 5D            POP     BP                    ;
192F:0150 07            POP     ES                    ;
192F:0151 E9B200        JMP     0206                  ;
192F:0154 5D            POP     BP                    ;
192F:0155 07            POP     ES                    ;
192F:0156 BE4301        MOV     SI,0143               ;装入提示字符串地址
192F:0159 AC            LODSB                         ;
192F:015A A26401        MOV     [0164],AL             ;存入首字符到[0164]内存
192F:015D 56            PUSH    SI                    ;
192F:015E BE4301        MOV     SI,0143               ;
192F:0161 E8C500        CALL    0229                  ;调用函数显示 Press any key to boot from CD
192F:0164 5E            POP     SI                    ;
192F:0165 B98000        MOV     CX,0080               ;
192F:0168 B401          MOV     AH,01                 ;是否有普通键按下
192F:016A CD16          INT     16                    ;
192F:016C 7406          JZ      0174                  ;ZF=1无按键 ZF=0有按键
192F:016E B400          MOV     AH,00                 ;
192F:0170 CD16          INT     16                    ;
192F:0172 E2F4          LOOP    0168                  ;读取按键值循环
192F:0174 FA            CLI                           ;
192F:0175 06            PUSH    ES                    ;
192F:0176 33C0          XOR     AX,AX                 ;//修改定时中断向量表
192F:0178 8EC0          MOV     ES,AX                 ;ES=0000
192F:017A BB2000        MOV     BX,0020               ;
192F:017D 26            ES:                           ;
192F:017E 8B07          MOV     AX,[BX]               ;
192F:0180 A36701        MOV     [0167],AX             ;保存原中断服务程序地址
192F:0183 26            ES:                           ;
192F:0184 8B4702        MOV     AX,[BX+02]            ;
192F:0187 A36901        MOV     [0169],AX             ;保存原中断服务程序段地址
192F:018A 26            ES:                           ;
192F:018B C7070901      MOV     WORD PTR [BX],0109    ;写入新中断服务程序地址
192F:018F 26            ES:                           ;
192F:0190 8C4F02        MOV     [BX+02],CS            ;写入新中断服务程序段地址
192F:0193 07            POP     ES                    ;
192F:0194 FB            STI                           ;
192F:0195 803E640100    CMP     BYTE PTR [0164],00    ;
192F:019A 7406          JZ      01A2                  ;
192F:019C B401          MOV     AH,01                 ;是否有普通键按下
192F:019E CD16          INT     16                    ;
192F:01A0 7543          JNZ     01E5                  ;ZF=1无按键 ZF=0有按键
192F:01A2 B402          MOV     AH,02                 ;
192F:01A4 CD16          INT     16                    ;读8个功能键状态
192F:01A6 2404          AND     AL,04                 ;
192F:01A8 753B          JNZ     01E5                  ;是否有Ctrl/Alt/Shift键按下
192F:01AA 833E6D0100    CMP     WORD PTR [016D],+00   ;
192F:01AF 7F0E          JG      01BF                  ;
192F:01B1 56            PUSH    SI                    ;
192F:01B2 BE6501        MOV     SI,0165               ;
192F:01B5 E87100        CALL    0229                  ;调用函数显示 I
192F:01B8 5E            POP     SI                    ;
192F:01B9 C7066D011200  MOV     WORD PTR [016D],0012  ;
192F:01BF 833E6B0100    CMP     WORD PTR [016B],+00   ;
192F:01C4 75CF          JNZ     0195                  ;循环检查按键是否按下,直到等待结束
192F:01C6 E80300        CALL    01CC                  ;
192F:01C9 EB20          JMP     01EB                  ;引导硬盘启动
192F:01CB 90            NOP                           ;
192F:01CC FA            CLI                           ;//定时中断处理程序恢复
192F:01CD 06            PUSH    ES                    ;
192F:01CE 33C0          XOR     AX,AX                 ;
192F:01D0 8EC0          MOV     ES,AX                 ;
192F:01D2 BB2000        MOV     BX,0020               ;
192F:01D5 A16701        MOV     AX,[0167]             ;
192F:01D8 26            ES:                           ;
192F:01D9 8907          MOV     [BX],AX               ;恢复原中断服务程序地址
192F:01DB A16901        MOV     AX,[0169]             ;
192F:01DE 26            ES:                           ;
192F:01DF 894702        MOV     [BX+02],AX            ;恢复原中断服务程序段地址
192F:01E2 07            POP     ES                    ;
192F:01E3 FB            STI                           ;
192F:01E4 C3            RET                           ;
192F:01E5 E8E4FF        CALL    01CC                  ;
192F:01E8 EB1C          JMP     0206                  ;
192F:01EA 90            NOP                           ;
192F:01EB B80030        MOV     AX,3000               ;读入的硬盘启动区扇区复制到启动地址空间
192F:01EE 8ED8          MOV     DS,AX                 ;
192F:01F0 33C0          XOR     AX,AX                 ;
192F:01F2 8EC0          MOV     ES,AX                 ;
192F:01F4 33F6          XOR     SI,SI                 ;
192F:01F6 BF007C        MOV     DI,7C00               ;
192F:01F9 B90002        MOV     CX,0200               ;
192F:01FC FC            CLD                           ;
192F:01FD F3            REPZ                          ;
192F:01FE A4            MOVSB                         ;
192F:01FF B280          MOV     DL,80                 ;
192F:0201 EA007C0000    JMP     0000:7C00             ;引导硬盘启动扇区
192F:0206 07            POP     ES                    ;
192F:0207 1F            POP     DS                    ;
192F:0208 CB            RETF                          ;
192F:0209 9C            PUSHF                         ;//新 INT 8H 定时中断处理程序
192F:020A FA            CLI                           ;
192F:020B 2E            CS:                           ;
192F:020C 833E6B0100    CMP     WORD PTR [016B],+00   ;
192F:0211 740A          JZ      021D                  ;
192F:0213 2E            CS:                           ;
192F:0214 FF0E6D01      DEC     WORD PTR [016D]       ;
192F:0218 2E            CS:                           ;
192F:0219 FF0E6B01      DEC     WORD PTR [016B]       ;
192F:021D 9D            POPF                          ;
192F:021E 2E            CS:                           ;
192F:021F FF366901      PUSH    [0169]                ;
192F:0223 2E            CS:                           ;
192F:0224 FF366701      PUSH    [0167]                ;
192F:0228 CB            RETF                          ;//返回原 INT 8H 中断处理程序

192F:0229 50            PUSH    AX                    ;//显示函数
192F:022A 53            PUSH    BX                    ;
192F:022B 803E640100    CMP     BYTE PTR [0164],00    ;
192F:0230 740E          JZ      0240                  ;
192F:0232 AC            LODSB                         ;
192F:0233 3C00          CMP     AL,00                 ;以0x00结尾停止显示
192F:0235 7409          JZ      0240                  ;
192F:0237 B40E          MOV     AH,0E                 ;TTY_TEXT
192F:0239 BB0700        MOV     BX,0007               ;
192F:023C CD10          INT     10                    ;调用中断显示提示文字
192F:023E EBF2          JMP     0232                  ;
192F:0240 5B            POP     BX                    ;
192F:0241 58            POP     AX                    ;
192F:0242 C3            RET                           ;

-d 243
192F:0240           0D 0A 50 72 65-73 73 20 61 6E 79 20 6B      ..Press any k
192F:0250  65 79 20 74 6F 20 62 6F-6F 74 20 66 72 6F 6D 20   ey to boot from
192F:0260  43 44 2E 00 00 2E 00 00-00 00 00 49 00 12 00 00   CD.........I....
192F:0270  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
192F:0280  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
192F:0290  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
192F:02A0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
192F:02B0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
192F:02C0  00 00 00                                          ...
2#
发表于 2009-10-2 02:19:44 | 只看该作者
强大,仰首膜拜……
回复

使用道具 举报

3#
发表于 2009-10-2 09:49:51 | 只看该作者
看不懂。如果要将等待时间5秒修改为其他数字如10秒之类,用ULTRAEDIT之类如何修改?
回复

使用道具 举报

4#
发表于 2009-10-2 10:25:54 | 只看该作者
粗略看了一下,没看到光盘启动的处理代码,显示Press any key to boot from CD的指针应该为243h。。。。。。
回复

使用道具 举报

5#
发表于 2009-10-2 14:52:32 | 只看该作者
原帖由 lvyanan 于 2009-10-2 10:25 发表
粗略看了一下,没看到光盘启动的处理代码,显示Press any key to boot from CD的指针应该为243h。。。。。。



这段反汇编好像很早前在其他地方看过,而且有成功修改的例子,没有看到运行结果,结论无从而知。

我到是发现了启动相关的内容:
192F:0151 E9B200        JMP     0206                  ;
192F:0154 5D            POP     BP                    ;
192F:0155 07            POP     ES                    ;
192F:0156 BE4301        MOV     SI,0143               ;装入提示字符串地址
192F:0159 AC            LODSB                         ;
192F:015A A26401        MOV     [0164],AL             ;存入首字符到[0164]内存
192F:015D 56            PUSH    SI                    ;
192F:015E BE4301        MOV     SI,0143               ;
192F:0161 E8C500        CALL    0229                  ;调用函数显示 Press any key to boot from CD
192F:0164 5E            POP     SI                    ;
192F:0165 B98000        MOV     CX,0080               ;
192F:0168 B401          MOV     AH,01                 ;是否有普通键按下
192F:016A CD16          INT     16                    ;
192F:016C 7406          JZ      0174                  ;ZF=1无按键 ZF=0有按键
192F:016E B400          MOV     AH,00                 ;
192F:0170 CD16          INT     16                    ;
192F:0172 E2F4          LOOP    0168                  ;读取按键值循环
192F:0174 FA            CLI                           ;
192F:0175 06            PUSH    ES                    ;
192F:0176 33C0          XOR     AX,AX                 ;//修改定时中断向量表
192F:0178 8EC0          MOV     ES,AX                 ;ES=0000
192F:017A BB2000        MOV     BX,0020               ;
192F:017D 26            ES:                           ;
192F:017E 8B07          MOV     AX,[BX]               ;
192F:0180 A36701        MOV     [0167],AX             ;保存原中断服务程序地址
192F:0183 26            ES:                           ;
192F:0184 8B4702        MOV     AX,[BX+02]            ;
192F:0187 A36901        MOV     [0169],AX             ;保存原中断服务程序段地址
192F:018A 26            ES:                           ;
192F:018B C7070901      MOV     WORD PTR [BX],0109    ;写入新中断服务程序地址
192F:018F 26            ES:                           ;
192F:0190 8C4F02        MOV     [BX+02],CS            ;写入新中断服务程序段地址
192F:0193 07            POP     ES                    ;
192F:0194 FB            STI                           ;
。。。。。。。。。。。。。

   很明显,这段并不完整,如果想自己动手修改BOOTFIX.BIN很难。。。。。。。。。
回复

使用道具 举报

6#
发表于 2009-10-2 20:20:44 | 只看该作者
不懂汇编。向高手们学习
回复

使用道具 举报

7#
发表于 2009-10-2 21:15:37 | 只看该作者
纯看不懂一个,仰望中~  多年前记得搞木马免杀时看到过这样的场景,看那东西跳来跳去的头大了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-30 04:57

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表