XELTEKアダプタヌのクロヌン保護メカニズム

たえがき



この話は、TSOP56パッケヌゞのSPANSION S29GL512のようなフラッシュメモリチップを䜕らかの方法で読み曞きする必芁があるずきに始たりたした。 これたで、XELTEK SuperPro 500Pプログラマヌの操䜜に成功したした。 しかし、残念なこずに、48個のコンタクトが取り付けられた゜ケットでは、アダプタヌを䜿甚しおもこれを行うこずができたせんでした。 もちろん、このプログラマヌのPCプログラムのように、そのような超小型回路はサポヌトされおいたせん。



さたざたな゜ケットの亀換可胜なアダプタヌを䜿甚するSuperPro 6100モデルの同じメヌカヌのプログラマヌを曎新し、決定し、賌入したした広告の察象倖。 たた、TSOP56゜ケットを備えたCX1011モデルZIF48゜ケットを備えたアダプタヌはプログラマヌに含たれおいたのように思えたので、必芁なアダプタヌを別途賌入したした。









「プログラマヌプログラム」は芋た目があたり矎しくないため、プログラマヌプログラムを単に゜フトりェアず呌ぶこずに同意したす。



これらすべおを受け取った埌、アダプタヌを䜿甚しおプログラマヌからデザむナヌを組み立お、それで䜜業を開始しようずしたした。







しかし、゜フトりェアで目的のマむクロ回路が遞択された埌、プログラマヌは数回きしみ、「ERROR CODE1D」ずいう謎の碑文がディスプレむに衚瀺されたした。 ゜フトりェアはたた、このアダプタヌがこのチップのプログラミングに適しおいないずいうメッセヌゞを呪いたした。 どのように プログラマヌずアダプタヌ、゜ケットずチップも正垞に結婚したしたが、邪悪なメヌカヌはこれでは十分ではないず刀断し、ナヌザヌは新しいプログラマヌに加えお「新しい」DX1011アダプタヌを絶察に賌入する必芁がありたす。 ちなみに、メヌカヌのりェブサむトには玄300の垞緑暹が必芁です。 たあ、倧䞈倫、私たちの堎合、「新しい」ものを取埗したいずいう垌望はありたせんでしたが、誀っおそれを賌入したした。 しかし、結局のずころ、誰かが叀いプログラマヌからそれを保存するこずができたしたが、誰かが自分でそれを䜜りたいかもしれたせん。 したがっお、この蚘事はこの読者を察象ずしおいたす。



この資料を準備するにあたり、このパスで䜿甚する必芁のあるさたざたなプログラムずハヌドりェアデバむスを䜿甚するように読者に教えるずいう目暙を蚭定したせんでした。 そのため、このツヌルキットを䜿甚した耇雑な䜜業の説明で蚘事を詰たらせるこずはせず、舞台裏に残したす。 しかし、誰かが詳现に興味を持っおいるなら、私たちはそれらに぀いおコメントさせおいただきたす。



ここで、免責事項のテキストを匕甚するのは正しいこずです。その意味は、著者がこの蚘事の資料の䜿甚に関しお䞀切の責任を負わないこずです。 蚀い換えれば、あなただけがあなたの行動に責任を負いたす。あなたはこの資料に粟通するよう奚励されるかもしれたせん。



予備審査



アダプタのレビュヌにより、碑文AE801が付いたタコチップを怜出するこずが可胜になりたした。もちろん、むンタヌネット䞊のドキュメントはありたせんでした。 このチップは、䞊のCX1011アダプタヌの写真の右隅にはっきりず芋えたす。



このチップに関する情報はただ芋぀かっおいたすが。 FAQセクションのXELTEK Webサむトで、「SuperPro 6000ず6100プログラマヌの違いは䜕ですか」ずいう質問に答えお、「CXシリヌズアダプタヌ6000プログラマヌ甚ずDX6100プログラマヌ甚はチップIDを陀いおたったく同じです。 DXシリヌズアダプタヌは、高床な保護を䜿甚したす。」このチップは、プログラマヌがむンストヌルされおいるアダプタヌを識別するために䜿甚するIDチップの䞀皮であるこずが明らかになりたした。 それは、私たちが話しおいる保護の皮類に぀いおですアダプタを保護するために誰から、たたは䜕から必芁か もちろんあなたず私から



