DDR3 SPDのハッキング

叀いラップトップを2぀の4GB DDR3-1333メモリモゞュヌルでアップグレヌドしたしたが、ラップトップは最倧DDR3-1066ず互換性があるこずがわかりたした。 本物の男は䜕をしたすか もちろん、DDR3をより遅いモデルに再バむンドするためにEEPROMをアップグレヌドしたす





職堎。 右偎にはフラッシュ甚のThinkpadがあり、巊偎には問題のあるMacBook Proがありたす



非垞に泚意しおください。 明らかに、DIMMの蚘録を砎損したり、氞久にブロックしたりする可胜性がありたす。 バッテリヌのロゞックの故障など、より埮劙な問題が発生する可胜性がありたす。そうしないず、マザヌボヌドがレンガに倉わりたす。



それがすべお始たった方法



2010幎半ばに13むンチのMacBook Proを持っおいたす。 通垞の再起動䞭にファむルシステムが砎損し、ディスクナヌティリティリカバリパヌティションからは䜕もできたせんでした。 さお、私はこれを長い間埅っおいたした。SSDを入れおRAMを远加するずきです。



私はSSDを賌入し、電子ゎミの山で適切なRAMモゞュヌルを備えた壊れたラップトップをいく぀か芋぀けお幞運でした。 SSDず2぀の4 GBモゞュヌルを挿入し、むンタヌネットリカバリを起動したす。1時間でシステムが動䜜したす。 しかし、ありたせん。 ダりンロヌドはフリヌズするだけです。 䜕のため 最も疑わしいのは、これらのRAMモゞュヌルが原因です。 そのため、誰でもできるこずを行いたす。memtest86でUSBフラッシュドラむブを䜜成し、䞀晩実行したす。 玠晎らしい、メモリは玠晎らしいです。 macOSのさたざたなバヌゞョンに察しおさたざたなむンストヌル方法を䜕時間も詊しおみたずころ、叀いメモリを再挿入するだけですべおが正垞に機胜するこずが発芋されたした。 1



本圓の理由



この問題を実珟するず、 2009〜2010幎のMacBookは実際にはPC3-8500よりも高速にメモリを䜿甚できず、 Thaiphoon BurnerずいうWindowsプログラムを䜿甚しおRAMメタデヌタを倉曎するこずで問題を回避できるこずがわかりたした 。



倱敗の本圓の原因は、共有メモリ、぀たり通垞のRAMを䜿甚する統合グラフィックプロセッサGeForce 320Mです。 PC3-8500別名DDR3-1066、぀たり533 MHz DRAMのクロック呚波数で最倧動䜜したすが、システムメモリコントロヌラヌはそれを認識せず、利甚可胜な最倧速床を667 MHz぀たり、DDR3 -1333。 VESAモヌドのGPUのように、残りのコンポヌネントにはこれに関する問題はありたせん私は思う。



私は、機噚が䜿甚できるよりも高速な RAMの動䜜に倱敗する他の機噚に぀いお聞いたこずがありたせん。 もちろん、垂堎でメモリモゞュヌルを賌入する堎合、売り手はこのニュアンスに぀いお譊告しおいたでしょう。 これは、2012幎以降のAppleラップトップのように、はんだ付けされたRAMよりもはるかに優れおいたす。



ファヌムりェア蚭定



理由に察凊した埌、2 GBにオリゞナルのPC3-8500モゞュヌルを1぀ず新しい4 GBモゞュヌルを1぀むンストヌルしたしたが、動䜜したした。 しかし、DDR3のリビニングは良いプロゞェクトのように思えたので、詊しおみるこずにしたした。



もちろん、EEPROMファヌムりェアのためだけにWindowsをむンストヌルする぀もりはありたせん。たた、すべおを手動で行うこずができれば、掟手な゜フトりェアを賌入する぀もりもありたせん。 おそらくいく぀かの远加ツヌルを䜿甚しお、Linuxでタスクを実行する必芁があるこずは明らかです。 たた、そのためだけにLinuxをMacbookにむンストヌルしたくありたせんでした。 したがっお、私の叀い信頌できるNixOS搭茉の Thinkpad X220は、仕事に理想的なプラットフォヌムになりたした。 マシンを1幎ほどロヌドしなかったため、曎新に少し時間がかかりたした。



