无忧启动论坛

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

15天的SETUPLDR.BIN问题解决啦!!!

[复制链接]
跳转到指定楼层
1#
发表于 2002-10-12 13:34:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  kingdragon 兄说:
这是水母麻雀制作的三合一,W2KSECT.DAT这个文件也是修改过的,它调用I386下的菜单文件SETUPLDR.BIN提供用户界面选择安装,当某个选项被选择后,它传输被选择的参数给W2KSECT.DAT这个启动扇区文件,这时候W2KSECT.DAT根据参数修改I386安装路径为真正的2000各个版本所在目录路径.如:IPTA等这时候就能够正常找到ITPA目录下的SETUPLDR.BIN了.SETUPLDR.BIN文件里不含有安装目录字符串,它在W2KSECT.DAT里.  
2#
 楼主| 发表于 2002-10-12 13:35:51 | 只看该作者

15天的SETUPLDR.BIN问题解决啦!!!

楼上的,15天来,总算有你来揭开了这个迷,那么水母麻雀是通过什么手法或什么软件改的这两个*.bin呢?是不是用汇编反编译的? 能反编译了bin的人相当厉害呀,好多的如股票卡硬盘还原卡终端卡网卡boot芯片主板bios芯片等等的bin就都不在他的话下了,此人一定对汇编和编程器编程自动化工业控制相当了解的, 真是山外青山楼外楼,强中更有强中手呀!不像这里除你之外的那些所谓高手只是会把别人的bin写进去或通过别人的软件自动生成一个bin, 就这还一说是win2000 3 in 1 的问题就不懈一顾的说,我忙没有时间你去看论坛里的贴子吧!
我刚来这里,懂的不多,但大家一定无论是什么时候都应记清:
山外青山楼外楼,强中更有强中手!
谢谢kingdragon!!!
回复

使用道具 举报

3#
发表于 2002-10-12 17:30:45 | 只看该作者

15天的SETUPLDR.BIN问题解决啦!!!

???????
回复

使用道具 举报

4#
发表于 2002-10-12 17:35:21 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

5#
发表于 2002-10-12 17:39:02 | 只看该作者

15天的SETUPLDR.BIN问题解决啦!!!

等你
回复

使用道具 举报

6#
发表于 2002-10-14 04:46:40 | 只看该作者

15天的SETUPLDR.BIN问题解决啦!!!

哎哎哎啊!天哪!!!反汇编bin文件????怎么弄得?????我做梦都想啊!:P
回复

使用道具 举报

7#
发表于 2002-10-14 18:16:12 | 只看该作者

15天的SETUPLDR.BIN问题解决啦!!!

用IDA,反编译16位代码。不难,关键要有汇编基础,花点时间。
建议,可以先从Loader.bin入手。程序入口为:0:7c00,主要BIOS调用为INT 13 42H(读光盘扇区文件)。另还要懂得 ISO 文件规范。
回复

使用道具 举报

8#
发表于 2002-10-15 00:44:10 | 只看该作者

15天的SETUPLDR.BIN问题解决啦!!!

发信人: peach (IDLE), 信区: NewSoftware      
标  题: mulwin引导程序源代码
发信站: BBS 水木清华站 (Fri Aug  3 15:16:52 2001)
其实这个程序做的工作不多
用了不少的技巧
引导的工作不全是由自己来完成的
我简单说一下是如何工作的
首先
真正的引导程序还是win2k引导光盘的引导
这个引导程序启动时会先装入bootfix.bin
然后执行这段代码
这段代码的工作就是显示“Press any key to boot from CD-Rom...”
如果5秒内无键按下
系统将会从硬盘启动
如果用户按下一个键的话
控制权会返回给原2k引导
这时候2k引导会装入setupldr.bin
并将控制权完全交给段代码
我写的就是这个setupldr.bin
得到控制权后显示菜单,得到用户选择,然后再继续引导
这个setupldr.bin使用了原2k引导的代码
所以必须将自己复制到原2k此导代码的空间,使用同一代码段段址
至于从软盘映象启动,我写的代码没有做任何工作,完全是得到用户选择
然后将选择告诉diskemu.bin,再由diskemu.bin引导

源代码如下
        .286
cseg    segment
        assume    cs:cseg, ds:cseg,ss:cseg
;==========================================================
;    预留出0x800字节空间,这部分空间的内容将会是原
;    win2k引导,以下的标号都是原win2k引导中的函数入口
;    或变量
;==========================================================
        org        0h
bstart:
        org        79h
LoadErr:
        org        2bah
ReadDisk:            ;    读光盘函数
org        3dch
LoadFile:            ;    装载文件
        org        499h
        BootDrv    db    ?
        org        800h
