佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > Dell筆記本刷回低版本bios的方法詳細(xì)教程

Dell筆記本刷回低版本bios的方法詳細(xì)教程

熱門標(biāo)簽:電銷機(jī)器人源碼 電商新玩法 電銷機(jī)器人 科大訊飛語音識別系統(tǒng) 運(yùn)營中心 銀行客服 百度競價排名 美團(tuán)

  這兩天折騰 dell 筆記本(其型號是 vostro 2420),因?yàn)橐恍┰?,把筆記本 bios 升級到了 A07,但是我又想把 bios 降級回原來的低版本時發(fā)現(xiàn)不行,最開始我使用的那個軟件對 bios 的備份文件竟然無法恢復(fù)(因?yàn)樯壍臅r候太想盡快搞定所以沒有仔細(xì)看,可能是因?yàn)槌绦蚋静贿m用該筆記本的主板型號導(dǎo)致的)!嘗試了網(wǎng)上的各種刷 bios 的軟件和方法(包括用 dos 下的 AFUDOS.exe 等等),全部失敗,對我造成不小的挫敗感和郁悶感。

  我先查看了另一臺相同型號的電腦的 bios 版本是 A03,因此我從 dell 官網(wǎng)上下載了 A03 版本的 bios 更新程序(2420A03.EXE),然而當(dāng)你要更新 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.” 當(dāng)你點(diǎn)擊確定,程序就退出了,讓人對此相當(dāng)?shù)臍鈶?,dell 你這個程序憑什么自作主張呢,為什么禁止用戶降級 bios?

  我在嘗試了所有辦法均告失敗后,看起來那些網(wǎng)上的工具在此時全部不給力(大概是因?yàn)檫@個筆記本型號比較新的原因使得網(wǎng)上工具統(tǒng)統(tǒng)不適用),我不得不考慮一個最可靠最穩(wěn)妥地方法,用 Dell 官網(wǎng)上的 bios 更新程序刷回去(因?yàn)楣倬W(wǎng)可以明確的下載到和機(jī)器型號嚴(yán)格匹配的 bios 更新)。很顯然,因?yàn)槲业腷ios版本已經(jīng)被我刷至 A07,我想刷回的是版本更低的 A03,我知道這個程序執(zhí)行到最后會彈出那個超級腦殘讓人絕望的提示,然后退出。因此身處絕境之中這時候唯一想法就是:修改這個程序!找到彈出這個 MessageBox 的代碼然后逆轉(zhuǎn)他的邏輯!這是我此時最后一根救命稻草,也是唯一的希望,如果依然失敗我不得不接受這個讓我郁悶的現(xiàn)實(shí)(那就是將就著用吧),但這最后的救命稻草終將拯救我于危難。

  于是開工。啟動 IDA,打開 2420A03.exe 這個程序,等待一會讓 IDA 分析完畢。讓我感到高興的好消息是,這個程序沒有任何的加密和自我保護(hù)。很顯然它是被直接寫出來的程序(從未考慮過防止有人會去修改它而采取保護(hù)手段),我又查看了這個程序的資源,感覺里面有一些對話框,仿佛這個程序是對 ALUWINGUI 程序的一種“封裝”,因?yàn)槔锩娑际且恍?ALUWINGUI 程序的印記,例如對話框等等。但是我運(yùn)行網(wǎng)上下載的 ALUWINGUI 這個程序卻總是出現(xiàn)死機(jī)狀態(tài),所以不得把注意力繼續(xù)轉(zhuǎn)會到反匯編分析 2420A03.exe 這個程序上。

  彈出這個 MessageBox 的代碼非常容易定位,因?yàn)檫@個 MessageBox 的文本內(nèi)容是明文放在 .rdata 的,非常容易就定位到彈出這個 MessageBox 的代碼的位置,找到它們以后,繼續(xù)向前追蹤程序跳轉(zhuǎn)的關(guān)鍵節(jié)點(diǎn),很快就找到位于(.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

  大概瀏覽一下這個函數(shù),發(fā)現(xiàn)第11行代碼:“jnb loc_466EF0” 就是關(guān)鍵分支點(diǎn),如果 var_10C var_204 ,他就會彈出我們最后見到的那個 MessageBox,否則他就會跳轉(zhuǎn)到附近的 00466EF0 位置去正常的刷 bios。所以這里只要把 jnb 改成 jb,程序就會完全以相反邏輯運(yùn)行(把正在刷低版本 bios 當(dāng)成刷高版本)。

  為了修改匯編代碼,還需要參考 intel 的官方文檔:《64 ia 32 architectures software developer manual 325462》。對照文檔可以指導(dǎo)我們?nèi)绾涡薷闹噶睢?/p>

  在 IDA 中顯示 jnb loc_466EF0 指令對應(yīng)的是 6 個字節(jié):“0F 83 C9 00 00 00”,對照文檔的介紹可知,前兩個字節(jié)"0F 83" 是 JNB 的操作碼(Opcode),后面四個字節(jié)“C9 00 00 00” 代表地址偏移量是 0xC9 (201)個字節(jié)(即: if not below, then  EIP = EIP + 0xC9)。

  接下來就是修改這條跳轉(zhuǎn)指令,有多種方法(以下操作碼中的操作數(shù)均為相對值,即偏移量):

 ?。?)把 JNB 改成 JB(操作碼:0F 82)。只有待刷版本低于當(dāng)前版本才刷。

 ?。?)把 JNB 改成 JNZ (操作碼:0F 85)。只要待刷版本和當(dāng)前版本不同就刷。

  (3)把 JNB 改成 JMP(操作碼:E9)。無條件刷。(因?yàn)?JMP 操作碼只有一個字節(jié),所以需要補(bǔ)一個 NOP ),有可能還需要修改一個版本相等的跳轉(zhuǎn),我沒有認(rèn)真細(xì)看了。

  這里我采用的是(1)。把該 exe 用 16 進(jìn)制編輯器例如 UltraEdit 打開,IDA中的是進(jìn)程空間中的邏輯地址,把 ImageBase 減掉就成為文件地址,而 Exe 的默認(rèn) ImageBase 是 00400000,所以 00466E21 轉(zhuǎn)換到文件地址是 00066E21,跳轉(zhuǎn)到 00066E20 這一行,把從第二個字節(jié)開始的 6 個字節(jié)(0F 83 C9 00 00 00)修改成 (0F 82 C9 00 00 00),實(shí)際上我們只是修改了一個字節(jié)(文件地址為 00066E22 的那個字節(jié)從 0x83 改為 0x82),這樣原來的 JNB 指令就變成了 JB 指令。

  修改以后,運(yùn)行修改后的 exe 程序,那個煩人的 MessageBox 如預(yù)期的沒有出現(xiàn),而是出現(xiàn)了系統(tǒng)正在關(guān)機(jī)的提示(有希望了?。缓笙到y(tǒng)自動重啟,激動人心的時刻到了,終于看到進(jìn)入正在刷新 bios 的提示(如下圖所示),大約1~2分鐘,bios 刷新完成,然后經(jīng)過再次進(jìn)入 bios 簡單檢查版本信息,已經(jīng)回到 A03 版本一切正常?。。?/p>

  至此,刷回低版本 bios 就完成了。如果要刷其他版本的 bios 我估計這里是差不多的,一旦遇到這種版本問題導(dǎo)致的不讓你刷,就可以對這個文件進(jìn)行修改。好在這些 bios 升級程序并沒有對這種修改設(shè)置任何障礙,因此只要具有一點(diǎn)匯編知識,借助工具就可以很容易的修改掉這個邏輯。最后額外吐槽一下,dell 的這個不合理的邏輯,自由權(quán)應(yīng)該交給用戶決定!同時,眾所周知,刷 bios 被形容為具有風(fēng)險的事情,我的個人意見時,一定要謹(jǐn)慎,如果不是特殊需要(例如為了激活 win7 以上系統(tǒng))和有成功的把握,就盡量不要去刷 bios。最后關(guān)于激活 win7 再額外說一點(diǎn),目前幾乎所有軟破解方法和網(wǎng)上流傳的 key 已經(jīng)全部失效,而只剩下最后一條路,就是從 bios 上入手(也就是不管用軟件還是硬刷 bios,使 bios 中具有 SLIC 2.1 版本),模擬成大的筆記本 oem 廠商的產(chǎn)品,這樣 windows 就只能放行,因?yàn)楸M管這種用手段激活的“盜版”用戶數(shù)量很多,但是因?yàn)樗鼈兓祀s在數(shù)量更加龐大的正版 oem 產(chǎn)品之中,而目前 windows 的認(rèn)證技術(shù)還不足以能識別,所以這種“盜版”幾乎肯定是安全的。

