定制自己的EXE文件

要是为了实现像木马那样的生成自己需要配置的EXE文件。首先要自己写一个EXE,然后以资源的方式导入到工程中。

下边的例子是一个修改MessageBox标题和文字的程序.

    HRSRC hResInfo;
    HGLOBAL hResData;
    DWORD dwSize, dwWritten;
    LPBYTE pBuffer;
    HANDLE hFile;
    TCHAR szMsgBoxTitle[100],szMsgBoxText[100];
    szMsgBoxTitle[0] ='/0';
    szMsgBoxText[0] = '/0';

    得到新数据,比如新的邮箱地址和密码
    GetDlgItemText(IDC_EDIT_TITLE,szMsgBoxTitle,100);
    GetDlgItemText(IDC_EDIT_TEXT,szMsgBoxText,100);

    // 查找所需的资源
    hResInfo = FindResource(NULL, MAKEINTRESOURCE(IDR_DUMMY_EXE), "Dummy_Exe");
    if (hResInfo == NULL)
    {
        ::MessageBox(NULL, "查找资源失败!", "错误", MB_OK | MB_ICONINFORMATION);
        return;
    }

    // 获得资源尺寸
    dwSize = SizeofResource(NULL, hResInfo);
    // 装载资源
    hResData = LoadResource(NULL, hResInfo);
    if (hResData == NULL)
    {
        ::MessageBox(NULL, "装载资源失败!", "错误", MB_OK | MB_ICONINFORMATION);
        return;
    }

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

    // 复制资源数据
    CopyMemory((LPVOID)pBuffer, (LPCVOID)LockResource(hResData), dwSize);
    // 获取标题和文本,并复制数据,具体偏移地址见你的那个EXE资源
    CopyMemory((LPVOID)(pBuffer + 0x400), (LPCVOID)szMsgBoxTitle, 100);
    CopyMemory((LPVOID)(pBuffer + 0x464), (LPCVOID)szMsgBoxText, 100);

    // 创建文件,写数据
    hFile = CreateFile("C://EnochShen.Exe", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL);
    if (hFile != NULL)
    {
        WriteFile(hFile, (LPCVOID)pBuffer, dwSize, &dwWritten, NULL);
    }
    else
    {
        ::MessageBox(NULL, "创建文件失败!", "错误", MB_OK | MB_ICONINFORMATION);
        GlobalFree((HGLOBAL)pBuffer);
        return;
    }

    // 收尾工作,释放资源
    CloseHandle(hFile);
    GlobalFree((HGLOBAL)pBuffer);

    ::MessageBox(NULL, "创建文件C://cooldog.Exe!", "成功" ,MB_OK | MB_ICONINFORMATION);
    
    ShellExecute(m_hWnd, "open", "C://", NULL, NULL, SW_SHOWNORMAL);


下面是那个作为资源的EXE的源代码(MASM32写的):

   ; -----------------------------------------------------------------
   ; 生成的exe只有1k,小巧玲珑,^O^
   ; -----------------------------------------------------------------

; #########################################################################

      .386
      .model flat, stdcall
      option casemap :none   ; case sensitive

; #########################################################################

      include c:/masm32/include/windows.inc
      include c:/masm32/include/user32.inc
      include c:/masm32/include/kernel32.inc

      includelib c:/masm32/lib/user32.lib
      includelib c:/masm32/lib/kernel32.lib

; #########################################################################

    .data
    szMsgBoxTitle    db 100 dup('E')
    szMsgBoxText     db 100 dup('S')

    .code
start:
    ; -----------------------------------------------------------------
    ; 下面的代码生成的Exe只有1k,但是打包会出错
    ;
    ; szMsgBoxTitle    db 100 dup('E')
    ; szMsgBoxText     db 100 dup('S')
    ;
    ; -----------------------------------------------------------------

    invoke MessageBox,NULL,ADDR szMsgBoxText,ADDR szMsgBoxTitle,MB_OK or MB_ICONINFORMATION
    invoke ExitProcess,NULL
end start

参考自CSDN开发高手第N期(具体哪一期我忘了)

你可能感兴趣的:(定制自己的EXE文件)