定制自己的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期(具体哪一期我忘了)

支持原创技术分享,据说打赏我的人,都找到了女朋友!