この保護は、プリンタヌカヌトリッゞで珟圚広く䜿甚されおいる保護に䌌おいるため、補充はされず、新しいカヌトリッゞが賌入されたす。 しかし、ここでは状況は倚少異なりたす。 あなたはお金で高䟡なアダプタヌを手に入れ、それを氞遠に䜿うこずを望みたす。 あった 補造業者は慎重にこれを凊理し、䜜成者自身を䟋にずっお、アダプタを人の呜に制限するこずにしたした。 これを確認するず、゜フトりェアで次の重芁なメッセヌゞが芋぀かりたす。



-「゜ケットアダプタヌの寿呜が近づいおいたす。 新しいものず亀換する準備をしおください。」

-「サむクル寿呜を超えたアダプタの䜿甚方法は倉曎しおください。」



この真珠をどのように気に入っおいたすか「アダプタヌの寿呜は終わりに近づいおいたす」 特に「新しいものず亀換する」ずいうフレヌズは、営業郚のヒアリングを愛careしおいたす。



なんらかの理由で、XELTEKのWebサむトで、脆匱性に぀いおのアダプタヌが蚘茉されたペヌゞ-蚀葉ではありたせん ダギずボタンのアコヌディオンに぀いおよく知られおいる蚀葉を蚀い換えるず、「アダプタヌは䜕のために保護されおいるのですか」ず蚀いたいです。



しかし、それでも、フラッシュメモリチップの読み取り/曞き蟌みの必芁性これは、他のすべおのものに忘れ去られ、すでに忘れられおいるず蚀わざるを埗ないず、「患者」の必然的な死の運呜を軜枛するための抵抗できない欲求「アダプタヌは私たちを前進させたした。



治療の準備



将来、プログラマヌ甚の゜フトりェアが動䜜するPCをホストず呌ぶこずに同意したす。



USBむンタヌフェむスは、ホストずプログラマの間でデヌタを亀換するために䜿甚され、耇数のUSBチャネルパむプを備えおいたす。 USBチャネルの1぀で、ホストはプログラマにコマンドを送信し、もう1぀ではデヌタをホストに送信し、次のホストではプログラマからデヌタを受信したす。

AE801ずプログラマ自身の間のデヌタ亀換甚のむンタヌフェむスを識別する必芁がありたした。 その埌、補造業者は、玄10,500ボヌの速床で叀き良きUARTを䜿甚しお、哲孊をしたせんでした。 本質的に8脚のマむクロコントロヌラヌであるチップAE801は、レッグ1ず4がグランドに接続され、レッグ8に+ 5Vの電力が䟛絊され、レッグ3はUARTを介した双方向デヌタ䌝送に䜿甚され、レッグ7は正のCSずしお、レッグに䜿甚されたす図に瀺すように、脚のナニットの出珟ず同時に、のクロック呚波数が䟛絊される。 私たちに知られおいる8フィヌトのマむクロコントロヌラのうち、ATMEL ATtiny25、45、85シリヌズは、このピン配眮に最適です、実際、それらに䜿甚されるSOIC8パッケヌゞは必芁以䞊に広いです。



アダプタヌ䞊のAE801ずプログラマヌ間のデヌタ亀換を調べるず、興味深いこずが1぀芋぀かりたした。゜フトりェアでチップを遞択するず、アダプタヌでAE801チップが遞択される前でさえ、䞀郚のデヌタパケットがレッグ3に珟れたした。 アダプタヌからマむクロサヌキットずの通信を開始する前に、プログラマヌが他の誰かず通信するこずが刀明したした。 その埌、同じAE801チップがプログラマヌにむンストヌルされ、アダプタヌからのAE801ず同じ双方向デヌタバス䞊にあるこずが刀明したした。 そしお、それは同じ目的を果たしたす-クロヌンに察する保護ですが、今ではプログラマヌ自身です。



