远景论坛积分规则、等级制度说明远景服务 - 免费开通您的远景博客远景论坛 - 美化区Q&A 移动主站 电信镜像 网通镜像
展望Windows7 关注Win7X.Com免费获取各论坛邀请码 抢注UIDiPhone 权威中文论坛-WeiPhone注册@pcbeta.com邮箱 邮箱登陆
共建远景 @ 捐款远景看电影,就用快乐影音!远景招募首席美工设计师 详情请进远景站长亲自来发论坛邀请码
发新话题
打印

[技巧] 关于Win7 的开机画面 移植到Vista的看法

关于Win7 的开机画面 移植到Vista的看法

Vista 启动的时候要验证 文件的版本号如果引导时加载文件版本号不正确就会无法启动

Vista SP1的版本信息是
"6.0.6001.18000 (longhorn_rtm.080118-1840)"
Win7 M1 的版本信息是
"6.1.6519.1 (winmain.071220-1525)"

比如修改WMP界面
原界面

原文件

替换文件


直接替换


修改替换文件


替换后


但开机画面的文件ntkrnlpa.exe和ntoskrnl.exe
如果直接用Win7 M1的替换因为版本号不对所以无法启动,但ExE文件需要数字签名
更改版本号后数字签名失效,启动时提示无法验证数字签名也无法引导

修改前


修改后


电脑在引导的时候.首先mbr里面的代码会加载vista安装盘下面的bootmgr这个文件到内存.然后把执行权交给bootmgr.然后bootmgr会加载system32\winload.exe.然后winload.exe会加载ntoskrnl.exe.
这个加载过程一步一步都有签名判断.

1.mbr加载bootmgr这一步可以不管他.我的系统比较多.我用了grub作为引导程序.而没有使用vista的.
2.bootmgr加载winload.exe.这个地方要求winload.exe是签过名的.
3.winload.exe负责加载ntoskrnl.exe,hal.exe还有全部的boot start的驱动.当然还有这些驱动以及内核需要使用的一些dll.还有一些数据文件.这些文件也都是要求签名的.签名判断是由winload.exe来完成的.
4.ntoskrnl会加载剩下的system start,auto start的这些驱动.以及以后的manual start的驱动,用户层的dll.exe等等.这些文件的签名判断是由ntoskrnl通过一个ci.dll来完成的.ci.dll是ntoskrnl.exe的一个import

bootmgr是一个16位的com程序跟一个32位的pe文件拼接起来的.用个hex编辑工具搜索一下"MZ"也就是dos文件头就能看到一个很明显的标记.把从MZ的地方开始一直到bootmgr的结尾的数据保存下来成一个新文件起名叫bootmgr.dll.用ida打开.ida提示他有调试符号文件.问你要不要加载.你就加载吧..微软很厚道.提供了这个文件的pdb的..哈哈....
16位的那个com不用管他..着重看这个32位的dll吧
BmMain是他的入口函数..这个函数里面一直往下..有个调用BlImgQueryCodeIntegrityBootOptions的调用.根据这个调用的结果来确定是否执行BmFwVerifySelfIntegrity函数.好.把这个地方的代码改成jmp吧.跳过这个BmFwVerifySelfIntegrity函数的调用.
接着到BlImgLoadBootApplication这个函数里面.同样这个地方有个BlImgQueryCodeIntegrityBootOptions函数调用.调用完了就是ImgArchPcatLoadBootApplication.进入这个ArchPcat这个函数可以看到他是通过BlImgLoadPEImageEx函数来加载的.同时能看到签名判断也是这LoadPEimageEx这个函数里面完成的.当BlImgLoadPEImageEx的第6个参数arg6 & 0x10的结果不是0的时候就会进行签名判断.否则跳过这个签名判断.只是判断pe头的checksum.所以如果这调用这个函数的时候不要设置第6个参数的第4位就行了.回到ImgArchPcatLoadBootApplication函数.可以看到他使用进入时候的eax值加上自己的一些判断来生成BlImgLoadPEImageEx第6个参数.再仔细看看就可以发现只是需要清掉BlImgLoadBootApplication调用ImgArchPcatLoadBootApplication之前的eax的第4位就行了.因为ImgArchPcatLoadBootApplication并不去修改这个第4位.所以简单了..清除掉原来设置eax的代码.直接放一个xor eax,eax就行了..
保存一下这个dll,给他checksum一下..然后copy /b + /b一下跟刚刚剥离出来的16位com程序合并起来.命名成bootmgr2.这个bootmgr就算是破解完了.
你要么替换掉原来的bootmgr.要么使用个别的比如grub一类的引导工具试试看.你的系统应该能正常引导起来.接下来破解winload.exe

一样的ida打开winload.exe.加载他的pdb(有了pdb确实省心省力).顺便说一句.从winload开始就支持kernel debug了..你可以用windbg来调试winload了.
winload.exe更简单了.你稍微看看就知道他重用了很多bootmgr的代码.比如是否进行签名判断的地方也是看那第7个参数arg7 & 0x10的值.然后一路track back就能看到如果LoadIntegrityCheckPolicy是0的话.就整个的关掉了winload的签名判断了.所以找到初始化LoadIntegrityCheckPolicy的地方.把他设置层0,这个在OsInitializeCodeIntegrity函数里面.整个函数里面的东西都是不需要的.你直接在函数的开头把LoadIntegrityCheckPolicy设置成0然后ret就行了..
保存这个winload2.exe.checksum一下..
然后用bcdedit添加一个新的{boot loader}.使用这个新的winload2.exe试试看..你的系统应该能引导起来.
到此你的boot start的驱动就能顺利加载了(32位下面当然本来就可以加载).如果你用64位的话.你可以在这里放一个boot start的驱动.然后干掉patch guard.


希望高手能破解下
bootmgr 和winload.exe
附件: 您所在的用户组无法下载或查看附件
更多作品:www.maggots.cn !!您的IP哈哈
用了几个PE窜改器改ntkrnl都以bootmgr崩溃告终
等高手来……
本人已落伍一年,仍将落伍三年。
这个简单,下载一个VISTA优化大师看看,很容易就改了启动画面。地址:http://www.vista123.com
楼上有你说的这么容易吗??
人家楼主说将WIN 7 M1的启动画面替换到VISTA SP1上,不是随便改个图片!
用优化大师替换了启动时文件版本号对不上会瘫痪的!
估计,很有难度。
发新话题

远景论坛所有文章为会员所发布,会员拥有该内容的所有权及责任,转载时请注明出处!
如有侵犯您的权利,请立即通知我们,我们将在第一时间给予更改或删除.