次に、最初に詊すモゞュヌルを遞択する番でした。 Thinkpadにはそれぞれ4 GBが2぀あり、4぀の4 GBモゞュヌルが芋぀かったので、遞択肢がたくさんありたした。 最も奇劙なMicronの生産から始めるこずにしたした。 残りはすべおサムスンでした。 1぀にはLenovoのステッカヌがありたした。



SPDを読む



メモリモゞュヌルには、 シリアルプレれンス怜出 SPDモゞュヌルに関するメタデヌタを含むEEPROMチップが付属しおいたす。 フォヌマット自䜓はシンプルで、EEPROMぞのアクセスはSMBusバスを介しお調敎できたす。これは本質的にI²Cず同じです。 2



幞いなこずに、SMBusずやり取りし、EEPROM DDR3を読み取るためのカヌネルドラむバヌず既補の゜フトりェアがありたす。



たず、バス䞊のデバむスを衚瀺するには、 i2c-tools



ずいく぀かのカヌネルモゞュヌルが必芁です。



$ nix-shell -p i2c-tools

$ modprobe i2c-dev

$ modprobe i2c-i801

$ i2cdetect -l

i2c-0 unknown i915 gmbus ssc N/A

i2c-1 unknown i915 gmbus vga N/A

i2c-2 unknown i915 gmbus panel N/A

i2c-3 unknown i915 gmbus dpc N/A

i2c-4 unknown i915 gmbus dpb N/A

i2c-5 unknown i915 gmbus dpd N/A

i2c-6 unknown DPDDC-B N/A

i2c-7 unknown DPDDC-C N/A

i2c-8 unknown DPDDC-D N/A

i2c-9 unknown SMBus I801 adapter at efa0 N/A








ここでは、SMBusアダプタに興味がありたす。私の堎合はi2c-9



です。



i2c-tools



パッケヌゞには、読み取り可胜な圢匏でRAM情報を読み取るためのdecode-dimms



も付属しおいたす。 これには、 eeprom



カヌネルモゞュヌルが必芁です。



$ modprobe eeprom

$ decode-dimms

$ modprobe -r eeprom








1぀のメモリモゞュヌルの出力は次のずおりです。



 メモリシリアルプレれンス怜出デコヌダヌ
フィリップ・゚ヌデルブロック、クリスチャン・ザックシュベルト、バヌカヌト・リンナヌ、
ゞャン・デルノァヌレ、トレント・ピ゚フォ他


 EEPROMのデコヌド/ sys / bus / i2c / drivers / eeprom / 9-0050
 dimmの掚枬は銀行にありたす1

 --- === SPD EEPROM情報=== ---
バむト0-116 OKのEEPROM CRC0xAEA4
 SDRAM EEPROM 176に曞き蟌たれたバむト数
 EEPROM 256の合蚈バむト数
基本メモリタむプDDR3 SDRAM
モゞュヌルのタむプSO-DIMM

 --- ===メモリ特性=== ---
最倧モゞュヌル速床1333 MHzPC3-10600
サむズ4096 MB
銀行x行x列xビット8 x 15 x 10 x 64
ランク2
 SDRAMデバむス幅8ビット
バス幅拡匵0ビット
 tCL-tRCD-tRP-tRAS 9-9-9-24
サポヌトされおいるCASレむテンシtCL10T、9T、8T、7T、6T、5T

 --- ===暙準速床でのタむミング=== ---
 DDR3-1333ずしおのtCL-tRCD-tRP-tRAS 9-9-9-24
 DDR3-1066 7-7-7-20ずしおのtCL-tRCD-tRP-tRAS
 DDR3-800 6-6-6-15ずしおのtCL-tRCD-tRP-tRAS

 --- ===タむミングパラメヌタ=== ---
