╃苍狼山庄╃╃苍狼山庄╃

Clang出品,
必属精品!

DPS集成驱动生成的presetup.cmd分析集利用

最近用DPS集成SATA驱动后,顺便查了资料,发现presetup.cmd会在安装版TXTMODE复制完文件重启后运行!所以我想在这里可不可以用这个批处理来从其他盘(包括光盘)复制OEMBIOS那四个文件替换系统安装盘的文件,从而达到一个光盘实现N和一的效果!还有有些论坛上有这种光盘。不知道是不是这个原理!由于基于同文件只存储一次做的光盘需要很大的硬盘空间来做,所以想到利用这个来做!
不过这个cmd运行的是16位DOS窗口所以,界面不好做,编程也难!本人只会用批处理来做,如:

%CDDRIVE%\OEM\un7zip.exe %CDDRIVE%\OEM\ACER.7z %SystemDrive%\WINDOWS\system32

先来看看可行性多大?

以下是引用的presetup.cmd资料!

来自“skyfree”
安装版和克隆版XP的道理是一样的,其实克隆版XP是个很不准确的说法,说白了安装版XP和克隆版XP都是被封装过的,只是封装方法不一样,部署的过程也是大同小异的。
克隆版第一次GHOST恢复完成,将大多数系统文件复制到了系统盘中,形成了基本成型的Windows系统。随后重启启动,开始系统部署。克隆版的系统部署,是调用了CMDLINE键值下的setup.exe -newsetup-mini而开始部署的,为了实现在setup也就是系统部署之前调用某些程序,克隆版的研究者们巧妙的更改了这个键值,例如更改成AllUsrRun.exe。AllUsrRun.exe将先调用某些程序,例如驱动提前解压,再调用setup.exe,这样便实现了在setup.exe运行之前调用某些程序。
安装版TXTMODE复制完文件(就是蓝屏阶段复制完文件),也将大多数系统文件已复制到系统盘中(大约有400多M,不包括ProgramFiles文件夹),基本的Windows构架也已经形成。随后重启,开始系统部署。安装版的系统部署也是调用CMDLINE键值下的setup.exe-newsetup(有兴趣者可以在TXTMODE结束后用PE查看)。如果可以像克隆版一样修改CMDLINE键值,那么即可实现在setup.exe运行前调用某些程序。
不过问题就出在这里了,安装版中我们没有机会去修改CMDLINE键值。从TXTMODE复制文件结束到重启后系统开始部署,中间没有修改的几乎。笔者也曾想过在I386文件夹里寻找与此相关的CMDLINE注册表键值,但是寻找未果。那要怎么办?
另一个思想产生了,我们可以造一个虚假的setup.exe,让他去先执行某些程序,然后再替换回真正的setup.exe来执行系统部署。
想到这里时,笔者偶然发现了DPS在集成驱动时的第二种模式,和笔者的上述想法不谋而合。既然有现成的,我们可以改一下使用,避免了二次研发所需的时间。
引用:
笔者对比了一下经过DPS第二模式集成过驱动的系统与原始系统的区别。派出一些不必要的差别后,最大的差别在于:setup.exe,setupORG.exe,presetup.cmd
经过DPS第二模式集成过驱动的系统的setup.exe并非原始的,而是已经经过修改的,笔者上文提过的一个虚假的setup.exe。而setupORG才是原始setup.exe的备份,presetup.cmd是一个被虚假setup.exe所调用的批处理
这三者的工作原理,笔者理解为:
1、虚假setup.exe运行,执行presetup.cmd
2、等待presetup.cmd执行完毕后,将虚假的setup.exe替换为setupORG.exe并更名
3、运行真正的setup.exe来部署系统
明白这个原理以后,我们重点来研究一下presetup.cmd,毕竟只有修改它才能达到我们所要的效果
引用:

REM +==========================================================================+
REM |                                                                          |
REM | This presetup.cmd file was dynamically generated by the DriverPacks |
REM | BASE, to work with the DriverPacks without any further editing.        |
REM | However, if you would like to add some custom functionality, you can |
REM | edit this file without any problems. Just take into record that this |
REM | file will be erased if you run the DriverPacks BASE on these Windows |
REM | installation files again!                                           |
REM |                                                                          |
REM | With special thanks to:                                              |
REM | -Pyron, a06lp and iLE for their help with this method;                 |
REM | -schalti for the optional 'Keep the Drivers' system and Pyron (again)   |
REM | for turning it into an executable.                                  |
REM | -SuperTibaldoKart for creating un7zip.exe                            |
REM |                                                                          |
REM +==========================================================================+
REM +==========================================================================+
REM | Finding CD/DVD driveletter.                                            |
REM |--------------------------------------------------------------------------|
SET TAGFILE=\OEM
FOR %%i IN (C D E F G H I J K L M N O P Q R S T U V W X Y) DO IF EXIST "%%i:%TAGFILE%" SET CDDRIVE=%%i:
REM +==========================================================================+
REM | Decompressing the DriverPacks to the harddisk - using un7zip.exe.    |
REM |--------------------------------------------------------------------------|
%CDDRIVE%\OEM\bin\un7zip.exe %CDDRIVE%\OEM\DP*.7z %SystemDrive%\
REM +==========================================================================+
REM | Copying/decompressing the files to finish the installation.          |
REM |--------------------------------------------------------------------------|
%CDDRIVE%\OEM\bin\un7zip.exe %CDDRIVE%\OEM\bin\*.7z %SystemDrive%\
COPY /Y %CDDRIVE%\OEM\bin\DPsFnshr.ini %SystemDrive%\
IF EXIST %CDDRIVE%\OEM\*.ins COPY /Y %CDDRIVE%\OEM\*.ins %SystemDrive%\
REM +==========================================================================+
REM | Scanning for driverdirectories.                                     |
REM |--------------------------------------------------------------------------|
%CDDRIVE%\OEM\bin\DevPath.exe %SystemDrive%\D
REM +==========================================================================+
REM | Disable Driver Signing Policy and keep it disabled.                    |
REM |--------------------------------------------------------------------------|
START %SystemDrive%\DSPdsblr.exe
EXIT


