
この記事では、ライトタスクの例を使用してCutterでELFファイルを逆コンパイルする方法を理解します。リバース
パーツの過去の紹介:パート1:C、C ++およびDotNet逆コンパイル-リバースの基本
パート2:MIPSリバースおよびGolang-リバースの基本
組織情報
特に、情報やコンピューターのセキュリティのいずれかの分野で何か新しいことを学び、発展させたい人のために、私は次のカテゴリーについて書き、話します。
, , , .
, , Telegram . , , .
. , - , .
- PWN;
- 暗号化(Crypto);
- ネットワークテクノロジー(ネットワーク);
- (Reverse Engineering);
- (Stegano);
- WEB-.
, , , .
, , Telegram . , , .
. , - , .
偽の指示
これはこのカテゴリーで8番目の課題であり、偽の指示があると言われています。まず、ファイル情報を見てみましょう。
プログラムをCutterで開きます。これは、エミュレートし、最近ではデバッグする機能を備えた組み込みのghidraデコンパイラーを備えたradare2のGUIです。そしてすぐに、興味深い関数のリストが得られます。
main関数に移動して、逆コンパイルしてみましょう。
最初に、カナリアが初期化され、引数の数がチェックされます。その後、0x1fバイトが割り当てられ、指定された定数文字列がコピーされ、アドレスがiVar3変数に格納されてから、この文字列の個々のバイトが変更されます。次に、文字列s1を使用して変換が行われます。 WPA関数も初期化され、入力したパスワードがauStack50アドレスに書き込まれ、変換されたiVar3文字列とともにWPA関数に渡されます。その後、カナリア値がチェックされ、プログラムが終了します。
WPA機能に移りましょう。
プログラムに以前に挿入された行が再度変更された後、2つの行が比較されます。それらが等しい場合は、blowfish()関数が呼び出され、変更用の正しいパスワードが表示されます。それ以外の場合は、RS4()関数が呼び出されます。
以前に入力した値の復号化が発生するため、プログラムをデバッグして、比較の結果を変更できます。文字列が比較される場所に移動して、ブレークポイントを設定しましょう。
それでは、デバッグを開始しましょう-F9、そしてプログラム引数を入力します。
ブレークポイントに到達するまで、ナビゲーションバーのボタンをクリックします。 strcmp()関数を使用して文字列を比較した結果がEAXレジスタに書き込まれ、EAXレジスタがチェックされます。文字列が等しくないため、このレジスタには値1が含まれています。
プログラムの動作のブランチを変更して実行を継続するには、0に変更してみましょう。カッターコンソールで完了すると、正解が表示されます。これはサイトで送信する必要があります。
Ptrace
プログラムをダウンロードして確認してください。
特別なことは何もありません、あなたはパスワードを見つける必要があります。ただし、手動で編集する必要のあるデバッグ(ptrace)および遷移に対する保護は少しあります。これは、IDAProでのグラフの表示方法です。
このタスクもカッターで実行し、すべての遷移を自動的に修正します。
main関数の逆コンパイルに移りましょう。
そして、正しいパスワードは、最初に指定された文字列からの対応する4文字です。
ARM ELF
これはARMアーキテクチャのバイナリです。これをCutterに投入し、メイン関数を選択します。関数グラフから、私たちが何を扱っているかがわかります。おそらくこれは、シンボルごとの比較です。
デコンパイラーを開き、プログラムを分析します。
まず、プログラム引数の存在とその長さがチェックされ、6に等しくなければなりません。
したがって、var_14h変数はインデックスとして機能し、値0を取ります。次に、いくつかの比較が行われ、条件と見なされ
ます。str[0] == str [5]
str [0] + 1 == str [1]
str [3] + 1 == str [0]
str [2] + 4 == str [5]
str [4] + 2 == str [2]
0 == str [3] ^ 0x72
アルゴリズムを実装して、パスワードを取得しましょう。
そして、必要なパスワードを取得します。それは今のところすべてです。
あなたはで私たちに参加することができますテレグラム。そこには、興味深い資料、リークされたコース、およびソフトウェアがあります。ITの多くの分野に精通している人々がいるコミュニティを集めましょう。そうすれば、ITと情報のセキュリティの問題についていつでも互いに助け合うことができます。