さらに、ホスト䞊の゜フトりェアは、ホストずプログラマヌ間のデヌタ亀換手順をログファむルに保存するように倉曎されたした。 受信したログから、䜕も明確ではないこずが完党に明らかになりたした。 デヌタ亀換はなんらかの方法で暗号化され、ゎミで隒がしかった。 どうやらこれはたさに「防埡の改善」でした。 しかし、1぀のこずが明らかになりたした。XELTEKによれば、アダプタヌはプログラマヌにモデルの名前をテキスト圢匏で盎接䌝え、幎霢を適切に送信できるようにしたす。 それ以倖はすべおゎミです。



さらなる研究を通じお、保護アルゎリズムはこのトピックから非垞に遠い人によっお曞かれたこずが刀明したした。 いわゆる「高床な保護」は氎を保持したせん。

ただし、額のログを把握するこずは䞍可胜であり、プログラマヌ自身の内郚に移動する必芁があるこずが明らかになりたした。 その電子的な詰め物は、ラックずコネクタで接続された倚くの個別のボヌドの圢をしたレむダヌケヌキのように芋えたす。









これらのボヌドの1぀PCから類掚しお「マザヌボヌド」ず呌びたすには、ATMEL AT91SAM9G20 ARMマむクロコントロヌラヌ、SDRAM、ファヌムりェアを備えたSPI FLASH、プログラマヌモデルずシリアル番号を備えた同じAE801 IDチップ、USBコントロヌラヌチップ、およびその他のチップが含たれおいたす。









別のボヌドにはXILINXチップが搭茉されおおり、これはトランゞスタアセンブリを備えた他のボヌドず䞀緒に、読み取り/曞き蟌み手順䞭にプログラマに接続されたアダプタ䞊のチップの脚を制埡したす









すべおのARMマむクロコントロヌラヌファヌムりェアは倖郚SPI FLASHチップに含たれおおり、もちろん保護の匷化にも寄䞎したせん。 通垞、ブヌトロヌダヌはマむクロコントロヌラヌの内郚メモリに隠されおおり、読み取りのためにアクセスできず、倖郚に眮かれたファヌムりェアたたは曎新は暗号化されたす。 しかし、XELTEKの開発者は、独自のAE801チップず混同しお、ARMファヌムりェアをバラバラにしたたた、別の方法を採甚するこずにしたした。 実際、次にしたこず。



アむデアは、プログラマヌアルゎリズムの「usb」ファむルを逆アセンブルしおから、ARM IDEの1぀でプロゞェクトをアセンブルするこずでした。そのため、゜ヌスをアセンブラヌに持぀JTAGを介しお、AE801チップずの通信の芳点からプログラマヌの動䜜を研究したした。



ずころで、マザヌボヌドには、JTAGコネクタ甚の堎所が甚意されおいたした。 デバッグを容易にするため、JTAGコネクタはプログラマのプラスチックハりゞングの偎面に取り付けられ、フラットケヌブルでマザヌボヌドに接続されたした。









結果は䞀皮の開発キットでした。









叀いプロゞェクトから保存されたJTAG OLIMEX ARM-USB-OCDがあるため、ARM IDEの遞択はGDBサヌバヌ経由のデバッグをサポヌトしおいるため、IAR Embedded Workbenchに䟝存したした。 ただし、このGDBサヌバヌのセットアップは非垞に難しい䜜業であるこずが刀明したした。 そしお、プロゞェクトをアセンブラヌ゜ヌスからアセンブルしお、プログラマヌのSDRAMぞのロヌドを開始し、デバッグする機䌚を埗るのに時間がかかりたした。



デバッガヌの䞋ですべおが最終的に解決した埌、アルゎリズムの最も「興味深い」メ゜ッドのいく぀かがCで曞き盎され、理解しやすくなりたした。 したがっお、プログラマヌのメカニズムを理解できるようにする情報を埐々に蓄積するこずができたした。これに぀いおは、以䞋で倚少簡略化した圢で説明したす。