去除注释段,剩下的内容大致如此:

SET TAGFILE=\OEM
FOR %%i IN (C D E F G H I J K L M N O P Q R S T U V W X Y) DO IF EXIST "%%i:%TAGFILE%" SET CDDRIVE=%%i:
%CDDRIVE%\OEM\bin\un7zip.exe %CDDRIVE%\OEM\DP*.7z %SystemDrive%\
%CDDRIVE%\OEM\bin\un7zip.exe %CDDRIVE%\OEM\bin\*.7z %SystemDrive%\
COPY /Y %CDDRIVE%\OEM\bin\DPsFnshr.ini %SystemDrive%\
IF EXIST %CDDRIVE%\OEM\*.ins COPY /Y %CDDRIVE%\OEM\*.ins %SystemDrive%\
%CDDRIVE%\OEM\bin\DevPath.exe %SystemDrive%\D
START %SystemDrive%\DSPdsblr.exe


额外要说明一下,使用DPS的第二模式集成驱动后,会在光盘根目录下生成一个OEM文件夹,注意,这个和$OEM$文件夹不同。在这个OEM文件夹下的BIN文件夹中,有实现7Z解压缩的一个un7zip.exe程序和一个DLL程序,这两个程序可以实现7Z压缩包的解压。

SET TAGFILE=\OEM
FOR %%i IN (C D E F G H I J K L M N O P Q R S T U V W X Y) DO IF EXIST "%%i:%TAGFILE%" SET CDDRIVE=%%i:


presetup.cmd里的这一段,是根据\OEM目录的存在来判断哪个是光驱,当然,如果你不喜欢使用\OEM这个名字,可以更换成你喜欢的,例如我更换为\SKYFREE,记住,更换完这个以后要更改光盘根目录下的\OEM名为\SKYFREE。现在我们写成:

SET TAGFILE=\SKYFREE
FOR %%i IN (C D E F G H I J K L M N O P Q R S T U V W X Y) DO IF EXIST "%%i:%TAGFILE%" SET CDDRIVE=%%i:


\SKYFREE文件夹下有很多我们用不到的东西,我们只保留BIN下的7-zip32.dll、un7zip.exe、DevPath.exe即可,把这三个复制到\SKYFREE文件夹下,不放在BIN下了,麻烦~~
下面我们把我们压缩好的驱动包(注意,最好是7Z格式的)放在\SKYFREE文件夹下,例如SkyDrv1.7z、SkyDrv2.7z。假如我们想提前把这些驱动解压缩到%SystemDrive%\DRIVERS下,那么就在presetup.cmd下增加这么几句话:
%CDDRIVE%\SKYFREE\un7zip.exe %CDDRIVE%\SKYFREE\SkyDrv*.7z %SystemDrive%\DRIVERS
这样即可实现我们所需的这些驱动的提前解压,并解压到我们想要的目录。
问题随之而来,我们怎么告诉系统我们集成了这些驱动并把这些驱动放在了%SystemDrive%\DRIVERS下呢?还记得我们复制了一个DevPath.exe文件嘛?对了,这个就是我们用来告诉系统我们把驱动放在了哪的工具。
再在presetup.cmd下增加这么几句话:
%CDDRIVE%\SKYFREE\DevPath.exe %SystemDrive%\DRIVERS
需要注意的是,驱动路径不宜过长,WINDOWS接受不了太长的驱动路径,至少在安装版下是这样的。这也是为什么DPS的驱动都是一个两个字符来表示驱动的原因。
这样,我们就实现了提前解压驱动到系统盘,并告知系统我们的驱动在哪里。

总结一下:
首先我们用DPS的第二模式来集成一下任意一个驱动,建议选串行磁盘驱动并且集成串行磁盘的TXTMODE,反正集成串行磁盘驱动是必须的。
我们将OEM文件夹改名为SKYFREE,随后我们将SKYFREE\BIN下的7-zip32.dll、un7zip.exe、DevPath.exe文件复制到SKYFREE目录下,然后删除其他的所有不要的文件,注意,如果删除了DPS自带的串行磁盘驱动包,请在自己压缩的驱动7Z压缩包中将其包含进去。把我们准备好的驱动7Z压缩包放到SKYFREE下,例如我的SkyDrv1.7z、SkyDrv2.7z。
修改presetup.cmd内容为:

SET TAGFILE=\SKYFREE
FOR %%i IN (C D E F G H I J K L M N O P Q R S T U V W X Y) DO IF EXIST "%%i:%TAGFILE%" SET CDDRIVE=%%i:
%CDDRIVE%\SKYFREE\un7zip.exe %CDDRIVE%\SKYFREE\SkyDrv*.7z %SystemDrive%\DRIVERS
%CDDRIVE%\SKYFREE\DevPath.exe %SystemDrive%\DRIVERS


这三句话其实很简单,
第一句,通过识别\SKYFREE文件夹的存在来找到光驱
第二句,从光盘上的\SKYFREE文件夹下解压驱动到系统盘下的DRIVERS文件夹
第三句,告诉系统我们把第三方驱动放什么地方了
这样我们就基本完成了安装版的驱动提前解压,是不是很简单?

本原创文章未经允许不得转载 | 当前页面:╃苍狼山庄╃ » DPS集成驱动生成的presetup.cmd分析集利用

评论

文章评论已关闭!