DEFCONとして知られる今年の年次ハッカーセキュリティ会議では、今年の電子バッジにいくつかのNXPデバイスを使用しました。このドキュメントでは、デバイスをプログラムし、コンポーネントを追加する方法について説明します。このバッジは、NXPのエンジニアリング支援を受けて Grand Idea Studioによって開発され、 このプレゼンテーションではバッジの開発について詳しく説明しています。私はNXPのシステムエンジニアで、Defconでバッジの再プログラミングを始めるのを手伝っていましたが、それを自分で行う方法の詳細をすべて提供するものを作りたいと思っていました。
完全な回路図とファームウェアのソースコードは、次のURLから入手できます http://www.grandideastudio.com/defcon-27-badge/
バッジには、次の 2 つの NXP デバイスがあります。

シリアルポートの使用:
役立つ情報を出力するシリアルインターフェースがあり、完全にレベルアップしたバッジを持っている場合は、いくつかの「秘密」を利用できます。また、printf デバッグのためにバッジをハックするための新しいコードを書いている場合にも非常に役立ちます。デフォルトでは、シリアルポートを介してボードをプログラムすることはできません。この特定のチップはそれをサポートしていませんが、他のチップの一部はサポートしています。もちろん、シリアルブートローダーを書くことは可能ですが、それは間違いなく初心者レベルではありません。
次の 2 つのハードウェアが必要です。
1) ヘッダーピン
3) シリアル - USB コンバータ
ヘッダーピン:
ヘッダーをPCBフットプリントにはんだ付けできます。石英のため、リード線はPCB上で平らである必要があります。A Harwin M20-8770442 はフットプリントに適合し、はんだ付け村で提供されたものであり、下の写真に写っているものです。また、独自のヘッダーを作成してみることもできます。
シリアルからUSBへのコンバーター:
今日、シリアルポートが付属しているコンピューターはほとんどないため、シリアルからUSBへのコンバータードングルが必要です。GND、Power、TX、RXの4つのピンがあります。
DEFCONバッジは1.8Vで動作しますが、チップ自体の定格は最大3.6Vであるため、 シリアルヘッダーの電源ピンを接続しない限り、*3.3Vドングルを使用できます*。GND、RX、TXを接続するだけです。プロダクション デザインでは、VCC を超える IO 電圧は望ましくありませんが、ハッキングの目的では機能し、私は複数のボードで問題なく一週間中使用してきました。
たくさんのオプションがあります。ここでは、特に注意したい場合は1.8Vのもの、またはすでに8ドルのコネクタが付属している3.3Vのものがあります。1.8Vまたは3.3Vで送信するものはすべて機能するため、すでに1つある可能性がありますが、電源ピンを接続しないでください。
ソフトウェア:
TeraTermやPuttyなどのシリアルターミナルプログラムをインストールする必要があります。
1)3.3Vまたは1.8V USBコンバータードングルをコンピューターに接続すると、COMポートとして列挙されます。
2) ドングルの GND ラインをヘッダーの GND に接続します
3)ドングルの TXピンをヘッダーの RXピンに接続します
4)ドングルの RXピンをヘッダーの TXピンに接続します(RXからRXではなく、大学のロボット工学プロジェクト中に丸2日かけて髪をかきむしりました)
5)電源ピンを接続しないでください
5) 終了すると、次のようになります。
6)シリアルターミナルプログラムで、ドングルが次のように列挙されているCOMポートに接続します。
7)シリアルポート設定メニュー(TeraTermではSetup->メニューバーの[Serial Port]にあります)を見つけ、ボーレートを115200に設定します。その他の設定を変更する必要はありません(8データビット、パリティなし、1ストップビット)。
8)ターミナルで、Enterキーを押します。>プロンプトが表示されるはずです
9)ターミナルで、キーボードの「?」キーを押してEnterキーを押すと、メニューが表示されます。
10)押したキーはターミナルに表示されませんが、Enterキーを押すだけでコマンドが実行されることに注意してください
11)Ctrl + xを押してインタラクティブモードを終了し、ラジオの電源を入れ直します。
12)インタラクティブモードではない間、端末は、近くに持ち込んだバッジの送信パケットを表示します。
バッジの再プログラミング:
ハードウェア:
次の 2 つのハードウェアが必要です。
1) Programmer/debugger
2)プログラミングケーブル
プログラムデバッガ:
KL27チップにはARM M0+コアが搭載されているため、ほとんどのARM Cortex Mデバッグプログラマを使用できます。LPC-Link2はわずか20ドルで、NXPまたはほとんどのディストリビューター(MouserやDIgikeyなど)から直接購入できるため、LPC-Link2をお勧めします。「OM13054」を検索します。ただし、ARMプログラマーをすでにお持ちの場合は、J-Link、PEMicroなどを使用することもできます。
ケーブル:
DEFCONバッジには、 Tag Connect TC2050-IDC-NL-050-ALLのフットプリントがあります。このケーブルは製造プログラミング用であり、日常的なデバッグ用ではないため、コードをステップ実行する場合は、クォーツの前面をポップオフして、プログラマをボードに接続したままにするための リテーナークリップ も用意する必要があります。
単にボードを再プログラムしたい場合は、3つの長いガイドクリップを切り取り、ケーブルをPCBに押し付けながら、毎回~5秒間手をしっかりと保持します。
あるいは、すでにJTAG / SWDケーブルがあり、はんだ付けのスキルがある場合は、細いゲージのワイヤーを使用して、自分のコンバーターをボードにハックアップできます /u/videlen 真のハッカーはんだ付け しました 。ただし、 /u/int23h 指摘したように、シングル ワイヤ デバッグ (SWD) を使用しているため、SWDIO と SWDCLK の 2 つのピンを実際にはんだ付けするだけで済みます。ただし、nRESE...