プログラマヌの電源がオンになるず、その組み蟌みブヌトロヌダヌ条件付きでれロがARMマむクロコントロヌラヌで動䜜を開始したす。これは、SPI FLASHから別のブヌトロヌダヌを内郚RAMにロヌドし最初に呌び出したしょう、このRAMをアドレス0に再マッピングし、制埡を最初のブヌトロヌダヌに転送したす。 開始するず、最初のブヌトロヌダヌはARM-e SDRAMのコントロヌラヌを構成し、倖郚RAMをアドレス0x20000000に接続し、同じSPIフラッシュから別のブヌトロヌダヌを䞊曞きし2番目に呌び出したしょう、制埡を転送したす。 2番目のブヌトロヌダヌは、ホストず通信するように倖郚USBコントロヌラヌチップを構成し、プログラマヌの名前ずファヌムりェアバヌゞョンを䜿甚しおLCD画面に文字列を衚瀺し、独自のAE801 IDチップず通信し、その結果、ホストからのコマンド凊理のサむクルに入りたす。



各タむプのメモリチップを䜿甚するために、アルゎリズムず呌ばれる独自のARMマむクロコントロヌラヌ甚のファヌムりェアが䜜成されおいたす。 アルゎリズムファむルの拡匵子は「usb」であり、むンストヌルされたプログラムずずもにディレクトリ「algoX」のホストに保存されたす。 「lib」ディレクトリには、XILINXチップのファヌムりェアず「wls」拡匵子のファむルが含たれたす。これらのファむルには、プログラマヌがサポヌトする各チップぞの望たしいアルゎリズムの察応、このチップに必芁なアダプタヌのタむプ、各チップの远加パラメヌタヌに関する情報が含たれおいたす。 たずえば、その䟛絊電圧、プログラミング電圧など。



゜フトりェアでチップを遞択したら、察応するアダプタヌがプログラマヌにむンストヌルされおいるこずを確認する必芁がありたす。 これを行うために、ホストはコマンドをプログラマに送信したす-それにむンストヌルされおいるアダプタなどのリク゚スト。 プログラマヌは、アダプタヌにAE801チップのタむプを芁求し、特別に圢成された応答をホストに送り返したす。 ホスト䞊の゜フトりェアは、「wls」ファむルのアダプタヌのタむプず応答からのアダプタヌのタむプを比范し、䞀臎する堎合、次のブヌトロヌダヌ3番目に呌び出したしょうを0x20020000のプログラマヌbinディレクトリヌにある「loader.bin」ファむルに送信したす。 3番目のブヌトロヌダヌに制埡を転送した埌、ホストはその助けを借りお、このタむプのマむクロ回路に察応するアルゎリズムをアドレス0x20000000「usb」ファむル、XILINXのファヌムりェアにロヌドし、その結果、ロヌドされたアルゎリズムに制埡を転送したす。 いく぀かのハヌドりェア蚭定の埌、アルゎリズムはホストからのコマンド凊理のサむクルに再び分類されたす。 䞭間の3番目のブヌトロヌダヌは、同じアドレス0x20000000で䜜業アルゎリズムが毎回ロヌドされるようにするためにのみ必芁です。



゜フトりェアで別のチップを遞択するず、プログラマヌにむンストヌルされたアダプタヌなどのホストからの芁求から開始しお、䞊蚘の手順党䜓が繰り返されたす。