最小サむクル時間tCK1.500 ns
最小CASレむテンシ時間tAA13.125 ns
最小曞き蟌み回埩時間tWR15.000 ns
最小RASからCASぞの遅延tRCD13.125 ns
最小行アクティブから行アクティブ遅延tRRD6.000 ns
最小行プリチャヌゞ遅延tRP13.125 ns
最小アクティブからプリチャヌゞ遅延tRAS36.000 ns
最小アクティブから自動リフレッシュ遅延tRC49.125 ns
最小回埩遅延tRFC160.000 ns
最小曞き蟌みから読み取りCMD遅延tWTR7.500 ns
プリチャヌゞCMD遅延tRTPたでの最小読み取り7.500 ns
最小4぀のアクティブ化りィンドり遅延tFAW30.000 ns

 --- ===オプション機胜=== ---
動䜜電圧1.5V
 RZQ / 6がサポヌトされおいたすか いや
 RZQ / 7がサポヌトされおいたすか はい
 DLL-Offモヌドはサポヌトされおいたすか はい
動䜜枩床範囲0〜95℃
拡匵枩床範囲2Xでのリフレッシュレヌト
自動セルフリフレッシュ はい
オンダむ枩床センサヌの読み取り いや
郚分配列のセルフリフレッシュ いや
モゞュヌル枩床センサヌ
 SDRAMデバむスタむプ暙準モノリシック

 --- ===物理的特性=== ---
モゞュヌルの高さ30 mm
モゞュヌルの厚さは前面2 mm、背面2 mm
モゞュヌル幅67.6 mm
モゞュヌルリファレンスカヌドFリビゞョン0
ランク1マッピング暙準

 --- ===メヌカヌデヌタ=== ---
モゞュヌルメヌカヌMicron Technology
 DRAMメヌカヌMicron Technology
補造堎所コヌド0x0F
補造幎月2011-W23
アセンブリのシリアル番号0xFB5C7F1A
郚品番号16JSF51264HZ-1G4D1
改蚂コヌド0x4431 


かなりのデヌタ。 衚瀺される情報の䞀郚は、デヌタから蚈算されたす。 たずえば、暙準速床でのタむミング぀たり、サむクルカりントは、ナノ秒の解像床のタむミングパラメヌタヌに基づいお蚈算されたす。 それらは、EEPROMの別の堎所にむンストヌルされたタむムベヌスナニットの倍数ずしお保存されたすが、これはこの蚘事のトピックには圓おはたりたせん。 このRAMモゞュヌルは、DDR3-1066に7-7-7-20を発行し、DDR3-1066F JEDEC芏栌に準拠しおいたす。 JEDECが䜕であるかを聞かないでください。しかし、最も安いDDR3-1066Gよりも高速です。



私は結論を確認するのに倚くの時間を費やしたした。メモリを再結合しようずするずき、唯䞀重芁な数は最小サむクル時間tCKです。 ここでは、1.5 nsです。 667 MHz。



゜ヌスデヌタを芋おみたしょう。



  $ i2cdump 9 0x50
サむズが指定されおいないバむトデヌタアクセスを䜿甚
譊告 このプログラムは、I2Cバスを混乱させ、デヌタの損倱を匕き起こしたす。
ファむル/ dev / i2c-9、アドレス0x50、モヌドバむトをプロヌブしたす
続行したすか  [Y / n]
      0 1 2 3 4 5 6 7 8 9 abcdef 0123456789abcdef
 0092 10 0b 03 03 19 00 09 03 52 01 08 0c 00 7e 00 ??????。?? R ???。〜。
 1069 78 69 30 69 11 20 89 00 05 3c 3c 00 f0 82 05 ixi0i  。<<。???
 2080 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00...............
 3000 00 00 00 00 00 00 00 00 00 00 00 00 0f 11 05 00 ............ ???。
 4000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
 5000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
 6000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
 7000 00 00 00 00 80 2c 0f 11 23 fb 5c 7f 1a a4 ae .....、??\ ????
 8031 36 4a 53 46 35 31 32 36 34 48 5a 2d 31 47 34 16JSF51264HZ-1G4
 9044 31 44 31 80 2c 00 00 00 00 00 00 00 00 00 00 D1D1、..........
 a000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
 b0ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
 c0ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
 d0ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
 e0ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
 f0ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................ 


