Lenovo X201でサポートされていないWimax / Wifiカードを挿入した方法の物語

私はどういうわけか個人使用のノートパソコンLenovo X201の手に落ちました-優れた作業機械です。
そこにあるものはすべて良いように見え、すべてがそこにあるように見えますが、いつものようにもっと欲しいです-内蔵WiMaxが欲しかったです(すでに3Gモデムが入っていて、うまく機能します)

画像

WiMaxの場合、Intel WiMax / Wifi Link 5150 PCIeミニカードが購入されました。
インストール後、最新のラップトップ(特にLenovo)のほとんどが、サポートするデバイスのホワイトリストを持っていることが判明しました。 これは明らかにユーザーが会社の店舗でブランド化されたデバイスのみを購入するように行われます。 正直に言って、もしそれらが私たちと一緒に自由に売られていたら、私はそのようなデバイスを買うのがうれしいです(もしそうなら、私は十分に見ていなかったかもしれません)
特に、私がスリップしたカードがホワイトリストに載っていないことを知り、メッセージを発行したとき、私のラップトップは動揺していました。
1802: Unauthorized network card is plugged in - Power off and remove the miniPCI network card.
サポートされていない3Gモデムをインストールすると、次のメッセージが表示されます。
1804: Unauthorized WAN card is plugged in - Power off and remove the WAN card.

知らない人のために、ただ一つの機能に注意を払いたいだけです。 実際、同じボード上にあるWiFiとWiMaxは、2つの異なるチャネル(それぞれPCIe、2番目のUSB)を介して接続されています。

たぶん、これは誰かを驚かせるかもしれません(たとえば、私は以前)-WiMaxはUSBバスを介して接続されていますが、両方のデバイスは同じボード上にあります。 そのような接続は明らかではなく、最も重要です-PCIeコネクタ上のUSBピンの存在はオプションです(これはLenovo x61sラップトップに押し込んだものです)-テスターで確認するか、内部ドックを読む必要があります。
ウィキペディアの mini-PCIeコネクタのUSBに関する情報がいくつかあります-結論36、38。

ところで、そのようなハイブリッドカード(少なくとも私のもの)は、一度に2つのモードで動作することはできません。 つまり またはwifiまたはwimax、ソフトウェアの切り替え。 これは、理論的には、カードの電源を入れる際に問題を引き起こす可能性があります。 フォーラムで判断すると、問題は解決しましたが、はんだごてがなければ解決できないようです。 幸いなことに、私にとってはうまくいきました。

したがって、突然この記事で誰かがWifi / Wimaxカードを購入するように動機付けられた場合、まずPCIeコネクタにUSBが本当にあることを確認する必要があります。そうしないと、少し手間がかかります。
USBが不足しているにもかかわらず、一部の職人はUSBをMiniPCIに分割することができました。これには、欲望、手、ワイヤ、はんだごて、回路が必要ですが、これはすでに極端です。

問題の調査はフォーラムから始まりました。
(1) forum.thinkpads.com/viewtopic.php?t=55837
以降
(2) www.thinkwiki.org/wiki/Problem_with_unauthorized_MiniPCI_network_card
(3) http://web.dodds.net/~vorlon/wiki/blog/Upgrading_a_ThinkPad_BIOS.html
(4) www.endeer.cz/bios.tools
(5) www.endeer.cz/bios.tools/bios.html
(6) http://forums.mydigitallife.info/threads/20223-Remove-whitelist-check-add-ID-s-to-break-hardware-restrictions-mod-requests.?p=338719#post338719
(7) www.endeer.cz/bios.tools/modz.html?machine=ALL

私はかなり複雑なケースがありました-新しい修正のBIOSとCMOSでの数バイトの編集などの方法は機能しなくなり、参照用に私のモデルの準備が整ったBIOSもありませんでした(7)。 私の場合、問題を解決するには3つの方法がありました。
  1. ホワイトリスト検証をオフにする
  2. 不要なカードと引き換えに、ホワイトリストの私のカードからVEN / DEV / SUBSYSを書く
  3. マップ内のVEN / DEV / SUBSYSを、既にホワイトリストにあるものに変更します。

3番目の方法は、どうやら美しくないように見え、fireの問題を引き起こす恐れがありました。
2番目の方法は魅惑的で簡単だと思われました-なぜなら ASMコードを検索してパッチを作成することに煩わされることはありませんが、それでも最初の方法を目指しました。 より汎用性が高く、美しいです。