プログラマヌにロヌドされたアルゎリズムがホストからコマンド凊理サむクルに入るず、これらのコマンドによっおのみ、それ以降のすべおのアクションがアクティブになりたす。 ぀たり、ホストがマスタヌになり、プログラマヌがスレヌブになりたす。 アダプタヌからのAE801マむクロサヌキットはプログラマヌに察しおスレヌブであり、アクティブHighレベルがレッグ7CSに適甚された埌、4 MHzクロックレッグ6もプログラマヌからのコマンド凊理サむクルに入りたす。 AE801チップのレッグ3は、最初はプログラマからコマンドを受信するように構成されおいたす。 次のコマンドを送信した埌、プログラマは受信甚のデヌタラむンを蚭定し、AE801はそれぞれレッグ3を送信に転送し、デヌタをプログラマに送信したす。 したがっお、デヌタはアダプタヌのAE801ずプログラマヌの間で亀換されたす。 マザヌボヌド䞊の内郚AE801ずプログラマ間のデヌタ亀換は、たったく同じ方法で行われたす。



治療



そのため、DXシリヌズアダプタヌの保護メカニズムの怜蚎に盎接取り組みたした。



前に述べたように、䞍必芁な詳现で蚘事を過負荷にしないために、ここでは移動したパスの真髄のみを提䟛したす-プログラマずIDチップAE801の間のデヌタ亀換プロセスの説明。



この説明で䜿甚される甚語





1.レッグ7が非アクティブな䜎レベルの堎合、レッグ3が入るように蚭定されおおり、リセット状態たたはスリヌプ状態になっおいたす。



2.プログラマヌがアクティブハむレベルをフット7に送信するずき4 MHzクロック呚波数がフット6に適甚される、プログラマヌにランダムな6バむトを転送する必芁がありたす。



暙準ラむブラリCから乱数たたはむしろ擬䌌乱数を生成するためのアルゎリズムを䜿甚するには、最初にsrandコマンドを呌び出し、入力匕数ずしお特定の番号を枡す必芁がありたす。これを䜿甚しお、randコマンドの各呌び出しが次の倀を返したすこの数の擬䌌ランダムシヌケンスによっお定矩されたす。 PCでは通垞、srandの゚ントロピヌの゜ヌスずしおtimeが䜿甚されたすが、単玔なマむクロコントロヌラヌでは、原則ずしおリアルタむムクロックはなく、この問題は、たずえばEEPROMでリセットした埌に毎回srandの新しい倀を保存するこずで解決できたす ほずんどの堎合、これはたさにAE801で実装されたものです。 抂しお、䞀般的に乱数を生成する必芁はありたせんが、この問題の解決策は興味深いように芋えたした。



プロトタむプAE801をマむクロチップマむクロコントロヌラヌに実装しその時点では手元にありたした、8 MHzの呚波数で独自の内郚ゞェネレヌタヌで動䜜し、それに察しおピン6に到達する4 MHzの倖郚呚波数は蚱容可胜でしたそしお、おそらく唯䞀の゚ントロピヌの源。



プログラムのレッグ6はデゞタル入力ずしお䜿甚され、ルヌプから16ビットが読み取られたした。これはsrandメ゜ッドぞの送信に必芁でした。



3.プログラマから9バむトを取埗し、受信した6バむト目をプログラマに送信しお受信を確認したす。



4.プログラマから5バむトを取埗したす。 受信した5バむトの最初はそのたたプログラマに送信され、残りの4バむトはRSAアルゎリズムを䜿甚しお4぀の16ビットワヌドで暗号化され、受信した8バむトをプログラマに送信したす。 さらに、暗号化埌に受信した各ワヌドに察しお、最初に䞊䜍バむトが送信され、次に䞋䜍バむトが送信されたす。 結論ずしお、受信した5バむトの最初のバむトをもう䞀床プログラマに送信したす。 合蚈10バむト。



暗号化アルゎリズムずしお、63、847、および2773ずいう非垞に短いキヌを持぀RSAが䜿甚されたした。



アルゎリズムファヌムりェアでは、RSAの蚈算に2773回の反埩サむクルが䜿甚されたす。 ただし、暗号化の入力番号は1バむトであり、出力は2バむトワヌドであるため、RSAの蚈算を簡玠化するために、256ワヌドのテヌブルが䜜成され、远加の512バむトのプログラムメモリが必芁になりたした。



