16,372
社区成员




#include<windows.h>
int main(int argc,char** argv)
{
if(1==argc) // 正常运行时
{
char fileold[MAX_PATH],filenew[MAX_PATH];
HANDLE hFile,hProcess;
char szCmdLine[600];
GetModuleFileNameA(NULL,fileold,_countof(fileold)); // 获取进程路径
GetTempPathA(MAX_PATH,filenew); // 获取临时文件夹
GetTempFileNameA(filenew,"CHG",0,filenew);
CopyFileA(fileold,filenew,FALSE); // 复制自身生成一个的临时程序
hFile=CreateFileA(filenew,0,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_FLAG_DELETE_ON_CLOSE,NULL); // 这里是为了加上FILE_FLAG_DELETE_ON_CLOSE标志,表示此临时程序结束后自动删除
hProcess=OpenProcess(SYNCHRONIZE,TRUE,GetCurrentProcessId()); // 获取进程句柄
sprintf(szCmdLine,"\"%s\" %llu \"%s\"",filenew,(unsigned long long)hProcess,fileold); // 生成调用命令
STARTUPINFOA si={sizeof(STARTUPINFO)};
PROCESS_INFORMATION pi;
CreateProcessA(NULL, szCmdLine, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi); // 以临时程序创建新的进程
CloseHandle(hProcess);
CloseHandle(hFile);
}
else if(3==argc) // 调用的临时文件
{
HANDLE hProcess;
unsigned long long ullProcess;
char str[600];
sscanf(argv[1],"%llu",&ullProcess); // 获取临时程序的句柄
hProcess=ullProcess;
WaitForSingleObject(hProcess,INFINITE); // 等待原进程结束
CloseHandle(hProcess);
sprintf(str,"type \"%s\">>\"%s\"",argv[2],argv[2]); // 使原exe文件大小翻倍
system(str);
}
return 0;
}
#pragma data_seg(".data")
char data[100000000] = {0};
#pragma data_seg()
for /L %i in (1,1,循环次数) do type 程序名.exe>>程序名.exe
循环次数填一个正整数,最后大小为 程序名.exe的大小^(循环次数+1)
或者
fsutil file createnew tmp 文件大小
copy /b 程序名.exe+tmp 程序名.exe
del tmp
最后大小为 程序名.exe的大小+文件大小