選択する方法を決定します。 方法3は参考文献(2)で説明されています。
方法2-一連のバイトを対象のバイトでバカに置き換える。 BIOSチェックサムは、少なくとも私のバージョンでは、どこでも特に確認されていません。 いくつかのtrapがあるかもしれませんが、 私はこの方法で行こうとしませんでした-それらについて知りません。

リンク(4)、(5)を読んだ後、パッチを適用したbiosを自分で作成するというアイデアに触発されましたが、4時間目のリンク+ IDAで数時間ツールを使用した後、少し疲れて、このアイデアを打つことを考えていました。
しかし、リンク(3)で見られる線が突然第2の風を開きました
画像

もう一度リンク(4)と(5)の内容を注意深く読み、ゆっくりとBIOSの選択を開始しました。 そこに書かれていることを翻訳しません 残念ながら、これらのページの著者は、私の意見では、プレゼンテーションの可用性と一般に情報の可用性にあまり満足していません(記事は読み書きができますが)。コードの実際の検索と置換の検討に関連する記事の部分はあまり理解していませんでした。 おそらく、IDAとアセンブラーの熱心な鑑識家であるあなたは、彼が書いていることを理解することができます-しかし、biosの問題では、それを一度失敗するよりも数回測定する方がいいでしょう(悲しい経験がありました)。 また、記事の情報は少し時代遅れであるという感じもあります。 もちろん、アセンブラの知識はほとんどありませんでしたが、何をする必要があるかを理解するには明らかに不十分でした。

一般に、私の研究は理解できるものには至りませんでしたが、幸いなことに、適切なタイミングで、私がもう少し手を離しそうになったときに、 kmeawの良き友人が私を助け、目的のファイル内のホワイトリストチェック機能をすぐに見つけて、バイト おそらくこの歌詞の部分を終了し、私の行動を説明します。

少し警告。

あなた自身のリスクであなたがするすべてのさらなる行動!!!


BIOSでの作業(特にすべてを自分で行う場合)は、非常に責任があり危険なプロセスです。
以下に説明するすべてのアクションは、Lenovo X201のBIOS v1.22に適用され、他のラップトップに必要なアクションとは異なる場合がありますが、一般的な原則を説明します。
BIOSを操作するためのすべてのユーティリティは、記事の最後のリンクにあります。

BIOSハックはいくつかの段階で構成されています。
  1. ダウンロード、アンパック、モジュールへの分解。
  2. 検証機能の検索(WANの場合-1つの機能、WWANの場合-別)
  3. バイパス検証機能の構成
  4. ファイルのパックバージョンを元のバージョンのサイズに合わせます(サイズは一致する必要があります)
  5. モジュールの元のバージョンとパッチを適用したバージョンを比較して、メインBIOSモジュールを変更します。

始めましょう。
1.ダウンロード、展開、モジュールへの分解。

最初に行うことは、実際のBIOSファイル自体を取得して、さらに作業を進めることです。 これを行うには2つの方法があります。
*現在のBIOSのバックアップを作成して操作します。 なんらかの理由で、私はこの方法を使用しないことにしましたが、それについては何も言えません。
*公式Webサイトからファームウェアファイルをダウンロードし、解凍します。

対象の$ 01C2100.FL1ファイルは、\ DRIVERS \ FLASH \ 6quj08us \ 6QET52WWにあります。
このファイルは、システムBIOSの圧縮イメージです。 他のすべてのファイル(FL1を除く)は、私が興味を持っていなかったシステムの他の部分に属し、それらが何のためにあるのかわかりません-将来は特に必要ありません。

目的のファイルが見つかったら、それを解凍する必要があります。
これを行うには、次のコマンドを入力します。
phcomp /D $01C2100.FL1
次に、コマンドを使用して結果のファイルをモジュールに変換する必要があります
phnxsplit.exe $01C2100.FLh
(cynwin1.dllライブラリは、phnxsplit.exeが機能するために必要です)
ほとんどのファイルがlzintアルゴリズムに従ってアンパックされ、すべてを戻すために修正されたファイルを戻す必要があることに注意する価値があると思いますが、それについては後で詳しく説明します。
2.検証機能の検索(WANの場合-1つの機能、WWANの場合-別)