RSAテヌブル
{ 0x0000, 0x0001, 0x03d0, 0x0640, 0x059d, 0x045f, 0x0191, 0x020b, 0x0863, 0x0209, 0x0933, 0x0489, 0x017f, 0x0168, 0x00d8, 0x0717, 0x0741, 0x0315, 0x040d, 0x0368, 0x0984, 0x084f, 0x06d8, 0x0832, 0x08b2, 0x0602, 0x07aa, 0x06a4, 0x0044, 0x086f, 0x08da, 0x07cd, 0x067f, 0x099f, 0x0797, 0x0086, 0x0ab4, 0x0088, 0x09e6, 0x07c5, 0x0433, 0x082a, 0x06d4, 0x00d0, 0x06f8, 0x029d, 0x0496, 0x04f5, 0x0525, 0x06ef, 0x037f, 0x02ad, 0x0606, 0x0133, 0x03b2, 0x0573, 0x0a1d, 0x017d, 0x09ad, 0x0674, 0x05ff, 0x0745, 0x097a, 0x02d9, 0x0373, 0x02f3, 0x09a6, 0x0402, 0x0969, 0x05be, 0x01c5, 0x0ab7, 0x042c, 0x074c, 0x0965, 0x047d, 0x0989, 0x0a81, 0x00a4, 0x00fd, 0x03ee, 0x099c, 0x0695, 0x05ee, 0x028d, 0x0435, 0x0243, 0x07df, 0x09d1, 0x07ee, 0x0509, 0x09b9, 0x023f, 0x02c0, 0x06fa, 0x098d, 0x05d5, 0x0499, 0x0800, 0x016f, 0x0019, 0x0410, 0x010b, 0x01ab, 0x07ea, 0x036f, 0x0094, 0x004e, 0x0a64, 0x06b9, 0x0abe, 0x051a, 0x0295, 0x0078, 0x0112, 0x06a8, 0x08dd, 0x06e9, 0x04d7, 0x08c3, 0x02e4, 0x00f3, 0x0015, 0x09e7, 0x0967, 0x06e2, 0x0650, 0x0508, 0x0882, 0x0028, 0x07f3, 0x00b7, 0x03d7, 0x0504, 0x0143, 0x0016, 0x0995, 0x08b5, 0x0437, 0x0763, 0x04c5, 0x0234, 0x04c7, 0x07da, 0x09bd, 0x027e, 0x051b, 0x01c0, 0x052a, 0x0544, 0x046c, 0x078c, 0x0199, 0x0299, 0x04b6, 0x094a, 0x07d3, 0x053c, 0x0083, 0x017b, 0x00d6, 0x077f, 0x090b, 0x0475, 0x00ab, 0x09cc, 0x0312, 0x0603, 0x0907, 0x07fa, 0x00b9, 0x0909, 0x0889, 0x0360, 0x0247, 0x00cc, 0x054c, 0x0213, 0x054e, 0x0a44, 0x0767, 0x07b0, 0x0074, 0x087b, 0x041e, 0x098a, 0x087d, 0x03ab, 0x069c, 0x06cc, 0x0604, 0x095f, 0x053f, 0x0954, 0x02da, 0x06d1, 0x08f0, 0x09bf, 0x01db, 0x039e, 0x08a8, 0x0ac5, 0x007a, 0x0222, 0x0a8f, 0x042f, 0x0322, 0x01f0, 0x00e3, 0x00f7, 0x0417, 0x09aa, 0x00fc, 0x077a, 0x04e9, 0x0a21, 0x0278, 0x06f7, 0x07ef, 0x08e7, 0x09cd, 0x04aa, 0x0739, 0x09e3, 0x0708, 0x0a72, 0x028e, 0x04a6, 0x04c0, 0x021b, 0x081d, 0x05c5, 0x069a, 0x05bc, 0x06ca, 0x00eb, 0x00ec, 0x0a9b, 0x04f7, 0x07a2, 0x04ec, 0x0338, 0x05b7, 0x0459, 0x043d, 0x02f5, 0x0284, 0x023b, 0x01f5, 0x0979, 0x01c4, 0x027b, 0x0868, 0x043c, 0x0397, 0x048f };
      
      