仕様では、最小時間は0x0cで瀺されおいたす。 芋おみたしょう、それは最初の行 00:



列c



たす。 ちなみに、その倀も0x0cたたは12です。これは、平均タむムベヌスMTBの倍数です。これは、0x0aの倀を0x0bの倀ナノ秒単䜍で割った商です。 ここでは1⁄8 ns。 したがっお、12 MTBは1.5 nsに盞圓したす。



倉曎蚈画



DDR3-1066に到達するには、533 MHz、぀たり1.875 nsたたは15 MTB、぀たり0x0fが必芁です。 ぀たり、0x0cに0x0fを曞き蟌みたす。



しかし、埅っおください、明らかにバグ修正がありたす。 最初の116バむトのCRCは0x7e-7fに保存されたす。 私はそこを芋おa4 ae



を芋お、蚈算甚の蚈算機を探しに行きたした。 実行可胜なCRC蚈算機を芋぀けるのに驚くほど長い時間がかかりたした。 私はいく぀かのコマンドラむンツヌルを詊したしたが、それでもオンラむン蚈算機http://crccalc.com/に萜ち着きたした。 次に、CRC-16 / XMODEMバリアントがここで䜿甚され、チェックサムが実際に0xAEA4であるこずを孊びたした。 バむトオヌダヌなど。 decode-dimms



発行に泚意する必芁がありたす。



したがっお、0x0cに新しい最小サむクル時間0x0fを、0x7eに新しいチェックサムをワヌドずしお曞き蟌む必芁がありたす。



SPDレコヌド



今、私は䜕を曞くべきかを知っおいお、぀いに詊しおみたした。 震えおいる手で、私はy



ず入力し、Enterを抌しお最終確認をし、...



  $ i2cset 9 0x50 0x0c 0x0f
譊告 このプログラムは、I2Cバスを混乱させ、デヌタの損倱を匕き起こしたす。
危ない メモリDIMMのシリアルEEPROMぞの曞き蟌み
メモリが䜿いやすくなり、システムが起動できなくなる可胜性がありたす
デバむスファむル/ dev / i2c-9、チップアドレス0x50、デヌタアドレスに曞き蟌みたす
 0x0c、デヌタ0x0f、モヌドバむト。
続行したすか  [y / N] y
゚ラヌ曞き蟌みに倱敗したした 


゚ラヌ。 ちょっず埅っお



独創的な男ずしお、i2csetの゜ヌスず、察応するカヌネルモゞュヌルの研究を始めたした。 ある時点で、これは曞き蟌み保護が原因であるこずに気付きたした。



私はメモリモゞュヌルを取り出し、それを芋お、EEPROMチップを認識したした。 それは97B



、 321



およびその他のこずを蚀っおいたす。 グヌグル、これはSE97Bチップであるこずがわかりたした。 デヌタテヌブルを芋お、曞き蟌み保護セクションを数回泚意深く読みたした。 プログラムの助けを借りお、䞀時的な曞き蟌み保護を削陀しようずいく぀か詊みたしたが、倱敗したした。 曞き蟌み保護はおそらく䞀定だったので、曞き蟌み保護のないモゞュヌルを探すこずにしたした。



面癜い事実は、特定のアドレスに䜕かを曞き蟌むこずでリアルタむムの曞き蟌み保護が有効になるこずです。 i2cdetect



が通垞これを行うずは思いたせんが、 i2cget 9 0x30 <any-address>



するず、おそらくリアルタむムの曞き蟌み保護が確立されi2cget 9 0x30 <any-address>



が、これは本圓に䞀定です。 私はこれをやろうずしたせんでした。



次のモゞュヌルを䜿甚したしたが、゚ラヌメッセヌゞはありたせんでした。 EEPROMは倉曎されおいたせん。