コマンドを実行すると、* .rom拡張子が付いた一連のファイルが取得されます。 この不名誉の中から、目的のファイルを見つける必要があります。 まず、whileリストで100%のデバイスを見つける必要があります。 これを行うには、次のものが必要です(異なるOSを使用している場合は、XPの方法を以下に説明します-自分でデータを見つける方法を見つけてください)
「デバイスマネージャー\(wifiデバイスまたは3gモデム)\情報\デバイスインスタンスコード」
たとえば、次のようにします。
Intel Wifi Link 1000BGN, PCI\VEN_8086&DEV_0084&SUBSYS_13158086&REV_00
興味深いデータは次のとおりです。
VEN_8086&DEV_0084&SUBSYS_13158086
これにより、次の検索文字列が生成されます。
0x8680840086801513
3Gモデムの場合
0xc6050592
これがどのように発生したかは明らかだと思います(レコードの各部分のバイト順)。
例のこの行を直接使用できます。BIOSにあるはずです。

そのような行を受け取った後、解凍されたすべてのファイルを何らかの方法で検索する必要があります。 ほとんどの場合、1つのBIOSCODEXX.romファイルになります
私は個人的にFARを使用してこれを行いました(Alt + F7、16進コードを探します)。

私の場合、目的の検証機能を備えたファイルはBIOSCODE06.romファイルでした。
ここから楽しみが始まります。
かなり長い間IDAを通してそれを開いて、私は参考文献(5)で言われていることを理解しようとしました。 ところで、最初にソースファイルの名前を.hex拡張子を持つファイルに変更して、BIOSファイルを開く必要があります。
このファイルは、27バイトのヘッダーとバイナリ16進アプリケーションの本体で構成されています。 見出しは、メインBIOSに対するオフセットを示します。 私が理解したのは、操作中にすべてのモジュールが同じメモリ領域にあり、モジュール内の関数へのポインタがオフセットを考慮して参照されるため、オフセットがそこに示されることです。
3.バイパス検証機能の構成

実際には、興味のあるコードの部分では、関数のすべてのjmpは相対的であり、オフセットは値を再生しません。
モジュールを独力で理解しようとしても何も得られませんでした-アセンブラーの知識が少なかったにも関わらず、分解の最低限の経験さえなかったため、私は友人にアドバイスを求めなければなりませんでした。
10分後、彼は私にそのようなスクリーンショットを送った
画像
スクリーンショットには、実際に修正が必要なものが含まれていました。

スクリーンショットを見た後、hiew 6.50(アーカイブにあります)を使用してファイルを編集することにしました。 IDMよりも簡単であることが判明しました。
HIEWの使用に関する小さなヘルプ:
F4 - (Text, Hex, Decode)
------ Hex
------ - Decode
------ Hex Ctrl+F5
Ctrl+F5 - . 27- . , -1B
F5 - ( hex)
F3 -
F9 - .


スクリーンショットに示されている編集は、ホワイトリストチェック機能が見つかった後、非常に理解しやすく簡単です。
関数は1つの場所からのみ呼び出され、明確な境界があります。 変更点は、関数の開始時に、関数の最後にjmpが発生することです。 同時に出力は、カードがテストに成功したかのように見えます。
検証機能が殺されたようで、すべてがそうでしたが、そうではありません-機能はWifi / Wimaxカード(エラー1802)のみを担当していました。 別の機能があります-WANを確認する(エラー1804)。 検索にそれほど時間はかかりませんでした-原理は同じであることが判明しましたが、編集後、圧縮された形式のモジュールが正しいサイズ(変更が行われる前と同じサイズ)になりたくないため、パッチにはかなりの時間がかかりました。

同じサイズが必要なのは、新しい$ 1C2100.FLhファイル内のモジュールを後で置き換えるphnxmod.exeユーティリティは、新しいファイルが少なくとも1バイト古いファイルと異なる場合、ファイルを処理できないためです。

実際、必要な変更を加えてサイズを調整するために、多くの修正を行い、検証機能の一部を消去する必要がありました(残念ながら、jmpを追加した後は不要になりました)。
写真の結果:
画像
上のスクリーンショットは、WANカード検証機能の回避策です。
下のスクリーンショットは、Wfi / Wimaxカードをチェックする機能の回避策です。

4.ファイルのパックバージョンを元のバージョンのサイズに合わせます

