エンジニアリングメニューとは何ですか?なぜ必要なのですか? wikiから引用させてください。
文書化されていない機能 (英語の文書化されていない機能)、NDV-文書に反映されていない技術的なデバイスやソフトウェアの機能。 ほとんどの場合、ドキュメント化されていない機能は、機能をテストしてさらに拡張するために、開発者によって意図的に配置されます。 文書化されていない機能は通常、 リバースエンジニアリングプロセス中に発見されますが、偶然発見されることもあります。さらに記事では、ラジオ局のエンジニアリングメニューのコードを選択する試みの説明。
はじめに
私はかつて中国製のKYD-IP620ラジオ局を購入しましたが、国内の「ブランド」の下にありました。 私はブランドを宣伝しません、とGoogleは言います。 彼の手でひねり、遊び、見捨てられました。 しかし最近、私は再びそれに出会い、このテクノロジーの奇跡にもっと注意を払うことにしました。 平均設定メニューにより、このステーションで使用するソフトウェアを検索する必要がありました。 ソフトウェアは、メニューから利用できるよりも多くの設定を提供するように思えました。
メーカーのウェブサイトにアクセスして、ラジオ局のモデルを見つけましたが、ソフトウェアは見つかりませんでした。 テクニカルサポートに手紙を書き、すぐに答えて、ソフトウェアを送信しました。 インストール、立ち上げ、最初に目を引いたのは、サポートされている範囲の数が多いことです。 彼らは私が(現在の範囲の合理的な範囲内で)私が欲しかった周波数を記録する機会を捜すように促しました。 しかし、その後、私を待っていました。
記録前の公式ソフトウェアは、選択された範囲内に入るために入力された周波数をチェックし、範囲外の記録を禁止しました。 さて、スニファーを開始し、読み書きプロトコルを見つけ、Delphiの
駅を解体しました。 ボードには、特に24C64が見つかりました。 これはi2c EEPROMチップです。 それははんだ付けされ、ダンプを取り除き、はんだ付けされました。 ダンプには、設定と記録した周波数以外には何もありませんでした。 私はi2cスニファーをメモリにフックし、公式ソフトウェア、私のユーティリティ、何もせずに書き込み/読み取りを駆動しました。 i2cバスで実行されるものはすべてEEPROMにあり、余分な読み取りや書き込みは行われませんでした。 EEPROM内のすべてのデータは、私が書いたものだけです。 その後、書き込み/読み取りプロトコルを完成させ、すべてのメモリアドレスの読み取り/書き込みが可能になりました。
それは何ですか?
「なぜこれが必要なのか、何を書いているのか」という質問を予想して、自分の考えを説明しようとします。 Googleは、ラジオ局の前モデルと次モデルの図をいくつか示しました。 記事で説明している実験テーマの概略図は見つかりませんでしたが、70%一致しています(必要な脚を呼び出している間に発見しました)。 スキームによれば、違いは重要ではありません。 これは、顧客の生産コストを削減するために、製造業者、特に中国(その大量生産)が再びグローバルなスキームを設計したり、MKラジオ局のソフトウェアを作成したりしないという結論を示唆しています。 なぜ、わずかに修正する必要がある既製のものがすでにあるのですか? 私見は、プログラマチックを使用せずに、プログラムで調整するのが最も簡単です。 これにより、大量のブランクを作成することが可能になり、最小限の労力で顧客の要件を満たすことができます。 この考えの後、私はエンジニアリングメニューへの入り口を探し始め、それを見つけました。 複雑なことは何もありませんでした。2つのボタンを押しながらラジオ局をオンにする必要がありました。
ここにある!
メニューに入る前に、碑文「SET」が書かれています。
機能にさらにアクセスするには、6桁のパスワードが必要です。 手つぶしは退屈で消えます。 間違ったパスワードの場合、「SET」という碑文が再び表示されます。 Googleが1つのパスワードを与えたため、工場出荷時の状態にリセットされました。 入力すると、碑文が「消去」に変わります。 その後、彼は後でデバッグするときに便利になりました。 MKの検索を整理するというアイデアがありました。 彼に彼のパスワードをゆっくり変えさせてください。
さあ始めましょう
ラジオ局でパスワードを入力するには、ボタンキーボードとエンコーダーがあります。
入力したデータの表示:LCD画面。 カメラをこの全体に固定し、そこから写真やビデオを分析したくありませんでした。 画面があり、それを使用します。 ステーションの内部をもう少し詳しく調べてみると、HT1621BドライバーがLCDディスプレイを担当していることがわかりました。 ドライバーとそのピン配置のデータシートをグーグルで調べて、必要なピンを見つけました。 これらは、CS、WR、およびDATAです。 簡単に言うと、CS-転送の開始、WR-「同期」、DATA-データ。これで離陸してみましょう。 私たちは、MKステーションの結論に電話し、それをはんだ付けし、LCDスクリーンドライバーの脚に導きます。
論理アナライザーを接続し、碑文「SET」および碑文「ERASE」のドライバーに送信されたデータを確認します。 データが異なることは明らかです。必要になります。 次に、入力の「器官」にはんだ付けします。 キーボードの2つのボタン(MENUとF)、およびエンコーダーが必要です。 私はArduinsを持っていません。手元にあることをします。 手元には、同志DiHaltのAtMega16を搭載したPinboardがありました 。
参照条件
「MENU」ボタンと「F」ボタンを押すためのエンコーダーエミュレーターとエミュレーターを作成します(パスワードの入力と確認に必要です)。 LCD画面に表示されるデータを分析します。 AtMega16割り込みを介してLCDドライバーデータを読み取ります。 「標準」(「SET」)からのさまざまなドライバーデータについては、UARTを介して現在のパスワードを出力しますが、ドライバーのデータ形式には入りません。 「MENU」ボタンを押しても碑文「SET」が表示されない場合と点灯している場合を区別する必要があります。 データが異なることは論理的です。 したがって、パスワードの最後の桁が入力され、「MENU」ボタンが押された後に受信したバイト列を比較します。 碑文「SET」のLCDドライバーのいくつかのパッケージをキャッチしたので、それらが同じであると確信し、このパッケージを参照として使用しました。 それと比較して、さらに分析するために、一致するものを破棄し、その他をUARTに転送します。 パスワードでこのアルゴリズムをチェックすると、工場出荷時の状態にリセットされ、期待通りになりました。 一般に、パスワード入力アルゴリズムは次のようになります。碑文「SET」はオンで、エンジニアリングメニューへの招待状です。 「MENU」ボタンを押して、パスワードの最初の文字を入力します。 次に、もう一度「MENU」ボタンを押して次の文字を入力します。 最後の文字まで繰り返します。 最後の文字を入力したら、もう一度「MENU」ボタンを押します。 そして、ここで「SET」という碑文または何か他のものが点灯します。 「SET」が点灯している場合は、パスワードを繰り返して最初に踏みます。そうでない場合は、分析のためにUARTを介してパスワードを送信します。 ブルートフォース管理のためのスクリーンプログラム。
現実
現実には、私は高い検索速度を期待していましたが、人生は調整を行いました。 ラジオステーションでは、MKはエンコーダーとキーストロークを必要に応じて処理し、連絡先の「アンチバウンス」を行い、ユーザーの応答を遅延させます。 したがって、bruteforceコードに遅延が発生します。 はい、すべて遅延に基づいて構築されています。 ブルートフォースを管理するためのツールをスケッチしました。 「標準」以外のドライバーデータを読み取る場合、パスワードは、これが発生したコンピューター上のUARTを介してユーティリティに送信されます。
まとめ
検索が開始され、刻々と過ぎています。 現時点では、私はまだ何もねじれていません。 しかし、私はあきらめません。 私は辛抱強く終わりを待ちます。 このアプローチでは、「誤った」応答が発生する可能性があることは明らかです。 しかし、スキャンされるパスワードの将来の数の一般的な背景に対して、これはバケツの低下です。 これらの「偽の」パスワードは、ユーティリティを使用して後で簡単に再確認できます。 検索の最後に、この総当たり攻撃がどのように終わり、何が起こったのかを確実にお知らせします。
ユーティリティソース、AtMega16ファームウェアはgithubで入手できます 。