ソフトウェア
必要なソフトウェアは 3 つあります。
1) コンパイラ
2) KL27用MCUXpresso SDK
3) バッジのソースコード
コンパイラ:
MCUXpresso SDK:
バッジソース:
MCUXpresso IDEの使用開始:
1)MCUXpressoIDEを開きます。使用するワークスペースディレクトリを求められたら、ファームウェアソースをダウンロードした場所とは異なる場所にある新しい空のディレクトリを選択(または作成)します。
2) SDK .zipをドラッグ アンド ドロップします。ファイル システムから MCUXpresso IDE の [インストールされている SDK] ウィンドウにファイルします。このようにして、コンパイラは KL27 デバイスとフラッシュ アルゴリズムについて学習します。
3) バッジ ファームウェア フォルダをファイル エクスプローラ ウィンドウから MCUXpresso IDE の [プロジェクト エクスプローラ] ウィンドウにドラッグ アンド ドロップします。
4)クイックスタートパネルで、[ビルド]をクリックします
5)[コンソール]タブに、正常にコンパイルされたというメッセージが表示されます
7) クイックスタートパネルで、[デバッグ] をクリックします。 プログラミングにLPC Link2を使用していない場合は、最初にこれをクリックするときにShiftキーを押したままにする必要があります。これにより、デバッガーが再スキャンされます 最新の MCUXpresso IDE を使用している場合は、起動構成を更新する必要があることを示すダイアログ ボックスが表示されます。「はい」をクリックします。
7) デバッグプローブを確認するダイアログボックスが表示されます。
8)プログラミングケーブルをボードに接続し、を押して接続を良好にします。位置合わせピンがPCBの位置合わせ穴と一致していること、およびピン1(赤いストライプ)が下の写真と一致していることを確認してください。バッジがリセットされているときにビープ音が鳴る場合があります。
9)次に、ダイアログボックスで[OK]をクリックしてプログラミングを開始します。プログラミングが終了するまで(約5秒間)、プローブをそのままにしてください。
10)正常にプログラムされ、再起動時にボードのビープ音が聞こえるはずです。
プログラミングのトラブルシューティング/ヒント:
LPC Link2を使用していない場合は、Shiftキーを押しながらDebugボタンを押すと、新しいプローブが再検索されます。また、デバッグ設定とプローブが JTAG モードではなく SWD モードを使用していることを確認してください。
プログラミングケーブルがパッドと並んでいない場合、このエラーが表示されます。プローブの位置を再調整して、再試行してください。また、プログラミング中にMCUをオンにする必要があるため、バッテリーからの電力が必要です。
上部にあるGUIフラッシュプログラマーを押すと、デバッグビューが読み込まれないため、ダウンロードが速くなります。コードをステップ実行せずにデバイスをフラッシュするだけの場合に便利です。
最後に、ゲームの状態変数の一部は非揮発性の内部フラッシュに格納され、ファームウェアを再プログラムするときに自動的に消去されない可能性があります。これは、プログラマーがフラッシュメモリの領域が使用されていることを認識していないため、時間を節約するためにわざわざ消去しない可能性があります。フラッシュの完全消去を強制して、すべてのゲーム変数を消去するには、一括消去オプションを設定します。デバッグ設定が含まれているdc27_badge LinkServer Debug.launchファイルをダブルクリックし、GUI Flash Tool->Programに移動してプログラムを設定します(最初に一括消去します)。
ARM-GCC の使用を開始するには、次のようにします。
これを簡単にするには、まずNXPのWebサイトから最新のSDKをダウンロードする必要があります。
環境をセットアップしてHello Worldでテストする方法については、 MCUXpresso SDKユーザーガイド のセクション6の指示に従ってください。その後、そのプロジェクトを使用して、バッジのソースコードをにコピーできます。誰かがバッジ専用のMakefileをまとめることができると確信しています。
この一連のブログ記事を参照してください Linuxでarm-gccを使用してSDKを使用(コンパイル/デバッグ)する方法について。
バッジが機能しません:
最初に試すことは、バッテリーをそっとこじ開けて(バターナイフなどで)バッジの電源を入れ直し、元に戻すことです。いくつかのことが起こる可能性があります。