;==========================================================
;    本引导的入口,从此处已经得到引导控制权
;    首先要做的工作是将自己复制到原2k引导尾部
;    然后再继续引导工作
;==========================================================
start:
        mov        ax, cs            ;将自己复制到07c0:800h处,然后跳转过去继
续执行
        mov        ds, ax
        mov        ax, 07c0h
        mov        es, ax
        mov        di, 800h
        xor        si, si
        mov        cx, 800h
        cld
        rep        movsb            ;    复制结束,然后远跳至es:begin处
        push    es
        push    offset begin
        retf                    ;   
        
        Win2KVer        db    "PSA"
        DiskEmuFile        db    "DISKEMUL.BIN"
        SetupLdrFile    db    "SETUPLDR.BIN"
        disknum    db    0
        version    db    0
        menu    db  02, 01h, "Multi Windows Opration System Installation
Boot Menu", 0dh, 0ah, 0
                  db    02, 02h, 52 dup(205), 0dh, 0ah, 0
                  db    06, 04h, "A. Microsoft Dos6.22", 0dh, 0ah, 0
                  db  06, 05h, "B. Windows 98 Second Edtion   [CHS]
[TBPVQ-J7R2B-MMXWY-V66HG-YTCFD]", 0dh, 0ah, 0
                  db    06, 06h, "C. Windows Millennium         [CHS]
[K9KDJ-3XPXY-92WFW-9Q26K-MVRK8]", 0dh, 0ah, 0
                  db    06, 07h, "D. Win2K Professional SP2     [ENU]
[PQHKR-G4JFW-VTY3P-G4WQ2-88CTW]", 0dh, 0ah, 0
                  db    06, 08h, "E. Win2K Server SP2           [ENU]
[H6TWQ-TQQM8-HXJYG-D69F7-R84VM]", 0dh, 0ah, 0
                  db    06, 09h, "F. Win2K Advanced Server SP2  [ENU]
[H6TWQ-TQQM8-HXJYG-D69F7-R84VM]", 0dh, 0ah, 0
                  db    06, 0ah, "G. Win2K Professional SP2     [CHS]
[PQHKR-G4JFW-VTY3P-G4WQ2-88CTW]", 0dh, 0ah, 0
                  db    06, 0bh, "H. Win2K Server SP2           [CHS]
[H6TWQ-TQQM8-HXJYG-D69F7-R84VM]", 0dh, 0ah, 0
                  db    06, 0ch, "I. Win2K Advanced Server SP2  [CHS]
[H6TWQ-TQQM8-HXJYG-D69F7-R84VM]", 0dh, 0ah, 0
                  db    04, 0eh, "Please choose your favorite to install, or
type esc to boot from HD.", 0dh, 0ah, 0
                  db  04, 10h, "If your have got some problem or have some
good suggestions, please contact with me", 0dh, 0ah, 0
                  db    27h, 12h, "AUTHOR : peach@SMTH", 0dh, 0ah, 0
                  db  30h, 13h, "[peach@sparrows.dhs.org]", 0dh, 0ah, 0
                  db    0ffh, 0ffh
          LoadFileErr        db    "Couldn't Load Setup Loader...", 0dh, 0ah,
"Press ENTER to retry, and ESC back to main menu.", 0dh, 0ah, 0
          nobootablehd    db    "No bootable HD, press any key back to main
menu.", 0dh, 0ah, 0
          wrongcd        db    "Wrong disk!", 0dh, 0ah, "Please insert the
disk with label MULWIN_CD"
        dnum        db    "1 into CDROM.", 0dh, 0ah
                      db    "And press ENTER to continue, or ESC back to
main menu", 0dh,0ah, 0
;==========================================================
;    远程跳转至此处
;    此时,引导程序已经在原2k引导的尾部了
;    继续引导工作
;==========================================================
begin:
        mov        ax, cs
        mov        ds, ax
        mov        es, ax
        mov        bh, 17h
        call    clearbuf        ;    清键盘缓冲,因为bootfix的原故,有可能键盘缓
冲区内
                                ;    仍有键
showmenu:                                    ;显示主菜单
        mov        bh, 17h
        call    clrscn
        mov        si, offset menu
showlp:
        cmp        word ptr [si], 0ffffh
        je        getkeylp
        mov        dx, [si]
        call    setcurpos
        add        si, 2
        call    showmsg
        jmp        showlp
getkeylp:                                ;获得用户选择
        xor        ax, ax
        int        16h
        cmp        al, 1bh
        je        l_bootfromhd            ;    用户按下ESC,从硬盘启动
        and        al, 0dfh
        cmp        al, 41h
        jl        getkeylp
        cmp        al, 44h
        jl        bootdos                    ;    前三项都是从软盘映象启动
        cmp        al, 49h
        jg        getkeylp
        jmp        bootwin2k                ;    后六项都是启动win2k
