リバースエンジニアリングしようとしているこのプログラムがあります。それがコンパイラのオプティマイザなのか難読化なのかはわかりませんが、他の関数を呼び出すコードの一部は、数学によって計算され、次のように呼び出されます。
CALL EAX
別のプログラムにDLLとしてロードされるまでは正しく動作します。ベースアドレスオフセットが変更されたため、すべての相対コードが正しく機能するようになりましたが、数学で計算されたすべての呼び出し/jmpが適切な領域に移動しません。
したがって、すべての絶対呼び出しを相対呼び出しにすることで、これを簡単に修正できると考えました。
コードをステップ実行し、すべての計算を計算させている間、正しいjmp/callオフセットを取得します。
パッチを割り当てるのに十分なスペースがないなどの問題はありません。絶対呼び出しは通常、前に私が物事を修正するためにも使用できる回線を使用しているので
絶対的な呼び出し、これは数学が終わるところです:
seg000:0044F7D1 add eax, 3B882683h
seg000:0044F7D6 call eax
のように変換されます
seg000:0044F7D1 call 3B882683h
もちろん、eaxはすでに何かだったので、上記は機能しませんが、これは単なる擬似コードの例です。
私の質問はこれを行う方法ではありませんが、OllyDbgまたはIDA Proでこれを自動的に行うプラグインはありますか?