0

C++ インジェクションの問題がいくつかあります。Win 7 x64、VS 2010 を使用しています

実行しようとしている完全なコードは次のとおりです。 http://pastebin.com/avKS3r22

私の質問:

  1. 62行目。

    dwSize = (DWORD)iCodeEnd - (DWORD)iCode; //subtract the function from the limiter to obtain the function's size
    

    iCodeEnd が 0x01151570 で iCode が 0x01151490 の場合、dwSize が 224 または 0xE0 であるはずなのに、なぜ 4294966986 (DWORD の最大値だと思います) になるのですか? プロジェクトに設定する必要がある特定のプロパティはありますか (Unicode を使用せずに空の win32 プロジェクトを作成しました)。

  2. 92行目。

    if(!(hRemoteThread = CreateRemoteThread(hProcess, NULL, 0, HREAD_START_ROUTINE)lpAddr, prmAddr, 0, NULL)))
    

手動で dwSize を 224 に設定すると、「リモート スレッドを作成できませんでした!」というメッセージが表示されます。dwSize の値について間違っていますか? それとも別のものですか?

注意: これは私の最初の C++ アプリケーションです (詳細な回答を提供してください)。コードは私のものではありません。基本を学ぶために書き直しただけです。元のバージョンは私のプラットフォームで正常に動作しています。

4

1 に答える 1

0
  1. iCodeEnd と iCode の両方を静的にすると、コンパイラは関数を次々とメモリに配置します。これにより、dwSize が適切に修正されます。
  2. win7 では、メモ帳などの \windows\system32 フォルダーからプロセスに挿入すると、「アクセスが拒否されました」というエラーが表示されて失敗します (UAC が無効になっている場合でも)。
于 2012-10-08T12:07:54.043 に答える