bios反编译
⑴ Vista如何刷新BIOS
宏碁5570系列bios激活vista完美方案【升级BIOS不用再破解】
这个bios属于带原生slic的 bios,MOD_4B00.ROM有pubkey,HOLE3.ROM里面有marker,但是刷到有点机子里就可以显slic,有的就没有,分析尾部发现没有F8,不刷新80000到90000部分内容,而查看rom.log发现hole2正好位于这个部分里面,官方网站bios里的hole2里面全是FF。
完美解决方案(猜测,未测试):从带完整原生slic的5570系列机子里提取hole2替换官网bios里面的,修改尾部加F8强制刷新hole2模块,这样以后升级bios也不需要再破解了!
所以刷了官方bios能显slic的兄弟能把你机子里的bios提取一份出来给我吗? 因为我怀疑你的机子里的hole2不为空。
参考这里:
本文内容是远景赵大侠的研究成果,本人稍加整理。
最近通过查看一些带完整原生slic的bios,发现厂商修改的bios大部分都不是将slic作为一个单独acpi模块文件,这和大家以前的修改方法是不一样的。于是想自己动手试试用厂商这种方法修改我的神舟F205S的bios,经过赵兄的指点终于搞定了,现把方法整理出来供大家参考,希望对用Phoenix的 BIOS(特别是联想机子,因为联想的slic大部分都是这种改法)的兄弟有所启发。
其实现在好多Phoenix BIOS都是带原生slic的,只不过有可能刷新后用everest查看不到(解决方法看后面部分内容),首先判断你的bios是不是带原生slic可以根据以下2点:
1. 在bioscodeX.rom(X一般为1)中能搜索到slic表的表头信息(oemid和oemtable可能为空或者是test之类的信息)
2. 在holeX.rom或者MOD_4A0X.ROM中能找到slic表的pubkey和marker部分
如果你的bios符合以上2点基本就可以肯定你的是带原生slic的bios。因为上面3部分内容构成了完整的slic表(注意完整的slic表中的表头和bioscodeX.rom中的表头有几个字符不一致,这个是由后面内容自动生成的,不用理它的)。
对于这种bios,首选需要核对这3部分的信息是否是同一厂商的,不是的话需要改过来,另外还需要核对RSDT的信息是否和SLIC信息一致,不是的话也需要改过来,以上工作完成后如果你的bios本来就能显示slic表,刷完修改的基本就可以激活了,但是也有些bios刷新完修改了的bios之后,再查看slic表发现还是原来的,或者有的bios满足上面的条件,但是用everest查看不到slic表,下面来讨论这种特殊的bios,这也是本文的重点。
第一种原因: 你的bios加了判断条件,,如果判断失败,复制SLIC表头的代码就不会执行,满足条件才显示slic表,下面以我的bios为例,具体bios判断条件可能不一样的,仅供参考原理:
经过赵兄对同型号机型的显示slic的bios和不显示slic的bios反编译对比发现如下代码
seg0009CF call far ptr 0F000h:48B6h
seg0009D4 push ds
seg0009D5 push 0F000h
seg0009D8 pop ds
seg0009D9 assume ds:nothing
seg000:D9D9 mov eax, ds:48B2h
seg000:D9DD pop ds
seg000:D9DE assume ds:nothing
seg000:D9DE cmp eax, 22995668h
seg000:D9E4 jnz short loc_DA1D
得出结论0F000h:48B2h处的代码如果是 22995668h ,就会有 SLIC表,22995668h 对应的字符为“hV”。经过搜索,在显示slic的bios的HOLE5.ROM中发现字符“hV”,而不显示slic的bios的HOLE5.ROM中则全是“FF”,这就是判断条件!
所以用带“hV”的HOLE5.ROM替换不带“hV”的HOLE5.ROM即可刷出slic来。如果修改了HOLE5.ROM之后刷新完bios发现还是没有slic表,那就是第二种原因引起的了:
第二种原因: 你的bios的尾部加了刷新过滤规则,下面还是以我的bios为例,具体bios尾部的刷新过滤规则可能不一样的,仅供参考原理:
经过比较尾部(关于尾部请看本帖2楼介绍),发现新版bios的尾部比旧版bios的尾部少了2行,没有 F4 和 F5,就是不刷 FFF40000 和 FFF50000,也就是不刷 HOLE5 和 HOLE3这2个模块。事实上刷新的时候也是这样的,一个提示刷新17个模块,一个提示刷新19个模块。
解决方法就是用旧版bios的整个尾部替换新版bios的整个尾部即可,或者也可以手动添加这2行。
至此,使用新方法修改bios成功。相对于以前大家手动加一个acpi模块的方法,这种方法更完美一些,这也是官方的修改方法。
最后,想到一点:记得有人说ibm的bios是一样的,刷到带原生slic的机子里就有slic,刷到不带原生slic的机子里就没有slic,是不是也是靠尾部不刷类似hole5的判断条件实现的啊?期待赵兄能最终能搞定ibm这个问题!
完整的Phoenix BIOS=“主bios”(0000~FFFF部分)+“尾部”(10000后面的一小部分)!
winphlash备份出来的 BIOS 文件的“尾部”不是从 BIOS芯片中读出来的,而是取自在“Specify new BIOS file”那一栏的BIOS的文件。winphlash 的备份BIOS的方式:
1、读入“Specify new BIOS file”那一栏的BIOS的文件,分析BIOS的原大小,(winphlash 并不会判断内存 FFF00000~FFFFFFFF 中的内容来分析BIOS的实际大小)如果 new BIOS 的实际大小是 512 K 就读出内存的 FFF80000~FFFFFFFF 中的内容,如果 new BIOS 的实际大小是1024K 就读出内存的 FFF00000~FFFFFFFF 中的内容,依次类推。
2、把步骤 1 中读出的内存内容 和 new BIOS 的“尾部”合成一个文件。这个文件就是你备份出来的 BIOS 文件。
注意:
1. 不带尾部的Phoenix BIOS是直接刷新不了的,只能用编程器刷。
2. 建议用1.3安装版的winphlash进行备份,因为其他版本的winphlash备份出来的bios尾部会少了下面图中选中的几个字节。
7.jpg (97 KB)
3. 备份的时候用来做诱导的“新”bios如果不是本机bios的话备份出来的尾部可能不对,故推荐采用原机型能刷新的旧版bios做引导提取备份出本机bios。
⑵ e430c可以刷中文bios
e430c可以刷中文bios。
联想几乎所有笔记本都存在一个叫做无线网卡白名单的东西,因此想更换网卡需要反编译官方BIOS固件,将白名单去除。一般可以在很多网站上找到去白名单版BIOS固件和刷入方法,一般都不费。
⑶ BIOS中"ACPI Function" 选项不能改为"Disabled"
如果一定要关掉它,可以修改Bios重新刷写.
取出Bios内容用专门软件cbrom解开,可直接删除ACPI模块或者对其反编译,重新制作(高难高高难).然后重新刷写回去.
⑷ 咋修改BIOS使老主板支持从pciessd启动系统
我觉得修改的话要贴近实际,符合更多人的利益,让更多人有这个需求。这样就会得到普遍人的认可。
⑸ BIOS文件用什么反编译,来看它的源程序
汇编语言或机器语言,现在随着BIOS容量的增大,也可以用C,C++语言写的了.
⑹ 如何使用ACPI Patcher制作DSDT补丁
很多人都知道使用DSDT补丁可以开双核,但DSDT的功能不仅仅如此,除了开双核,还可以可以修复ACPI缺陷(不需要Disabler.kext,原版cpupowermanagement正常使用),RTC,HPET缺陷(原版kext正常工作),显卡(代替efistring),声卡(只是代替了HDAEnabler.kext),网卡(包括TimeMachine问题),此外还可以解决其他很多奇奇怪怪的问题,因此建议尽可能使用DSDT补丁。
但是DSDT到底是什么东西,怎么这么神奇呢?这个要从ACPI说起了,ACPI是Intel(i386,x86_64,IA64)平台的标准固件规范,绝大部分OS需要从BIOS得到的信息都可以从ACPI得到,并且现在的趋势是未来的任何新的特性相关的信息都只能从ACPI得到。
ACPI的信息包括:
配置信息,这些信息从legacyPNP设备的配置,到多处理器,到NUMA,比如现在的MultipleCore的信息就只能从ACPI得到。linux启动很多代码就是处理这些配置信息,比如APIC,IOAPIC设置等。
ACPI相关设备,主要是笔记本电脑相关的设备,包括电源按钮,电池,外接电源,风扇,热键等。
底层硬件,比如PCI中断路由,chipset(主要是南桥PCI-to-LPCbridge)操作等。
电源管理,ACPI定义的电源管理包括CPU的电源管理(调频率P-state,idleC-state,throtting T-state),设备电源管理(D-state),系统电源管理(Suspend-to-Ram,Suspend-to-Disk, power off)等。
设备热插拔,ACPI用一种统一的方式来描述设备的热插拔,这样的设备从单一的PCI设备,到笔记本电脑的DockingStation,到整个PCI hierarchy,CPU,Memory,甚至整个NUMA节点。
可以说要理解现代PC平台必须了解ACPI。ACPI主要是由很多表(Table)组成,而DSDT(Differentiated System Description Table)是其中一个最主要的ACPI表之一,它的定义如下
DSDT is an acronym for DifferentiatedSystem Description Table. Thistable contains theDifferentiated Definition Block, which supplies theinformation and configuration information about the base system.
简单说就是包含了所有和基本系统(basesystem)不同的设备的信息,basesystem每台机器都是一样的,这个是在acpispec里指定的,但是每台机器都是不相同的,所以不相同的设备大都是由DSDT表来描述。它包含了很多AML代码。大多数BIOS是针对windows开发的,而windows自己也不完全遵循acpi规范,所以因为BIOS的bug,这些代码本身可能有错,导致其他的系统,如linux,mac os出错。
我们可以手动修复这些bug使之兼容MAC系统。DSDT在bios里是以编译后的aml文件存在,需要把它解出来,反编译成aml代码形式(dsl文件,文本文件),代码修改完毕再重新编译,替换掉bios里原来的dsdt表。不过PC-EFI,Chameleon的出现,使得我们不再需要冒险刷bios,只要把制作好的DSDT.aml文件放在根目录或者/Extra文件夹里,启动的时候就会自动使用这个DSDT.aml,从而达到修复ACPI系统bug的作用。
但是DSDT补丁怎么制作,却很少有人能详细的介绍,mac上的软件基本上只能制作解决双核,acpi问题的dsdt.aml,要想解决更多的问题,就必须回到windows,使用insanelymac论坛里的一款软件ACPIPatcher,这个软件相对比较复杂,今天我们就来了解一下这个软件的用法。
软件界面如上图,左上可以指定bios和制作补丁,右上是具体选择补丁选项的地方,左下是输出信息,右下可以看到进度。
先来看左上部分各个标签的具体作用。
BIOSPatch:选择一个bios制作dsdt.aml,选择bios文件和指定输出dsdt.aml目录之后,选中GenerateDSDT.aml,然后按下Patch Bios按钮即可,输出目录不可以是bios目录,否则会出错
DSDTPatch:对一个已有的DSDT.aml进行acpi修复,选择DSDT.aml,指定输出目录,按下PatchAML即可
ImportDSDT:用已有的DSDT.dsl对bios打补丁,选择输入dsl文件和bios,按下PatchBios即可
ExportDSDT:从bios里解出DSDT.dsl文件,选择bios文件和输出目录,按下Exact即可
D/CDSDT:DSL编译成AML文件,或者AML文件反编译成DSL文件,取决于选中Compile还是Decomplie,选中Compile的时候如果同时选中Patchbefore compile,可以在把DSL编译成AML文件的时候打上ACPI补丁。
看完了左上的标签我们来看最重要的部分,右上bugfix的详细信息,
General:
这里有三个最重要的修复,HPETPatch,RTCPatch和AliasesPatch,前两个可以解决一些时钟方面的问题,很多机器里如果有AppleIntelCPUPowerManagement.kext就会四国,或者不能正常使用,需要Disabler.kext,如果你选了前两项,从此可以扔掉Disabler.kext,因为AppleIntelCPUPowerManagement.kext可以正常工作了,第三个选项也许更加重要,AliasesPatch直接对应是否能开双核,对asus,msi的主板来说,这个选项是非常重要的,技嘉没有这个问题,选不选都无所谓。
点击Fixes…可以看到一个新窗口
这里都是一些针对编译时出现error或者warning的fix,作者的意见是当出现这些error或者warning的时候可以选择,我的意见时全部选择,防止出现error或者warning,如果还有问题,就需要去网上搜索解决方案,自己动手修改代码然后再编译了。
Network:
这里相对比较复杂,你需要知道硬件位置,这个可以用ioRegistryExplorer来看,Lan0应该是百兆网卡而GIGE是千兆网卡,FixGP9指增加一个GPIO9的控制项,UseTime Machine Fix修复Time Machine找不到内置网卡的问题,下面是针对技嘉P43 P45 Realtek 8111c千兆网卡的设置图,它的硬件位置在PEX 5
Graphics:
这里合理设置后完全可以代替efi-string,natit,nvinject,nvdarwin,nvkush等,首先在model那里选择显卡型号和显存大小,下面绿色的选项针对N卡,红色的针对A卡,N卡需要设置nvcap值,A卡需要设置Framebuffer和DevID,Hardwarelocation需要用ioRegistryExplorer看下,PEGP和Use DSDT GFX都要选中。
这里以硬件地址PCI 0为例,分别给出nVidia8800 GT 512MB和ATI HD3870 512MB显卡的示例。
nVidia 8800 GT512MB
ATI HD3870 512MB
Audio:
通过设置audio可以代替HDAEnabler.kext,设置很简单,AudioChipset里预置了三种,Realtek ALC888-0,Realtek ALC888-2,RealtekALC889a,ALC888分别对应address 0和address 2,技嘉P43, P45板载的ALC888选RealtekALC888-0,ALC889选Realtek ALC889a,此外还要选中Use HDEF Audio,下面以889为例
看完bug fix来看看左下角的两个编译选项,ForceDSDT Compilation表示强制编译,即便出现错误,Stop on compilation Warning表示出现warning时停止编译,追求完美的人可以选择此项,因为0error,0warning的dsdt表示没有任何语法错误。
右边还有一个选项是bios类型选择,根据你的bios类型选择Award还是AMI,技嘉的bios是Award
目前市面上较流行的主板BIOS主要有 Award BIOS、AMI BIOS、Phoenix BIOS三种类型。
Award
Award BIOS是由Award Software公司开发的BIOS产品,在目前的主板中使用最为广泛。Award BIOS功能较为齐全,支持许多新硬件,目前市面上多数主机板都采用了这种BIOS。
AMI
AMI BIOS是AMI公司(全称:American Megatrends Incorporated)出品的BIOS系统软件,开发于80年代中期,早期的286、386大多采用AMI BIOS,它对各种软、硬件的适应性好,能保证系统性能的稳定,到90年代后,绿色节能电脑开始普及,AMI却没能及时推出新版本来适应市场,使得Award BIOS占领了大半壁江山。当然现在的ami也有非常不错的表现,新推出的版本依然功能强劲。
Phoenix
Phoenix BIOS是Phoenix公司产品,Phoenix意为凤凰或埃及神话中的长生鸟,有完美之物的含义。Phoenix BIOS 多用于高档的586原装品牌机和笔记本电脑上,其画面简洁,便于操作。
Insyde
Insyde bios 是台湾的一家软件厂商的产品,是一种新兴的BIOS类型,被某些基于英特尔芯片的笔记本电脑采用,如神舟、联想。
下面我们以技嘉GIGA EP43-UD3L为例,实际操作一次,显卡是nVidiaGeforce 9800 GTX 512MB,声卡是ALC888。
设置输入输出路径,BIOS类型,Stopon warning,General设置
补丁详细设置
然后按下Patch Bios,运行完毕可以看到成功编译,而且可以看到编译过程中出现 0Errors, 0 Warnings, 0 Remarks, 660 Optimizations。
此时到输出目录里可以看到dsdt.aml,此外,bios文件下面还会生成patch过的以new结尾的bios文件,如ep43ud3l.f4.new,如果你确认dsdt.aml可以使用,那么这个bios也是可以使用的,有需要的话可以自行刷bios,不过刷机有风险,还请慎重。
dsdt.aml的使用非常简单,首先确保你安装了支持dsdt的引导,如PC-EFIV9,Chameleon1.0.12或者Chameleon 2 RC1,推荐最新的Chameleon2 RC1,然后把dsdt.aml放在系统盘的根目录或者Extra文件夹里,如果是efi分区启动,放在efi分区的Extra文件夹里就可以了。
到此,本次讲座就算是结束了。全文完整的doc档和acpi patcher可以在附件下载到。
一点小更新,如果你用acpi patcher得不到DSDT,比如ASUS,MSI的部分主板,你可以在linux下通过在终端里运行
cat /proc/acpi/dsdt > dsdt.aml
得到,然后用acpi patcher把它反编译得到dsdt.dsl就可以修改了
如果你可以进入mac,那么用附件里的getdsdt脚本也可以得到dsdt.dat,重命名为dsdt.aml即可
⑺ 请问BIOS程序是汇编语言程序吗
这个问题是一个陷阱。
保存在BIOS的程序,是编译好的机器语言。
汇编语言是一种在机器语言之上的,方便供程序员读写的编程语言,它的语法最接近机器语言,
相对机器语言来说,它是高级语言。汇编语言的代码是不能被机器执行的,必须经过“翻译”(即编译)之后,把汇编代码翻译成机器语言,计算机才能够识别并执行。显然,如果BIOS是汇编语言的话,没有编译的过程,是不能执行的。
⑻ 问BIOS文件用什么反编译,来看它的源程序
CBROM应该是修改BIOS等最好用的工具。
先分解出相应的部分后,再用汇编程序进行反汇编。
给你一些操作实例:
CBROM BIOS文件名 /EPA ***.EPA 更新能源之星图标(用于只支持EPA格式的4.5X)
CBROM BIOS文件名 /EPA ***.BMP 更新能源之星图标(用于只支持BMP格式的4.6X-6.X)
CBROM BIOS文件名 /EPA1-7 ***.BMP 部分主板支持多个更换能源之星图标功能
CBROM BIOS文件名 /LOGO ***.BMP 更新全屏画面用法(用于只支持BMP格式的640X480的图片文件)
CBROM BIOS文件名 /LOGO1-7 ***.BMP 部分主板支持多个更换全屏画面功能
CBROM BIOS文件名 /ISA STDE.BIN 使你的主板拥有和捷波恢复精灵一样的功能
CBROM BIOS文件名 /ISA BIOS-10.BIN 使你的主板拥有承启主板的GHOST功能
CBROM BIOS文件名 /PCI PXE.LOM 下载 网卡BOOTROM 启动芯片 PXE 代码,写进主板的BIOS将PXE启动代码写到 BIOS 中去,用做无盘启动工作站
CBROM BIOS文件名 /VSA BIOS文件名 更新防毒模块
CBROM BIOS文件名 /AWDFLASH AWDFLASH.EXE 使你的主板拥有自刷新工能(启动时按ALT+F2)
CBROM BIOS文件名 /MIB 文本文件名 在支持MENU IN BIOS的主板加入文本信息(加入后,在BIOS SETUP里按F5或F9)
CBROM BIOS文件名 /YGROUP AWARDEYT.ROM 更换 YGROUP组
CBROM BIOS文件名 /XGROUP AWARDEXT.ROM 更换 XGROUP组
CBROM BIOS文件名 /GROUP _EN_CODE.BIN 写入英文显示代码
CBROM BIOS文件名 /GROUP _GR_CODE.BIN 写入繁体中文代码
CBROM BIOS文件名 /GROUP _B5_CODE.BIN 写入德语代码
CBROM BIOS文件名 /FNT1 FONT1.AWD 写入字库
移出某项内容:
在以上各参数的基础上(CBROM BIOS文件名 /ISA)加入EXTRACT参数,则为移出BIOS中的新功能。各参数、BIOS文件不同,移出的内容也不相同。
注意:移出的文件最好用BIOS文件中的原文件名。否则可能移植到BIOS中,可能无法使用。
删除某项内容:
如你不想用BIOS中的某个文件,可以在以上参数的基础上(CBROM BIOS文件名 /ISA)加入RELESAE参数,则为删除对应的项目。
必须在纯DOS下面才能使用这个命令
这个命令只是修改BIOS文件
修改好后在通过AWFLASH或AFDOS命令把BIOS文件刷进BIOS里面去