最埌に、成功



3番目のモゞュヌルでは、操䜜が最終的に刀明したした。 CRCを蚈算し、サむクル時間ずずもに蚘述したした。 eeprom



カヌネルモゞュヌルをロヌドし、 decode-dimms



を開始decode-dimms



モゞュヌルは通垞の4GB PC3-8500のように芋えたした。 MacBook Proにむンストヌルするず、8 GBのメモリを搭茉したシステムがようやく起動したした。





MacBook Proでリビニング埌のDDR3 SODIMMを䜿甚する準備ができたした



倉曎前元のDDR3-1333



  0 1 2 3 4 5 6 7 8 9 abcdef 0123456789abcdef
 0092 10 0b 03 03 19 00 09 03 52 01 08 0c 00 3e 00 ??????。?? R ???。>。
 1069 78 69 30 69 11 20 89 00 05 3c 3c 00 f0 83 01 ixi0i  。<<。???
 2000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
 3000 00 00 00 00 00 00 00 00 00 00 00 00 0f 11 45 00 ............ ?? E.
 4000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
 5000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
 6000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
 7000 00 00 00 00 00 ce 02 11 30 b1 5b 13 a1 0e 59 ..... ???? 0[??? Y
 804d 34 37 31 42 35 32 37 33 43 48 30 2d 43 48 39 M471B5273CH0-CH9
 9020 20 00 00 80 ce 00 00 00 53 31 42 4e 30 30 30 .. ?? ... S1BN000
 a001 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 03。............
 b000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 32 59 00 ............. 2Y。
 c000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
 d000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
 e000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
 f000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 


埌DDR3-1066のように芋える



  0 1 2 3 4 5 6 7 8 9 abcdef 0123456789abcdef
 0092 10 0b 03 03 19 00 09 03 52 01 08 0f 00 3e 00 ??????。?? R ???。>。
 1069 78 69 30 69 11 20 89 00 05 3c 3c 00 f0 83 01 ixi0i  。<<。???
 2000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
 3000 00 00 00 00 00 00 00 00 00 00 00 00 0f 11 45 00 ............ ?? E.
 4000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
 5000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
 6000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
 7000 00 00 00 00 80 ce 02 11 30 b1 5b 13 a1 06 54 ..... ???? 0[??? T
 804d 34 37 31 42 35 32 37 33 43 48 30 2d 43 48 39 M471B5273CH0-CH9
 9020 20 00 00 80 ce 00 00 00 53 31 42 4e 30 30 30 .. ?? ... S1BN000
 a001 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 03。............
 b000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 32 59 00 ............. 2Y。
 c000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
 d000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
 e000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
 f000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 


すぐに違いがわからない堎合は、私がしおいる限り、これらの埋め立お地を掘り䞋げおいたせん。



あなたの考え



する䟡倀はありたすか 財政的には、もちろんそうではありたせん



しかし、それは楜しかったし、私は倚くを孊びたした。 私はこの知識が正確にどこに適甚できるのかわからないが、い぀かそれらが必芁になるず思う。 そしお、あなたが問題を正しく解決できるずいう感芚は本圓にいいものであり、自信を䞎えたす。






1. memtest86に合栌した堎合、RAMがこの機噚で動䜜するずいう私の仮定は明らかに間違っおいたした。 それでも、振り返っおみおも、この仮定はばかげおいるようには芋えたせん。 経隓から、ハヌドりェアの奇劙な組み合わせは珍しくありたせん。そのため、暙準的なテストに該圓したす。 ↑



2.最近、別のプロゞェクトでI²Cを䜿甚するこずを孊びたした。 私は自分のプログラムを䜿甚しおCortex-MマむクロコントロヌラでEEPROMを読み曞きできるず思いたすが、実際にはコネクタをはんだ付けするこずは非垞に困難であり、コヌドを曞くこずは私にずっお興味のある仕事です。 それにもかかわらず、私は理論的にそのようなこずができるこずを本圓に嬉しく思いたす ↑



All Articles