自己消去コードを作成したい - 他人を消去する機能。私はそれをやろうとしました-しかし、時々(ほとんどの場合)私はそれを実行します-動作するはずなので動作しません。私はこのようなことをしたい:
int func(int a)
{
return a+1;
}
int main()
{
func(5);
erase(func);
...
//execute other things
...
}
私はすでにこれを行う関数を作成しましたが、ちょっとバグがあります - ret オペコードが見つかるまですべてを停止します。func の開始アドレスが (DWORD)func であることはわかっていますが、関数の終了アドレスを見つけるにはどうすればよいですか? 次のような例をWebで見ました:
void func()
_asm __volatile__ beg
{
...
...
...
_asm __volatile__ end
}
しかし、これは私にとってはうまくいきません - 私はVS 2013を使用しています。これが私のコードです:
void destruct(BYTE *pAddress, DWORD dwLen)
{
DWORD dwOldProtect, dwBkup;
VirtualProtect(pAddress, dwLen, PAGE_EXECUTE_READWRITE, &dwOldProtect);
for(DWORD x = 0x0; x < dwLen; x++)
*(pAddress + x) = 0x90;
VirtualProtect(pAddress, dwLen, dwOldProtect, &dwBkup);
}
dwLen として、begin から次の ret ステートメントまで、他の関数で計算された長さを渡します。削除機能として、NOPまたはジャンクで本体を埋めることを意味します-プログラムの起動時に1回だけ使用される機能を「消去」したいのですが、後で必要ありません。誰かにダンプさせたくないだけです私のアプリとそれを逆にするなど