l_bootfromhd:
        jmp    bootfromhd
;==========================================================
;    showmsg    显示字符串
;    入口:
;            ds:si    字符串地址
;            bl        颜色属性
;==========================================================
showmsg    proc
        mov        al, [si]
        inc        si
        cmp        al, 0
        jz        exitshowmsg
        mov        ah, 0eh
        int        10h
        jmp        showmsg
exitshowmsg:
        ret
showmsg    endp

;==========================================================
;    clrscn    清屏函数
;    入口:
;            bl 背景色
;==========================================================
clrscn    proc
        mov     ax, 0600h
        mov     cx, 00
        mov     dx, 2479h
        int     10h
        ret
clrscn    endp
;==========================================================
;    clearbuf    清键盘缓冲区
;==========================================================
clearbuf    proc
        mov        cx, 80h
        mov        ah, 1
        int        16h
        jz        exitclear
        mov        ah, 0
        int        16h
        loop    clearbuf
exitclear:
        ret
clearbuf    endp
;==========================================================
;    setcurpos    设置光标位置
;    入口:
;        dh        行
;        dl        列
;==========================================================
setcurpos    proc
        mov        ax, 0200h
        mov        bx, 0
        int        10h
        ret
setcurpos    endp
;==========================================================
;    从软盘映象启动
;        这部分代码实际是使用diskemu.bin启动
;        所做的工作就是装入diskemu.bin
;        然后将用户的选择写入第0个字节
;        再跳到diskemu.bin的入口
;==========================================================
bootdos:
        inc        ax
        push    ax
        push    offset DiskEmuFile
        push    0ch
        push    5000h
        call    LoadFile                ;    把diskemu.bin装入到5000:0000处
        jb        CannotLoadFile
        add        sp, 6
        mov        ax, 5000h                    ;跳转执行
        mov        es, ax
        pop        ax
        mov        es:[0], al                ;    用户选择写至5000:0000处
        
        push    es
        push    46ah
        retf                            ;    跳至diskemu.bin的入口

CannotLoadFile:
        add        sp, 8h
        mov        si, offset LoadFileErr
        call    showmsg
        jmp        getkeylp2
;==========================================================
;    引导win2k
;        此处仍使用原2k引导,但是由于setupldr.bin在
;        其他三个目录ibta, ibts, ibtp
;        所以要先算出是哪个版本的win2k
;        然后修改原2k引导的目录数据,再用原2k引导
;==========================================================
bootwin2k:
        sub        al, 44h                        ;算出安装什么语言版本及adv,
svr, pro
        mov        dl, 3
        and        ax, 0ffh
        div        dl
        mov        word  ptr disknum, ax
        mov        byte ptr dnum, al
        add        byte ptr dnum, 31h
        mov        bh, 17h
        call    clrscn
        mov        dx, 0
        call    setcurpos
ReadCD:
        push    offset SetupLdrFile
        push    0ch
        push    1080h
        call    LoadFile
        add        sp, 6
        mov        ax, 1000h
        mov        es, ax
        mov        al, byte ptr dnum
        cmp        al, byte ptr es:dnum
        jne        wrongdisk
        mov        di, offset win2kver        ;正确,则装载相应的setupldr.
bin
        mov        al, byte ptr version
        and        ax, 00ffh
        add        di, ax
        mov        al, [di]
        mov        byte ptr ds:[498h], al        ;    修改启动目录
        mov        byte ptr ds:[497h], 'T'        ;   
        mov        byte ptr ds:[496h], 'B'
        mov        dl, BootDrv
        db        0EAh, 00,7Ch, 00, 00
WrongDisk:
        mov        si, offset wrongcd
        call    showmsg
getkeylp2:
        xor        ax, ax
        int        16h
        cmp        al, 1bh
        je        exitbootwin2k
        cmp        al, 0dh
        je        readcd
        jmp        getkeylp2
exitbootwin2k:
        jmp        showmenu

;==========================================================
;    从硬盘启动
;        读入硬盘0扇区内容,然后引导
;==========================================================
bootfromhd:
        mov        ax, 07c0h
        mov        es, ax
        mov        bx, 0000h
        mov        ax, 0201h
        mov        cx, 0001h
        mov        dx, 0080h
        int        13h
        jnb        callhd
        mov        si, offset nobootablehd
        call    showmsg
        jmp        showmenu
callhd:
        mov        dl, 080h
        db        0EAh, 00,7Ch, 00, 00
org        1000h
        endss:
cseg    ends
        end    start
--
※ 来源:·BBS 水木清华站 smth.org·[FROM: 166.111.172.127]
回复

使用道具 举报

9#
发表于 2002-10-15 00:47:16 | 只看该作者

15天的SETUPLDR.BIN问题解决啦!!!

