图拉丁吧 关注:7,689,817贴子:129,329,616
  • 17回复贴,共1

教程:修改bios二进制代码,添加/修改隐藏选项

只看楼主收藏回复

为了修改cpu功耗限制,搜集了几天的墙内墙外各种教程各种信息,最后融会贯通终于得偿所愿
图吧人气高,发到这里希望能帮助到一些人
本文所使用的bios为华擎H410M ITXac,添加选项的目的是修改CPU功耗限制
理论上本文内容应该适合3XX系4XX系主板bios
以下内容为本人原创
本文目的是将默认隐藏的View/Configure Turbo Options(或者其他你想添加的选项,名称可通过AMIBCP里的Setup看到)选项添加至Advanced(高级)菜单下面
简单说就是把你想要的隐藏选项,在Advanced(高级)菜单下面显示出来
本文作为抛砖引玉,理论上所有的隐藏菜单都可以添加出来,甚至你可以将所有的高级菜单全部添加出来
重要提示:没有编程器的建议不用往下看了,虽然本文理论上不用编程器也可以完成,还是强烈不建议!
重要提示:没有编程器的建议不用往下看了,虽然本文理论上不用编程器也可以完成,还是强烈不建议!刷砖了后果自负!
本文用到的软件工具:
提取/刷写bios rom的软件
UEFITool 0.27.0
Universal IFR Extractor 0.7
你喜欢的二进制编辑软件,例如WinHEX、UltraEdit等等
AMIBCP 5.02.0031 (注:0023版本似乎打不开某些10代主板bios)
这是修改之前的bios截图

这是修改之后的bios截图

