どうにかバイナリから「アセンブラ命令実行数」を取得したい。次のコードを検討してください。
if(password[0] == 'p') {
if(password[1] == 'a') {
......
printf("Correct Password\n");
}
}
次に、たとえば「abc」でプログラムを開始すると、最初の分岐が発生しないため、実行される命令が少なくなります。「pbc」を入力すると、最初の分岐が必要になるため、もう少し (約 4 ~ 5) 命令が実行されます。(これは CTF (Capture The Flag) ファイルの調査です)。したがって、私の考えは、バイナリを逆にしてアルゴリズムを理解しようとするのではなく、より高速なアプローチを使用して、さまざまな設定 (さまざまな文字やパスワードの長さなど) に対して実行されたアセンブラー命令の数を数え、別の分岐を実行できるかどうかを確認することです。別の入力を使用するため、より多くのアセンブラー命令が作成されます)。
私の基本的なアイデアは、現在の命令の後に int3 を配置するだけの簡単なデバッガーを作成し、そこにカウンターをインクリメントし、次の命令を逆アセンブラーし、この命令の直後に int3 を配置することです (私の考えの強力な単純化されたバージョン)。
すでにそのようなことを行っているプログラム/ライブラリ/...はありますか? (プログラムがシグナルを処理するときにいくつかの問題があるため、...)
(私はすでに時間を測定するために高精度のタイマーを使用しようとしましたが、違いはわずか4〜5命令であるため、完全に失敗しました)