さらなるハッキング:
コードの基本的なハッキングについては、ゲームのフラグを変更して、完全にロック解除されたバッジを与えるように操作してみてください。そこから、他の人がやったように、自分だけのカメレオンバッジを作ってみることができます(https://github.com/japd06/defcon27_badge そして https://github.com/nkaminski/DC27-badge-CFW と https://github.com/NickEngmann/Jackp0t あなたがアイデアが欲しいなら、とりわけ)。または、ピエゾで自分だけの曲を作りましょう。または、端末上のASCIIアート。
バッジのより高度なハッキングのために、PTE22およびPTE23、シリアルヘッダーのTXおよびRXピンを、代わりにADC入力ピンとしてプログラムできます。または、PWMまたは入力キャプチャ用のタイマー入力または出力。
また、はんだ付けがうまくいけば、抵抗点にはんだ付けすることでI2Cデバイスを追加することもできます。t.
最後に、組み込み開発を探求するためのより柔軟なプラットフォームが必要な場合は、バッジと同じチップを搭載したFRDM-KL27Z devキットを20ドルで手に入れることができます。直接購入することも、すべての主要なディストリビューターをオンラインで購入することもできます。プログラマとシリアルインターフェースはボードに組み込まれているため、USBケーブルを使用するだけですべてのプログラミングを行うことができます。KL27 SDKには、チップのすべての機能の使用方法を示す多数のサンプルプログラムも含まれており、いくつかの入門ビデオがあります (ただし、主にこの投稿ですでに説明した内容です)。NFMIチップは搭載されていませんが、USBサポートとArduinoハードウェアフットプリントを備えているため、追加のボードで簡単に拡張できます。サンプルプログラムは、クイックスタートパネルウィンドウから[SDKサンプルのインポート]に移動すると見つかります。
バッジについて他に質問がある場合は、回答を投稿してください!
MCUXpresso IDE 11にはシリアル端末機能が含まれているため、PuTTYまたはTeratermをダウンロードする必要さえありません![]()
デフォルトのレイアウトでは、インストールされているSDK、コンソールなどとグループ化されています。
端末アイコン(下の黄色で強調表示)をクリックし、[シリアル端末]を選択します。
et voila!