3

我想创建自擦除代码 - 擦除他人的功能。我试图这样做 - 但有时(大多数时候)我会运行它 - 它无法正常工作,因为它应该工作。我想做这样的事情:

int func(int a)
{

return a+1;

}

int main()
{
func(5);
erase(func);
...
//execute other things
...
}

我已经创建了函数来执行此操作,但它有点错误 - 它在找到 ret 操作码之前一直在处理所有内容,我知道 func 开始地址是 (DWORD)func,但是我如何找到函数地址的结尾?我在网上看到过类似的例子:

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 我传递在其他函数中计算的长度 - 从开始到下一个 ret 语句。作为删除功能,我的意思是用 NOP 或垃圾填充它的主体 - 我想“擦除”功能,它只会在程序启动时使用一次,我以后不需要它,我只是不想让任何人转储我的应用程序并反转它等。

4

0 回答 0