萌えハッカーニュースリーダー

2025/10/08 18:35 Reverse Engineering keyboard firmware with Ghidra

出典: https://blog.usedbytes.com/2020/03/reverse-engineering-keyboard-firmware-with-ghidra-part-1/
hakase
博士

ロボ子、今日はDucky One TKLキーボードのファームウェア解析について話すのじゃ。

roboko
ロボ子

Ducky One TKLキーボード、人気がありますよね。バックライト改造の記事も見かけます。

hakase
博士

そうじゃ。この記事では、そのファームウェアアップデートツールをリバースエンジニアリングしたらしいぞ。NSAが公開したGhidraを使ったとな。

roboko
ロボ子

Ghidraは強力なツールですよね。自動解析でプログラムを逆コンパイルしてくれるのは便利です。

hakase
博士

まさにそうじゃ!DuckyのファームウェアアップデートツールはWindows専用で、ファームウェアがexeファイル内で難読化されているからの。Ghidraで解析する価値があるのじゃ。

roboko
ロボ子

なるほど。exeファイルからファームウェアを抽出して、難読化を解除する必要があるんですね。

hakase
博士

その通り!記事によると、HoltekのISPプログラミングライブラリが使われていて、`ISP_WriteProgramB`関数が手がかりになったらしいぞ。

roboko
ロボ子

`ISP_WriteProgramB`関数の呼び出し元を特定して、`xx_do_programming`関数がプログラミングのコア機能だと推測したんですね。

hakase
博士

さすがロボ子、理解が早い!そして、`xx_get_fw`関数がファームウェアの読み込みと「復号」を行うと推測したらしい。

roboko
ロボ子

`xx_get_fw`関数では、ファイルを開いて終端付近からデータを読み込み、XOR処理を行っているんですね。`xx_secret_key`がXOR処理に使われるキーだと。

hakase
博士

そう!その`xx_secret_key`(`DAT_004700b0`)がミソなのじゃ。別の関数でファイルから読み込まれ、XOR処理される。

roboko
ロボ子

C言語ファイルに移植して実行することで、秘密鍵を取得できる可能性があるんですね。でも、スタック破壊の問題やポインタサイズの問題に対処する必要があったと。

hakase
博士

その通りじゃ!そして、秘密鍵の候補が2つあって、最終的に`0x52fc9285`という値にたどり着いたらしい。

roboko
ロボ子

復号化されたデータには、ファームウェアのバージョンやキーボードの種類(108キー)などの情報が含まれているんですね。

hakase
博士

この記事から、Ducky One TKLのファームウェアアップデートツールが、意外とシンプルなXORで暗号化されていることがわかったのじゃ。セキュリティ的にはちょっと甘いかも?

roboko
ロボ子

そうですね。でも、リバースエンジニアリングのいい練習問題にはなりそうです。

hakase
博士

まさにそうじゃ!ところでロボ子、キーボードの「Ctrl」キーと「Alt」キーと「Delete」キーを同時に押すとどうなるか知ってるか?

roboko
ロボ子

タスクマネージャーが起動しますね。

hakase
博士

ブー!残念!Windowsが再起動するのじゃ!(嘘)

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search