【補(bǔ)充】BiosFix 程序下載鏈接:

  BiosFix(刷Bios程序輔助工具) 免費(fèi)綠色版

  說明:該程序是我寫的一個命令行程序。因?yàn)?Bios 程序需要做的改動很?。壳爸恍枵{(diào)整一條指令的機(jī)器碼,只涉及 1~2 個字節(jié)),有了這個程序,我只需要提供 Fix 信息,有用戶自己完成 Fix,而不再需要我上傳較大的 Fixed 結(jié)果,這樣就可以節(jié)省網(wǎng)絡(luò)傳輸流量和存儲空間。附件中包含程序,配置文件,和程序的源代碼,以及使用說明。

  用法:

  命令行格式: BiosFix.EXE "XXXX.EXE"

例如輸入:    BiosFix.EXE "D:\M8888A03.EXE"

  輸出文件是: "D:\M8888A03_Fixed.EXE"

  如果直接雙擊文件打開,則程序會提示用戶手工輸入 Bios 程序路徑,這時首尾不需要加雙引號。例如,在 cmd.exe 中可以看到程序產(chǎn)生如下輸出:

  >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

  以上就是Dell筆記本刷回低版本bios的方法詳細(xì)教程,更多教程內(nèi)容請繼續(xù)關(guān)注腳本之家網(wǎng)站!

標(biāo)簽:黃山 承德 常州 馬鞍山 健身房 衢州 浙江 九江

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Dell筆記本刷回低版本bios的方法詳細(xì)教程》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    陇西县| 彰武县| 佛坪县| 新田县| 中方县| 城口县| 惠安县| 清徐县| 镇原县| 南汇区| 宝坻区| 方城县| 宣化县| 仲巴县| 文昌市| 涞源县| 富锦市| 溧阳市| 鄯善县| 手游| 嘉荫县| 南部县| 吉水县| 平乡县| 康乐县| 顺平县| 舟曲县| 丰都县| 万安县| 达拉特旗| 盱眙县| 读书| 凤冈县| 泰州市| 子长县| 汶川县| 沭阳县| 雷山县| 房产| 舟曲县| 喀喇沁旗|