教程开始
提取bios.rom,(提取工具及过程自行百度,也可直接官网下载,大小为16384KB的就没错)保存,多保存几份原始备用
用UEFITool加载rom,ctrl+F搜索--选择Text--输入View/Configure Turbo Options(或者其他你想添加的选项,名称可通过AMIBCP里的Setup看到),点击搜索
如果你的bios存在此选项,则会出现搜索结果。双击此结果
在上面窗口出现的PE32 image section点击右键,选择Extract body,保存至某一处,本例以temp.bin命名(UEFITool暂时不要关闭,之后还要把temp.bin替换回去)
打开Universal IFR Extractor,选择刚才保存的temp.bin,点击Extract,保存至某处,本例以temp IFR.txt命名
此时Universal IFR Extractor已经将PE32模块的二进制文件翻译成了能看懂的文档,打开temp IFR.txt
搜索View/Configure Turbo Options会出现2条结果
-----------------------------------------------------------------------------
0x3CF2E Form: View/Configure Turbo Options, FormId: 0x273D {01 86 3D 27 C7 02}
-----------------------------------------------------------------------------
0x3BE3F Ref: View/Configure Turbo Options, VarStoreInfo (VarOffset/VarName): 0xFFFF, VarStore: 0x0, QuestionId: 0x195, FormId: 0x273D {0F 0F C7 02 C8 02 95 01 00 00 FF FF 00 3D 27}
-----------------------------------------------------------------------------
做一下解释:3CF2E这条,以Form打头,它是作为目录展开的内容;3BE3F这条,它是作为出现的目录标题,我们需要添加的就是这个标题(想添加其他的选项以此类推)
将最后的二进制代码0F 0F C7 02 C8 02 95 01 00 00 FF FF 00 3D 27复制一下保存起来备用,注意95 01两个字节,后面会需要修改
继续搜索Form: Advanced,会有3条结果
-----------------------------------------------------------------------------
0x39D57 Form: Advanced, FormId: 0x2712 {01 86 12 27 1E 00}
0x39D5D Ref: RC ACPI Settings, VarStoreInfo (VarOffset/VarName): 0xFFFF, VarStore: 0x0, QuestionId: 0xBE, FormId: 0x2718 {0F 0F C3 01 C4 01 BE 00 00 00 FF FF 00 18 27}
0x39D6C Ref: Connectivity Configuration, VarStoreInfo (VarOffset/VarName): 0xFFFF, VarStore: 0x0, QuestionId: 0xBF, FormId: 0x271B {0F 0F 29 02 2A 02 BF 00 00 00 FF FF 00 1B 27}
0x39D7B Ref: CPU Configuration, VarStoreInfo (VarOffset/VarName): 0xFFFF, VarStore: 0x0, QuestionId: 0xC0, FormId: 0x2737 {0F 0F C5 02 C6 02 C0 00 00 00 FF FF 00 37 27}
0x39D8A Ref: Power & Performance, VarStoreInfo (VarOffset/VarName): 0xFFFF, VarStore: 0x0, QuestionId: 0xC1, FormId: 0x273A {0F 0F 1A 03 1B 03 C1 00 00 00 FF FF 00 3A 27}
-----------------------------------------------------------------------------
0x434B5 Form: Advanced Debug Settings, FormId: 0x27CC {01 86 CC 27 C9 17} ;此条忽略,此条不是高级菜单
-----------------------------------------------------------------------------
0x43E73 Form: Advanced, FormId: 0x27D2 {01 86 D2 27 1E 00}
0x43E79 Ref: CPU Configuration, VarStoreInfo (VarOffset/VarName): 0xFFFF, VarStore: 0x0, QuestionId: 0x458, FormId: 0x27D3 {0F 0F C5 02 C6 02 58 04 00 00 FF FF 00 D3 27}
0x43E88 Ref: Chipset Configuration, VarStoreInfo (VarOffset/VarName): 0xFFFF, VarStore: 0x0, QuestionId: 0x459, FormId: 0x27D4 {0F 0F 26 1E 27 1E 59 04 00 00 FF FF 00 D4 27}
0x43E97 Ref: Storage Configuration, VarStoreInfo (VarOffset/VarName): 0xFFFF, VarStore: 0x0, QuestionId: 0x45A, FormId: 0x2AC0 {0F 0F 29 1E 2A 1E 5A 04 00 00 FF FF 00 C0 2A}
-----------------------------------------------------------------------------
仔细分析发现39D57这条,展开的内容RC ACPI Settings、Connectivity Configuration等等并没在我们的bios高级选项里出现,所以此条为隐藏的高级选项
再看43E73这条,展开的内容和我们的高级选项里的内容吻合,目的就是要此菜单里面添加/删减/替换成我们想要的。
如何修改,我采取的方法是替换内容,因为是针对二进制代码的修改,所以必须保证文件的长度没有变化。我没有找到添加和删减的方法,不知填空的代码是什么,试了00和FF均失败。
具体替换哪个目录选项,我的方法是找到里面的用不到的隐藏选项,把它替换为View/Configure Turbo Options
从43E73往下拉到43F70
-----------------------------------------------------------------------------
0x43F70 Suppress If {0A 82}
0x43F72 QuestionId: 0xF1F equals value 0x0 {12 06 1F 0F 00 00}
0x43F78 Subtitle: Statement.Prompt: , Flags: 0x0 {02 87 02 00 00 00 00}
0x43F7F End {29 02}
0x43F81 Ref: CPU Configuration, VarStoreInfo (VarOffset/VarName): 0xFFFF, VarStore: 0x0, QuestionId: 0x463, FormId: 0x2737 {0F 0F C5 02 C6 02 63 04 00 00 FF FF 00 37 27}
0x43F90 Ref: Power & Performance, VarStoreInfo (VarOffset/VarName): 0xFFFF, VarStore: 0x0, QuestionId: 0x464, FormId: 0x273A {0F 0F 1A 03 1B 03 64 04 00 00 FF FF 00 3A 27}
0x43F9F Ref: OverClocking Performance Menu, VarStoreInfo (VarOffset/VarName): 0xFFFF, VarStore: 0x0, QuestionId: 0x465, FormId: 0x27B4 {0F 0F BA 15 BB 15 65 04 00 00 FF FF 00 B4 27}
0x43FAE Ref: System Agent (SA) Configuration, VarStoreInfo (VarOffset/VarName): 0xFFFF, VarStore: 0x0, QuestionId: 0x466, FormId: 0x274E {0F 0F B5 05 B6 05 66 04 00 00 FF FF 00 4E 27}
0x43FBD Ref: PCH-IO Configuration, VarStoreInfo (VarOffset/VarName): 0xFFFF, VarStore: 0x0, QuestionId: 0x467, FormId: 0x2768 {0F 0F B2 0B B3 0B 67 04 00 00 FF FF 00 68 27}
0x43FCC End If {29 02}
-----------------------------------------------------------------------------
看到这里,这里的内容并没有在高级菜单下出现,这个if语句我认为是判断是否某些高级的主板,则会出现,不是则不显示
就从这里下手,我的做法是把PCH-IO Configuration占用的15个字节替换掉。{ }大括号里的内容即是二进制代码
观察一下QuestionId:后面的数字,是递增的,大括号里的第8和第7字节,所以替换的选项也要跟这个规律(未验证是否一定需要修改,我是这么做的)
打开你喜欢的二进制编辑软件,打开temp.bin,定位到43F70,把43F70-43FCD的二进制内容复制下来
-----------------------------------------------------------------------------
00043f70h: 0A 82 12 06 1F 0F 00 00 02 87 02 00 00 00 00 29 ;
00043f80h: 02 0F 0F C5 02 C6 02 63 04 00 00 FF FF 00 37 27 ;
00043f90h: 0F 0F 1A 03 1B 03 64 04 00 00 FF FF 00 3A 27 0F ;
00043fa0h: 0F BA 15 BB 15 65 04 00 00 FF FF 00 B4 27 0F 0F ;
00043fb0h: B5 05 B6 05 66 04 00 00 FF FF 00 4E 27 0F 0F B2 ;
00043fc0h: 0B B3 0B 67 04 00 00 FF FF 00 68 27 29 02 ;
-----------------------------------------------------------------------------
替换为(替换方法自行百度)注意不是添加也不是删减,是替换,保证文件长度不变!
-----------------------------------------------------------------------------
00043f70h: 0A 82 12 06 1F 0F 00 00 02 87 02 00 00 00 00 29 ;
00043f80h: 02 0F 0F C5 02 C6 02 63 04 00 00 FF FF 00 37 27 ;
00043f90h: 0F 0F 1A 03 1B 03 64 04 00 00 FF FF 00 3A 27 0F ;
00043fa0h: 0F BA 15 BB 15 65 04 00 00 FF FF 00 B4 27 0F 0F ;
00043fb0h: B5 05 B6 05 66 04 00 00 FF FF 00 4E 27 29 02 0F ;
00043fc0h: 0F C7 02 C8 02 67 04 00 00 FF FF 00 3D 27 ;
-----------------------------------------------------------------------------
此处的含义是将PCH-IO Configuration去掉,把End If {29 02}上移到System Agent (SA) Configuration之后,
然后在End If {29 02}之后添加Ref: View/Configure Turbo Options {0F 0F C7 02 C8 02 67 04 00 00 FF FF 00 3D 27},注意修改第8第7字节的数字递增
以下是修改完temp.bin之后的temp IFR.txt内容
-----------------------------------------------------------------------------
0x43F70 Suppress If {0A 82}
0x43F72 QuestionId: 0xF1F equals value 0x0 {12 06 1F 0F 00 00}
0x43F78 Subtitle: Statement.Prompt: , Flags: 0x0 {02 87 02 00 00 00 00}
0x43F7F End {29 02}
0x43F81 Ref: CPU Configuration, VarStoreInfo (VarOffset/VarName): 0xFFFF, VarStore: 0x0, QuestionId: 0x463, FormId: 0x2737 {0F 0F C5 02 C6 02 63 04 00 00 FF FF 00 37 27}
0x43F90 Ref: Power & Performance, VarStoreInfo (VarOffset/VarName): 0xFFFF, VarStore: 0x0, QuestionId: 0x464, FormId: 0x273A {0F 0F 1A 03 1B 03 64 04 00 00 FF FF 00 3A 27}
0x43F9F Ref: OverClocking Performance Menu, VarStoreInfo (VarOffset/VarName): 0xFFFF, VarStore: 0x0, QuestionId: 0x465, FormId: 0x27B4 {0F 0F BA 15 BB 15 65 04 00 00 FF FF 00 B4 27}
0x43FAE Ref: System Agent (SA) Configuration, VarStoreInfo (VarOffset/VarName): 0xFFFF, VarStore: 0x0, QuestionId: 0x466, FormId: 0x274E {0F 0F B5 05 B6 05 66 04 00 00 FF FF 00 4E 27}
0x43FBD End If {29 02}
0x43FBF Ref: View/Configure Turbo Options, VarStoreInfo (VarOffset/VarName): 0xFFFF, VarStore: 0x0, QuestionId: 0x467, FormId: 0x273D {0F 0F C7 02 C8 02 67 04 00 00 FF FF 00 3D 27}
-----------------------------------------------------------------------------
模块修改工作已经完成,将此temp.bin替换回PE32
切回UEFITool,在刚才的PE32 image section点击右键,选择Replace Body,选择temp.bin文件。保存
到此bios的rom文件已经修改完成,刷回主板即可。刷回方法自行百度。
注1:因为常规刷bios的软件会有校验功能,修改过的rom会校验不通过,其他方法自行百度。我这是用的编程器,所以没有继续研究。
注2:某些隐藏选项可能需要再通过AMIBCP修改USER权限才可显示,方法请自行百度。某些选项需要硬件支持,比如没有硬盘,没有独显等等,某些选项也不会显示。
最后重申,修改bios有风险后果自负,即使你有编程器也要谨慎而为!