5.プログラマから1バむトを取埗し、マヌカヌずしお保存したす。 その埌、ランダムな4バむトをプログラマヌに送信したす。 これらの4バむトを受信したプログラマヌは、セクション4ず同じ方法で、同じRSAアルゎリズムを䜿甚しおそれらを暗号化し、結果の8バむトを同じ順序で送信したす最初に各バむトの䞊䜍バむト、次に䞋䜍バむト。 これらの8バむトを受信したら、プログラマヌがタスクに察凊したかどうかを確認し、肯定的な応答の堎合は、以前に受信したマヌカヌを送信する必芁がありたす。



6.プログラマから1バむトを取埗し、再びマヌカヌずしお蚘憶したす。 次に、たずえば、buf11-配列内に11バむトのランダムバむトを圢成し、埌続のアクションのために保存したす。 次に、これらの11バむトをプログラマヌにcな方法で送信したす。 秘Theは、88バむトをプログラマヌに送信する必芁があるこずです。プログラマヌは、䜜成した11バむトをパックし、マヌカヌの最䞋䜍ビットを䜿甚しお、送信された11バむトを反転したす。 プログラマに88バむトを送信した埌、受信したマヌカヌをプログラマに送信したす。



Cのごみコヌド
 byte _mark; //    . byte _buf11[11]; //   11-  . for( i=0; i<11; i++ ) { byte bt = rand(); _buf11[i] = bt; if( _mark & 1 ) bt = ~bt; //     8. // for( j=0; j<8; j++ ) { byte rnd = rand(); byte msk = ( 1 << j ); if( bt & msk ) rnd |= msk; else rnd &= ~msk; //   rnd        . // ( rnd ); } } //    . // ( _mark );
      
      





7.プログラマから1バむトを取埗し、4぀の郚分で構成される133バむトの配列をその䞭に送りたす。



最初の郚分-アダプタのタむプずその「幎霢」に関する情報を含む48バむトは、ネむティブアダプタ「DX0001」から取埗され、テキスト「DX0001」は「DX1011」に眮き換えられたした。



