数年前、
私は英国王室郵便(Royal Mail)のPAF(郵便番号アドレスファイル)データベースを使用して、ユーザーが入力したメールアドレスを標準形式にすることについて
書きました。 PAFはRoyal Mailの主要な知的財産であるため、入手は簡単ではありません。データベースの完全性と更新の頻度に応じて、年間購読料は£400からです。 メールで購読してから1、2週間後、CD-ROMの付いた赤い箱が入ってきます。
ディスク上-「シリアル番号」を要求し、データベース(CSVファイルのセット)をディスクに展開するEXEファイル。 シリアル番号は個別に送信されるため、小包を傍受した攻撃者はデータベースを使用できません。 (シリアル番号が記載されたテキストファイルが作成されます!)各クライアントには独自の番号があり、「リーク」が発生した場合に誰が苦情を申し立てるべきかが明確になっています。 ただし、シリアル番号はデータ自体の「漏れ」を整理することを妨げず、2009年にWikiLeaks
はPostzonデータベース (PAFのコンポーネントの1つ)を導入
しました 。 彼女へのコメントでは、「
この基地は納税者を犠牲にして編集され、 The GuardianやSir Tim Berners-Leeを含む活動家は、長らくRoyal MailにPAFへの無料アクセスを開かせるよう説得しようとしてきたが、これまでのところ、成功を収めました 。 " ただし、WikiLeaksにPostzonが登場してから1年後、英国のマッピングサービスOrdnance Surveyに代わって
OS Code-Point Openという名前で同様のコンテンツデータベースが公開されました。このように、Royal Mailは活動家の要求に応じずに顔を保持し、公式にデータを漏らしましたパブリックステータスを受け取りました。 ただし、完全なPAFはまだ公開されていません。 (この記事の準備中に、PostzonとWikiLeaksはどこかで消えましたが、
Googleはすべてを記憶しています 。)
PAFを受け取ってから1年後、もう一度調べる必要がありましたが、シリアル番号が記載されたリーフレットはディスクとは別に送られ、その年のどこかで紛失しました。 それから私にとって興味深いものになりました。製品のシリアル番号チェックをバイパスして、「情報の解放者」から非常に堅固に激しく保護するのはどれほど難しいでしょうか? 半時間後、データは私のネジの上にあり、開梱プログラム自体は初心者のリバースエンジニアにとって良いデモのように思えました。 IDAは不要です。無料のクイックインストールツールのみです。
厳しいアセンブラーは、
カスペルスキーも恐れていますが 、この例はおもちゃであり、あくびをして、記事の残りの部分をスクロールします。 まあ、
わかりました-
「フクロウを描く方法」のスタイルのチュートリアルは、単純なものを噛んでいるものよりも私を悩ませます。
windbgの下でプログラムを実行することから始めましょう。
ガベージでシリアルのフィールドをたたき、[開始]をクリックします。 シリアルが正しくないことを示すメッセージが表示されます。
ブレーク時にデバッガーをクリックします。
メインスレッド(
~0s
)に切り替えて、コールスタック(
k
)を確認します。
MessageBox
から起動されたメッセージループ内のどこかで実行が停止し、
MessageBox
からの戻りアドレスが0041f086であることがわかります。
MessageBox
呼び出す
前にコード
に何があるかを見てみましょう。たとえば、戻る前に0x40バイト(コマンド
u 041f086-40 l 1f
):
したがって、バイト
[ebp-45h]
ゼロであり、このバイトの値がほんの少し前に書き込まれている場合、
MessageBox
が(戻りアドレス0041f086で)呼び出されます-00402adc関数を呼び出した結果はそこに保存され、明らかにシリアルの値をチェックします
すごい! チェック関数
g 0041f051
呼び出した直後にブレークポイントを設定して、ファイルを再度実行します。
最初の画面で[開始]をクリックするとすぐに、デバッガーはプログラムを停止し、eaxレジスターでシリアルチェックの結果を確認します:ゼロ。
1で「修正」:
r ax=1
、実行を再開:
g
やった! 2番目の画面-Royal Mailライセンス契約が表示されます。
さらに、さらに、さらにクリックし、最後に、プログラムはデータベースのアンパックが成功したことを報告します。
しかし... ...彼女が私たちに開梱したのは何ですか?!
ここにトリックがあります! 入力されたシリアルはどこかで再チェックされているようです。
どこで見つけるの?
dumppe逆アセンブラを
取得してファイルに設定し、リストで文字列「INVALID KEY」を探します
私のお気に入りのヘッドライトでは、これは
edit:<dumppe /disasm SetupRM.exe
コマンド
edit:<dumppe /disasm SetupRM.exe
で行われ、他のファイルマネージャーのファンは出力をファイルにリダイレクトする必要があります。
00481AE6で文字列が見つかり、00401CB2で参照(Xref)されます:
チェックと
jz
は00401CADで確認できます。 スキャンは何千回も呼び出されるため、スキャンする前にレジスタの値を「修正」する意味はありません-各行がアンパックされるためです。 そのため、コード自体を修正する必要があります。
通常の動きでプログラムを3回起動します:
g 0041f051
、“ Begin”、
r ax=1
。
次に、チェックを修正します
eb 401cad eb
を使用して、
jz
(74)オペコードを
jmp short
(eb)に
eb 401cad eb
ます。 レイモンド・チェンには、しばしば便利なx86オペコードの便利
な選択があります。
私たちは引き続き(
g
)を満たし、Royal Mailのすべての要件に喜んで同意します。
これが待望のデータです!
したがって、windbgコマンドの必要最小限:
〜x s | アクティブなスレッドを設定 | スレッドコンテキストxに切り替える |
k | スタックk | 呼び出し履歴を表示 |
u アドレス l 長さ | 組み立てる | コードを表示 |
住所 | ゴー | アドレスに到達するまで実行する |
r レジスタ = 値 | レジ | レジスタ値を変更する |
eb アドレス 値 | e nter b yte | バイト値をアドレスに変更 |
「マウスでプログラムする」のが好きな人には、メニューとツールバーのどこかに似たものがあります。 そして、ご覧のとおり、これらの6つのチームはすでにRoyal Mailプログラムに対処するのに十分です。
リバースエンジニアリングは誰でも利用できます!...スポーツの興味から、2012年からPAFの次のリリースで調査を繰り返しました。 そこで、保護が大幅に強化されたことが判明しました
je/jne
つの
je/jne
チェックの代わりに、7つを修正する必要がありました!