ファイルがバックパックされた後、ファイルに変更が加えられました。
ご想像のとおり、このファイルはphcompコマンドでパッケージ化されていないことに注意してください。 キットからBIOSへの一連のコマンド。
- prepare.exe
------ , , -.
------ , logo.scr.
------ "LOGO logo.." "BIOSCODE file.rom"
- fi.exe, fp.exe, ceimain.bin, rom2mod.exe
------ , , -.
------ , logo.scr.
------ "LOGO logo.." "BIOSCODE file.rom"
------ linux wine

新しいものから古いものを決定することができます-BIOSに付属しているものによって、\ DRIVERS \ FLASH \ 6quj08usフォルダで
一般的に、私は気づくまで、これでかなりの時間を費やしました。 記事の最後に、特にbat-nickname(logo.batに基づく)を使用したBIOS向けの、パッチが適用されたファイルをパックするための既製のユーティリティセットがあります。

また、BIOSCODE06.romというソースファイルをパッケージ化する必要があります。
結果は、同じサイズの2つのファイルBIOSCODE06.rom-lz(パッチ)、BIOSCODE06.rom-orig-lz(オリジナル)です。
5.モジュールの元のバージョンとパッチを適用したバージョンを比較して、メインBIOSモジュールを変更します。

パッチが適用されたBIOSを完成させる最後の手順は、コンパイルされたメインBIOSファイル$ 01C2100.FLhのモジュールを交換することです。

これを行うには、次のコマンドを使用します。
phnxmod.exe 01C2100.FLh BIOSCODE06.ro2 BIOSCODE06.ro2.patched
構文は次のとおりです。
phnxmod.exe($ 01C2100.FL1のアンパックバージョン)(元のパックモジュール)(変更されたパックモジュール)。

コマンドを実行すると、次のように表示されます。
Okay, all files open.
ROM size 200000h, old module 7B66h+1Bh, new module 7B66h+1Bh.
Loading data...Old module (without header) found at 1EA565h. Replaced.
Writing modified ROM back... Done.

---------------- WARNING! ----------------
If you don't know what you're doing there's a very high risk of rendering your
computer unusable by flashing a modified BIOS. This is not a safe playground.
---------------- WARNING! ----------------

これがハックの最後の段階です。

結果のパッチファイル$ 01C2100.FLhは、WinPhlashを使用したフラッシュに使用できます。
これを行うには、リンク(6)からアーカイブを取得し、ROMファイルと構成を修正し、ラップトップを再フラッシュしました。

点滅後、ラップトップでサポートされていないWimax / wifiカードを正常に起動し、Wifi、Wimax(Comstar、Yota)への接続を確認しました-すべてが正常です。

Sierra MC8775 3Gモジュールもテストされましたが、このモデルではサポートされません。 ラップトップは正常に起動しました。 ドライバーをインストールした後、3Gネットワ​​ークに正常に接続できました。

ファイル:
1. レノボX201(ホワイトリストなし)のバイパスされたBIOS 1.22を含む既製のアーカイブ1802/1804エラー
:
WinPhlash.exe . "Advanced Settings" - :

("Flags" Tab):
[ ] Verify BIOS part number
[ ] Flash only if BIOS version is different
[ ] Flash only if BIOS version is newer
[ ] Verify BIOS image size
[ ] Verify BIOS checksum
[ ] Zero block before erasing
[x] Verify block after programming
[x] Disable Axx swaping automatic detection (if present)
[ ] Clear CMOS Checksum

("DMI" tab)
"Update": Select "Update the BIOS and not DMI"

2. パッチが適用されたファイルBIOSCODE06.rom (アーカイブ内の$ 01C2100.FLhは既にパッチされています)
3. BIOSを操作するための一連のユーティリティ
4. モジュールパッケージングのユーティリティ

結論として、BIOSで行うことはすべて非常に責任があり、真剣であることを改めて思い出したいと思います。 何かについて不確実な点がある場合は、100回再確認して、すべてが正しく行われていることを確認することをお勧めします。 フラッシュするときは、すべてのプログラムとアプリケーション(Windowsからフラッシュする場合)をオフにするか、起動可能なCDまたはUSBフラッシュドライブからフラッシュすることをお勧めします。 また、すでにパッチが適用され、検証済みのBIOSバージョンを使用することをお勧めします(リンク(7)で自分で検索するよりも、試してみることができます。検索する場合は、少なくとも上記のリンクでこの記事を除き、できるだけ多くの情報をお読みください)。

追伸 ASMコードの編集とトゥルーパスの指示を支援してくれkmeawに感謝します。

Source: https://habr.com/ru/post/J107598/


All Articles