私はリバースエンジニアリングが初めてで、簡単なプログラムを見てきました:
char* a = "hello world";
printf(a);
ただし、これを ollydbg で開くと、gdb の場合とは異なり、アセンブリに直接移動しません。最初にさらに多くの命令があります。どうしてこうなったんだろうと思いました。
ありがとう!
私はリバースエンジニアリングが初めてで、簡単なプログラムを見てきました:
char* a = "hello world";
printf(a);
ただし、これを ollydbg で開くと、gdb の場合とは異なり、アセンブリに直接移動しません。最初にさらに多くの命令があります。どうしてこうなったんだろうと思いました。
ありがとう!
olly を使用してプログラムに接続する方法に応じて、次の 2 つの場所のいずれかに移動します (エラーが発生しなかった場合)。
main
/ WinMain
/のシステム グルーおよび CRT ラッパーDllMain
): これは、olly でプログラムを開始したときに発生します。NtUserBreakPoint
: これは、既存のプロセスにアタッチする場合です。モジュールウィンドウを表示するために使用できる場所に移動するには、そこから目的ctrl + e
のモジュールを選択します。次に、 を使用crtl + n
して、現在のモジュールのシンボル ウィンドウを表示します (注: エクスポートされていないシンボルを使用できるようにするには、pdb を使用できるようにするか、そのビルドの obj のオブジェクト スキャンを実行する必要があります)。
呼び出しチェーンを掘り下げることもできますModuleEntryPoint
(通常、2番目の呼び出し/ jmpが必要です)。これにより、crtエントリポイントに移動します。そこから、3/5/4引数を持つ呼び出しを探すだけです。main
/ WinMain
/ DllMain
: _
ここから:
Blackene.<ModuleEntryPoint> 004029C3 E8 FC030000 CALL Blackene.__security_init_cookie
004029C8 ^ E9 D7FCFFFF JMP Blackene.__tmainCRTStartup
ここに行きます:
Blackene.__tmainCRTStartup 004026A4 6A 58 PUSH 58
004026A6 68 48474000 PUSH Blackene.00404748
004026AB E8 1C060000 CALL Blackene.__SEH_prolog4
004026B0 33DB XOR EBX,EBX
ここで下にスクロールします。
004027D3 6A 0A PUSH 0A
004027D5 58 POP EAX
004027D6 50 PUSH EAX
004027D7 56 PUSH ESI
004027D8 6A 00 PUSH 0
004027DA 68 00004000 PUSH Blackene.00400000
004027DF E8 2CF2FFFF CALL Blackene.WinMain
ollydbg 1.10 が使用されていると想定しています。