1楼2020-08-15 12:59回复
    最好把内容复制下来用记事本看,这个网页太窄了,排版都乱了


    2楼2020-08-15 13:08
    收起回复
      技术贴,支持!


      IP属地:内蒙古3楼2020-08-17 21:24
      回复
        哇这不是写了千年缘的伴奏的大神吗


        IP属地:美国来自Android客户端4楼2020-08-22 04:23
        回复
          楼主能把改完的bios发一下吗?我用的也是同一块主,kcity@qq.com 感谢!


          5楼2020-10-28 10:50
          回复
            大佬666


            IP属地:浙江来自Android客户端6楼2020-11-30 09:37
            回复
              看不懂但是也不影响我+3


              IP属地:广东来自Android客户端7楼2020-11-30 09:40
              回复
                大佬厉害


                IP属地:云南来自Android客户端8楼2021-01-05 00:35
                回复
                  想试试但感觉八成会搞砸


                  IP属地:新疆来自Android客户端9楼2021-01-05 14:36
                  回复
                    能不能修改460的BIOS可以超频


                    IP属地:俄罗斯10楼2021-01-05 15:19
                    收起回复
                      联想 Tilapia CRB主板,用编程器提取出bin文件,UEFItool打开后信息栏提示parseFile: invalid data checksum A2h, should be D2h,怎么回事,求解


                      来自Android客户端12楼2023-02-25 19:59
                      回复
                        大佬,帮忙改一下b660的功耗墙显示可以吗?有偿,你把bios给我,我自己烧录


                        IP属地:广东来自Android客户端13楼2023-04-02 00:17
                        回复
                          大佬 9980hk空载撞电流墙怎么解决呢??


                          IP属地:四川14楼2023-04-05 15:07
                          回复
                            最近正在学习BIOS相关的东西,打算给2022款ThinkPadX13关闭处理器自动睿频达到降温的效果,顺手解锁一下白名单,非常感谢楼主的分享!顶一下


                            IP属地:吉林15楼2024-02-03 23:20
                            收起回复