0

簡単な質問です。私は C++ や Windows API にはあまり詳しくありませんが、挿入する dll を作成することができました。基本的に、置き換えたい行の既知のメモリ オフセットがあります。

IDA から: .text:0051CA30 プッシュ 16D8h

REC 逆コンパイルから: _push(5848);

5848 または 16D8h は、ファイルから読み取った値にすぎません。私がしたいのは、オフセットをフックして自分のテキストを印刷することだけです。これは非常に単純なはずですが、私の人生では理解できず、何をしようとしてもプログラムがクラッシュし続けます。ファイル内のテキストを置き換えることは、悲しいことにオプションではありません。簡単に置き換えることができ、チートに使用される可能性があるからです。

役立つ場合に備えて、言及したばかりのすべての関数置換に迂回を使用します。

4

1 に答える 1

0

ターゲット プロセスで文字列を置換する場合は、挿入された DLL で次のスニペットを使用できます。

char* buffer = reinterpret_cast<char*>(base + 0x16D8);
size_t length = strlen(buffer) + 1;

char myStr[length] = "...";

DWORD oldProtect;
VirtualProtect(buffer, length, PAGE_EXECUTE_READWRITE, &oldProtect);
memcpy(buffer, myStr, length);
VirtualProtect(buffer, length, oldProtect, nullptr);

注:新しい文字列の長さは、元の長さ以下にする必要があります。

于 2015-10-24T09:23:40.280 に答える