这两天瞎折腾 dell 笔记本(其型号是 vostro 2420),由于一些缘故,把笔记本 bios 更新到了 A07,可是我又想把 bios 降权回原本的低版本时发觉不行,最开始我应用的那一个软件对 bios 的备份数据文件居然没法恢复(由于更新的情况下太想尽早解决因此沒有细心看,很有可能是由于程序压根不适合该笔记本的电脑主板型号造成的)!试着了线上的各种各样刷 bios 的软件和方法(包含用 dos 下的 AFUDOS.exe 这些),所有不成功,对于我导致很大的挫折感和烦闷感。
我先查看了另一台同样型号的电脑上的 bios 版本是 A03,因而我在 dell 上下载了 A03 版本的 bios 升级程序(2420A03.EXE),殊不知如果你要升级 bios,他会提醒“You are about to flash your bios to an older Bios version. Dell does not recommend flashing your Bios to an older version. Press OK button to exit.” 如果你点一下确定,程序就退出了,令人对于此事非常的气恼,dell 这个程序为何擅作主张呢,为何严禁用户降权 bios?
我还在试着了全部方法均告失败后,看上去这些在网上的工具在这时所有差强人意(大约是由于这一笔记本型号较为新的缘故促使在网上工具通通不适合),我必须考虑到一个最靠谱最妥当地方法,用 Dell 上的 bios 升级程序刷回家(由于可以确定的下载到和设备型号严苛配对的 bios 升级)。很显而易见,由于我的bios版本早已让我刷至 A07,我觉得刷回的是版本更低的 A03,我知道这一程序实行到最终会弹出那一个非常弱智令人崩溃的提醒,随后退出。因而置身绝地当中此刻唯一念头便是:改动这一程序!寻找弹出这一 MessageBox 的代码随后反转他的逻辑性!这是我这时最终一根一线希望,也是唯一的期待,假如仍然不成功我迫不得已进行这一要我烦闷的实际(那便是凑合着用吧),但这最终的一线希望终究会解救我于危急。
因此动工。启动 IDA,开启 2420A03.exe 这一程序,等候一会让 IDA 剖析结束。要我感到开心的喜讯是,这一程序没有的数据加密和自身保护。很显而易见它是被立即写出的程序(从没考虑到过避免有些人会去改动它而采用保护方式),我又查看了这一程序的資源,觉得里边有一些对话框,好像这一程序是对 ALUWINGUI 程序的一种“封装形式”,由于里边全是一些 ALUWINGUI 程序的印痕,例如对话框这些。可是我运行在网上下载的 ALUWINGUI 这一程序却一直发生死机状态,因此不可把专注力再次足球转会到反编译剖析 2420A03.exe 这一程序上。
弹出这个 MessageBox 的代码很容易精准定位,由于这一 MessageBox 的文本内容是密文放到 .rdata 的,很容易就精准定位到弹出这一 MessageBox 的代码的位置,寻找他们之后,再次往前跟踪程序自动跳转的关键节点,迅速就寻找坐落于(.text)地址 00466E21 处,代码如下所示:
.text:00466E00.text:00466E00 loc_466E00: ; CODE XREF: sub_466D40 9Fj.text:00466E00 ; sub_466D40 B7j.text:00466E00 push offset aWarning_4 ; "WARNING".text:00466E05 lea eax, [ebp Caption].text:00466E0B push eax ; LPSTR.text:00466E0C call ds:wsprintfA.text:00466E12 add esp, 8.text:00466E15 mov ecx, [ebp var_10C].text:00466E1B cmp ecx, [ebp var_214].text:00466E21 jnb loc_466EF0 ; 【关键】要调整的命令!.text:00466E27 movzx edx, word_5072F8.text:00466E2E and edx, 80h.text:00466E34 jz short loc_466E93.text:00466E36 push offset aWarning_5 ; "WARNING!!".text:00466E3B lea eax, [ebp Caption].text:00466E41 push eax ; LPSTR.text:00466E42 call ds:wsprintfA.text:00466E48 add esp, 8.text:00466E4B push offset aYouAreAboutToF ; "You are about to flash your BIOS to an "....text:00466E50 lea ecx, [ebp Text].text:00466E56 push ecx ; LPSTR.text:00466E57 call ds:wsprintfA.text:00466E5D add esp, 8.text:00466E60 push 31h ; uType.text:00466E62 lea edx, [ebp Caption].text:00466E68 push edx ; lpCaption.text:00466E69 lea eax, [ebp Text].text:00466E6F push eax ; lpText.text:00466E70 push 0 ; hWnd.text:00466E72 call ds:MessageBoxA.text:00466E78 cmp eax, 1.text:00466E7B jnz short loc_466E87
大约浏览一下这一函数公式,发觉第11行代码:“jnb loc_466EF0” 便是重要支系点,假如 var_10C < var_204 ,他便会弹出大家最终看到的那一个 MessageBox,不然他便会自动跳转到周边的 00466EF0 位置去一切正常的刷 bios。因此这儿只需把 jnb 改为 jb,程序便会彻底以反过来逻辑性运行(把已经刷低版本 bios 当做刷高版本)。
为了更好地改动选编代码,还要参照 intel 的官方网文本文档:《64 ia 32 architectures software developer manual 325462》。对比文本文档可以具体指导大家如何修改命令。
在 IDA 中显示 jnb loc_466EF0 指令相匹配的是 6 个字节数:“0F 83 C9 00 00 00”,对比文本文档的详细介绍得知,前2个字节数"0F 83" 是 JNB 的操作码(Opcode),后边四个字节数“C9 00 00 00” 意味着地址偏移是 0xC9 (201)个字节数(即: if not below, then EIP = EIP 0xC9)。
下面便是改动这条自动跳转命令,有多种多样方法(下列操作码中的操作数均为相对值,即偏移):
(1)把 JNB 改为 JB(操作码:0F 82)。仅有待刷版本小于现阶段版本才刷。
(2)把 JNB 改为 JNZ (操作码:0F 85)。只需待刷版本和现阶段版本不一样就刷。
(3)把 JNB 改为 JMP(操作码:E9)。没有理由刷。(由于 JMP 操作码仅有一个字节,因此必须补一个 NOP ),有可能还需要改动一个版本相同的自动跳转,我并没有用心仔细观看了。
这儿我使用的是(1)。把该 exe 用 16 进制编辑器例如 UltraEdit 开启,IDA中的是进程室内空间中的逻辑性地址,把 ImageBase 减去就变成文件地址,而 Exe 的默认 ImageBase 是 00400000,因此 00466E21 转换到文件地址是 00066E21,自动跳转到 00066E20 这一行,把从第二个字节数开始的 6 个字节(0F 83 C9 00 00 00)改动成 (0F 82 C9 00 00 00),事实上大家仅仅改动了一个字节(文件地址为 00066E22 的那一个字节数从 0x83 改成 0x82),那样以前的 JNB 命令就变成了 JB 指令。
改动之后,运行改动后的 exe 程序,那一个讨厌的 MessageBox 如预估的没发生,反而是发生了系统已经关机的提醒(有想要了!),随后系统自动重启,激动人心的时间到了,总算见到进到已经更新 bios 的提醒(如下图所示),大概1~2分鐘,bios 更新进行,随后通过再度进到 bios 简易查验版本信息,早已回到 A03 版本一切正常!!!
至此,刷回低版本 bios 就完成了。假如要刷别的版本的 bios 我可能这儿是类似的,一旦碰到这类版本问题致使的不想你刷,就可以对这一文件开展改动。好在这种 bios 更新程序并没对这类改动设置一切阻碍,因而只需具备一点选编专业知识,依靠工具就可以比较容易的改动掉这一逻辑性。最终附加调侃一下,dell 的这一不科学的逻辑性,自由权应当交到用户决策!与此同时,大家都知道,刷 bios 被描述为具备风险性的事儿,我的意见与建议时,一定要慎重,要不是独特必须(例如为了更好地激话 win7 以上系统)和有取得成功的掌握,就最好不要去刷 bios。最终关于激话 win7 再附加说一点,现阶段几乎全部软破译方法和在网上广为流传的 key 早已所有失效,而只剩余最终一条路,就是以 bios 上下手(也就是无论用软件或是硬刷 bios,使 bios 中具备 SLIC 2.1 版本),仿真模拟成实的笔记本 oem 生产商的商品,那样 windows 就只有海关放行,由于虽然这类用方式激话的“盗用”用户总数许多,可是由于他们掺杂在总数更为巨大的原版 oem 商品当中,而现阶段 windows 的验证技术性还不能能鉴别,因此这类“盗用”几乎肯定是安全的。
【填补】BiosFix 程序下载连接:
BiosFix(刷Bios程序輔助工具) 完全免费精简版
表明:该程序就是我写的一个命令行程序。由于 Bios 程序必须做的修改不大(现阶段只需调整一条命令的序列号,只涉及到 1~2 个字节数),拥有这一程序,我只必须给予 Fix 信息,有用户自身进行 Fix,而不会再必须我提交比较大的 Fixed 結果,那样就可以节约网络传送总流量和储存空间。配件中包括程序,配备文件,和程序的源代码,及其使用说明书。
使用方法:
命令行格式: BiosFix.EXE "XXXX.EXE"
例如输入: BiosFix.EXE "D:\M8888A03.EXE"
輸出文件是: "D:\M8888A03_Fixed.EXE"
假如立即双击鼠标文件开启,则程序会提醒用户手工制作输入 Bios 程序途径,这时头尾不用加引号。例如,在 cmd.exe 中能够看见程序造成如下所示輸出:
>BiosFix
Input the source bios file[XXX.exe] to fix:
>E:\Bios_Fix\5437A00.EXE
ImageBase: 00400000H
NumberOfSections: 4
----------------[FixNo: 01]-----------------
VA: 004693B1H
FA: 00068DB1H
Overwrite 2 Bytes (JNB->JNZ);
----------------[Fix Completed!]-----------------
The Fixed File is:
E:\Bios_Fix\5437A00_Fixed.EXE