首页 电脑 电脑学堂 查看内容

Exe自杀代码

2009-12-9 09:30 840 0

摘要: //http://hi.baidu.com/zxhouse #include <windows.h>       BOOL Delet...
关键词: nbsp stackctx DWORD PTR DeleteFileW WaitForSingleObj argv ExitProcess helper return

//http://hi.baidu.com/zxhouse #include <windows.h>       BOOL DeleteMyself(WCHAR *pHelper)    {        int ret;         WCHAR helper[MAX_PATH];         ZeroMemory(helper, sizeof(helper));        if (pHelper)             wcsncpy(helper, pHelper, MAX_PATH-2);        else            wcscpy(helper, L"calc.exe");                 STARTUPINFOW si = {sizeof(STARTUPINFOW),0};         PROCESS_INFORMATION pi;                 HANDLE hSYNC = OpenProcess(SYNCHRONIZE, TRUE, GetCurrentProcessId());                if (CreateProcessW(NULL, helper, 0, 0, TRUE, CREATE_SUSPENDED, 0, 0, &si, &pi))         {             CONTEXT ctx = {CONTEXT_FULL,0};             ret = GetThreadContext(pi.hThread, &ctx);                         WCHAR MyselfPath[MAX_PATH];            int nPathLen = GetModuleFileNameW(NULL, MyselfPath, MAX_PATH);                         struct StackContext             {                 DWORD_PTR DeleteFileW;                 DWORD_PTR WaitForSingleObject_argv1;                 DWORD_PTR WaitForSingleObject_argv2;                 DWORD_PTR ExitProcess;                 DWORD_PTR DeleteFileW_argv1;                 DWORD_PTR shit;                 DWORD_PTR ExitProcess_argv1;             }stackctx;                         HMODULE hKernel32 = GetModuleHandleW(L"Kernel32.dll");                         ctx.Eip = (DWORD_PTR)GetProcAddress(hKernel32, "WaitForSingleObject");             ctx.Esp = (DWORD_PTR)VirtualAllocEx(pi.hProcess, 0, 512*1024, MEM_COMMIT, PAGE_EXECUTE_READWRITE);             ctx.Esp += 256*1024;             stackctx.DeleteFileW = (DWORD_PTR)GetProcAddress(hKernel32, "DeleteFileW");             stackctx.WaitForSingleObject_argv1 = (DWORD_PTR)hSYNC;             stackctx.WaitForSingleObject_argv2 = (DWORD_PTR)-1;             stackctx.ExitProcess = (DWORD_PTR)GetProcAddress(hKernel32, "ExitProcess");             stackctx.DeleteFileW_argv1 = (DWORD_PTR)VirtualAllocEx(pi.hProcess, 0, (nPathLen+1)*sizeof(WCHAR), MEM_COMMIT, PAGE_EXECUTE_READWRITE);             ret = WriteProcessMemory(pi.hProcess, (LPVOID)stackctx.DeleteFileW_argv1, MyselfPath, (nPathLen+1)*sizeof(WCHAR), NULL);            if (!ret) return FALSE;                         stackctx.shit = 0;             stackctx.ExitProcess_argv1 = 0;                         ret = WriteProcessMemory(pi.hProcess, (LPVOID)(ctx.Esp), &stackctx, sizeof(stackctx), NULL);            if (!ret) return FALSE;                         ret = SetThreadContext(pi.hThread, &ctx);            if (!ret) return FALSE;                         ResumeThread(pi.hThread);             CloseHandle(pi.hThread);             CloseHandle(pi.hProcess);            return TRUE;         }else        {            return FALSE;         }    }          int main()    {         DeleteMyself(0);        return 0;    }       //2000/xp/2003/vista 上已经测试通过
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部