我很久以前就看过
其中最重要的是利用原引导程序中的读光盘函数
其他就很简单了
画画界面,读读磁盘,还有热启什么的
回复

使用道具 举报

10#
发表于 2002-10-15 04:25:58 | 只看该作者

15天的SETUPLDR.BIN问题解决啦!!!

这、这……我好像问了也白问,看不懂~~!:(
回复

使用道具 举报

11#
发表于 2002-10-15 04:38:09 | 只看该作者

15天的SETUPLDR.BIN问题解决啦!!!

楼上的那位人兄发的是W2KSECT.DAT的修改的汇编原理,并不是反汇编
回复

使用道具 举报

12#
发表于 2002-10-15 07:10:28 | 只看该作者

15天的SETUPLDR.BIN问题解决啦!!!

[这个贴子最后由revival在 2002/10/15 07:16am 编辑]
下面引用由(狼)2002/10/15 04:38am 发表的内容:
楼上的那位人兄发的是W2KSECT.DAT的修改的汇编原理,并不是反汇编
既然有汇编源代码就没有必要反汇编了
反汇编出来的代码大同小异
只是写给汇编器看的伪代码都不存在,看起来更累一些
当初我就是反汇编看这个程序的
后来在水木找到这份源代码
既然有人要就贴过来
现在我做的启动光盘引导程序都是直接用汇编写出来的
回复

使用道具 举报

13#
发表于 2002-10-15 07:19:21 | 只看该作者

15天的SETUPLDR.BIN问题解决啦!!!

下面引用由taile2002/10/15 04:25am 发表的内容:
这、这……我好像问了也白问,看不懂~~!:(
这个bin就是com文件
想反汇编直接用debug载入
再用u命令就可以
只不过这个人家不是反汇编改出来的
引导程序也是普通的二进制代码
自己写好了汇编代码编译一个就是了
我们搞不到人家的源代码才要搞逆向工程
回复

使用道具 举报

14#
发表于 2002-10-15 08:34:18 | 只看该作者

15天的SETUPLDR.BIN问题解决啦!!!

revival大侠,能不能编一个调用一个显示256色bmp图象的启动文件,显示完成后,固定时间后,将光盘启动文件交给菜单启动文件来启动光盘呢,启动文件可以修改bmp图象文件名称,下一步调用的菜单文件的名称呢,能否支持路径呢?我们大部分人都是汇编语言的菜鸟,你是高手,能否实现呢?
回复

使用道具 举报

15#
发表于 2002-10-15 08:35:39 | 只看该作者

15天的SETUPLDR.BIN问题解决啦!!!

我也想有人做这个出来,我自己就不会啦,几年前的东西都掉了
回复

使用道具 举报

16#
发表于 2002-10-15 08:54:47 | 只看该作者

15天的SETUPLDR.BIN问题解决啦!!!

256色只能做到320×200分辨率
我现在没时间做这个
哪位有空可以写写
我也挺想要
回复

使用道具 举报

17#
发表于 2002-10-15 09:03:11 | 只看该作者

15天的SETUPLDR.BIN问题解决啦!!!

能不能做一个600X480
回复

使用道具 举报

18#
发表于 2002-10-15 09:19:28 | 只看该作者

15天的SETUPLDR.BIN问题解决啦!!!

象Win98那样的就可以了,启动时因为显卡问题不一定支持640×480×256色的。
回复

使用道具 举报

19#
发表于 2002-10-15 13:04:56 | 只看该作者

15天的SETUPLDR.BIN问题解决啦!!!

我想一定可以的,对现在的显卡来说,这个显视的方式已是标准
回复

使用道具 举报

20#
发表于 2002-10-15 19:48:22 | 只看该作者

15天的SETUPLDR.BIN问题解决啦!!!

我正因为找不到麻雀的原代码,反汇编了这个扇区引导程序,现在revival兄帖出了代码,大家可以直接修改原代码加入自己想要得功能,比如汉显,加载图片等一切都能实现,只要有时间.
回复

使用道具 举报

21#
 楼主| 发表于 2002-10-16 10:56:33 | 只看该作者

15天的SETUPLDR.BIN问题解决啦!!!

一定可以的好多的还原卡中的bin文件,开机就显示图片对玩汇编语言的人来说这个是时间问题,这是一个技术性的突破,大家坚持努力一定把它作出来,唉!可惜我的汇编学的实在太差了只知道mov
回复

使用道具 举报

22#
发表于 2002-10-22 21:45:30 | 只看该作者

15天的SETUPLDR.BIN问题解决啦!!!

终于开眼界了!高手呀
回复

使用道具 举报

23#
发表于 2002-10-23 15:03:51 | 只看该作者

15天的SETUPLDR.BIN问题解决啦!!!

revival  水平不错呀。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2026-1-2 23:39

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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