はい、それは間違いなく可能です(DLLが暗号で署名されていない限り)が、それは困難です。DLLのサイズによっては、多くのセクションを更新する必要がある場合がありますが、単純な16進エディターでそれを行うことができます。生のバイナリを読み取ろうとせず、逆アセンブラを介して実行します。
コンパイルされたバイナリの中には、たくさんの秘教的なバイトがあります。通常、「call」、「jmp」などの命令としてアセンブリで記述されるすべてのオペコードは、マシンアーキテクチャに依存する同等のバイトに変換されます。逆アセンブラを使用する場合、逆アセンブラはこれらのバイナリ値をアセンブリ命令に置き換えて、何が起こっているのかをはるかに理解しやすくします。
コンパイルされたバイナリの中には、ハードコードされた場所への参照もたくさんあります。たとえば、「call add()」が表示される代わりに、「call0xFFFFF」になります。ここでの値は通常、ファイル内の特定のオフセットにある命令への参照です。通常、これは呼び出される関数に属する最初の命令です。それ以外の場合は、スタックセットアップ/クリーンアップコードです。これはコンパイラによって異なります。
置き換える命令が元の命令とまったく同じサイズである限り、オフセットは正しいままであり、ファイルの残りの部分を更新する必要はありません。ただし、置き換える命令のサイズを変更する場合は、場所へのすべての参照を手動で更新する必要があります(これは本当に面倒です)。
ヒント:追加する命令が置き換えたものよりも小さい場合は、残りの部分にNOPを埋め込んで、場所が外れないようにすることができます。
それがお役に立てば幸いです、そして幸せなハッキング:-)