郵便番号-無料! (写真の反転)

数年前、 私は英国王室郵便(Royal Mail)のPAF(郵便番号アドレスファイル)データベースを使用して、ユーザーが入力したメールアドレスを標準形式にすることについて書きました。 PAFはRoyal Mailの主要な知的財産であるため、入手は簡単ではありません。データベースの完全性と更新の頻度に応じて、年間購読料は£400からです。 メールで購読してから1、2週間後、CD-ROMの付いた赤い箱が入ってきます。


ディスク上-「シリアル番号」を要求し、データベース(CSVファイルのセット)をディスクに展開するEXEファイル。 シリアル番号は個別に送信されるため、小包を傍受した攻撃者はデータベースを使用できません。 (シリアル番号が記載されたテキストファイルが作成されます!)各クライアントには独自の番号があり、「リーク」が発生した場合に誰が苦情を申し立てるべきかが明確になっています。 ただし、シリアル番号はデータ自体の「漏れ」を整理することを妨げず、2009年にWikiLeaks はPostzonデータベース (PAFのコンポーネントの1つ)を導入しました 。 彼女へのコメントでは、「 この基地は納税者を犠牲にして編集され、 The GuardianSir 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つを修正する必要がありました!

Source: https://habr.com/ru/post/J173651/


All Articles