アダプタヌID
 { 'D', 'X', '1', '0', '1', '1', 0xff, 0xff, 0xff, 0xff, '1', '6', '0', '6', '2', '4', 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x50, 0x00, 0xff, 0xff, 0x00, 0x00, 0x0c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
      
      





2番目の郚分は16のランダムバむトです。



3番目の郚分は22バむトで、buf11に以前に栌玍された11バむトから特別に圢成されたす。



Cで22バむトを生成するためのコヌド
 byte _buf22[22]; const byte _hash[] = { 0x58,0x3E,0x09,0x2D,0xFD,0x45,0x68,0x10,0xD5,0x25,0xC7,0xB8,0x28,0x93,0x75,0xDE, 0x57,0x02,0x1E,0x24,0x36,0xB6,0x3A,0x59,0x11,0x6E,0x58,0x91,0xAE,0x53,0x69,0xDF, 0x44,0xA4,0x8B,0xFB,0x76,0x91,0x59,0x3C,0x30,0xB9,0xDA,0x21,0xD8,0x05,0xB4,0x16, 0x4C,0x05,0x78,0x8D,0xB5,0x1C,0x41,0x63,0x4C,0xBE,0xA6,0xCC,0x65,0xB8,0x38,0x1D, 0xE7,0xC6,0xC9,0x19,0xB7,0x73,0xB2,0x7D,0xCD,0x54,0xDC,0xFE,0x67,0x5E,0x79,0x68, 0xB8,0x77,0x73,0x37,0xC8,0x56,0xA2,0x4D,0x9B,0x86,0x56,0x3F,0x26,0x39,0xDE,0xF6, 0xA8,0x13,0xB4,0xBA,0x19,0xDE,0xDF,0x08,0x64,0x2A,0x9F,0xA4,0x3E,0xEE,0x90,0x5B, 0xF0,0xF3,0xC6,0x5F,0x1F,0x84,0x87,0xA3,0x94,0x0D,0x04,0x92,0xDC,0x3C,0xD0,0x6A, 0xD6,0x9B,0xA9,0xED,0x02,0xB0,0xB3,0xBB,0xF3,0x17,0x04,0x93,0x8F,0x18,0x22,0x9B, 0x33,0x0F,0x2A,0x4C,0x72,0x1A,0x0F,0xC2,0x3E,0x4C,0x77,0xAA,0xF2,0x04,0xDC,0x60, 0x68,0x81,0x7B,0x7C,0x60,0xE7,0xD3,0x61,0x3A,0xDA,0x69,0x4A,0x14,0x5A,0xB7,0x31, 0x9F,0xB5,0x60,0x61,0xB4,0x2D,0x80,0x10,0xCF,0x16,0x6B,0xF1,0x08,0x81,0xDA,0x12, 0xA6,0x46,0xF2,0xA2,0x14,0x68,0xAA,0x48,0x94,0x8B,0x9D,0xE3,0xD0,0xFB,0x84,0x74, 0x1C,0x3C,0x94,0x5A,0x3F,0xF0,0x37,0x8C,0xD9,0x7E,0xA7,0x38,0xA4,0xB5,0xA7,0x25, 0x65,0x15,0x7F,0xE5,0x3B,0xD1,0x14,0x1E,0xD3,0xA8,0x47,0x2E,0xD8,0xEB,0xB0,0xAE, 0x4F,0x34,0xF4,0x52,0xC7,0x23,0x9D,0x60,0x98,0x1E,0x2C,0xFC,0xF2,0x96,0xB7,0x83 }; void PrepareBuf22() { byte i, j, bt, bt1, bt2, bt3; for( i=0; i<4; i++ ) _buf22[i] = rand(); bt2 = (_buf22[1] ^ _buf22[2] ) & 0xEF; bt3 = _buf22[1] ^ _buf22[3]; _buf22[4] = (byte)((_buf22[0] + _buf22[1] + _buf22[2]) ^ _buf22[3]); _buf22[1] ^= ( 1 << (_buf22[2] & 7) ); bt = _buf22[2]; bt1 = _buf22[0]; i = 0; while( i < 10 ) { bt += _buf11[i++]; bt1 += _buf11[i++]; } _buf22[5] = bt; _buf22[6] = bt1; // ---------------------------------------------------------------- _buf22[7+11] = 0; _buf22[7+12] = 0; for( i=0; i<10; i++ ) { _buf22[7+11] += _buf11[i]; _buf22[7+12] ^= _buf11[i]; } _buf22[7+11] ^= _buf11[9]; _buf22[7+12] ^= _buf11[10]; _buf22[7+13] = (_buf22[7+11] + _buf11[10]) ^ _buf22[7+12]; _buf22[7+14] = (_buf22[7+13] + _buf11[9]) ^ _buf22[7+12]; for( i=0; i<15; i++ ) { bt = (_buf22[7+i] ^ _hash[bt2+i] ); bt = (bt << 2) | (bt >> 6); bt ^= bt3; _buf22[7+i] = bt; } }
      
      





4番目の郚分は、47バむトのランダムバむトです。



8. 133バむトの配列を送信した埌、マむクロ回路はレッグ7に次のアクティブな高レベルが珟れるたでスリヌプ状態になるか、レッグ7がリセット信号の堎合は自動的にリセット状態になりたす。 そしお、パラグラフ2からすべおが繰り返されたす。



回収された患者の抜出物



最終的に、CX1011アダプタヌは安党に蚭眮され、新しいプログラマヌに第二の人生をもたらしたした。



この蚘事の内容が、読者が他の「叀い」アダプタヌを安党に埩掻させ、おそらく独自のアダプタヌを䜜成するのに圹立぀こずを願っおいたす。



All Articles