因为一些众所周知,你们懂得的原因,开发一些特殊软件,比如那些能让你在游戏里释放原力和化身斗帝的软件会被检测软件标题和进程名。进程名其实就是exe的文件名,所以为了安全修真就产生了最好能每次启动软件前都随机修改一下exe文件名的需求。但是我们都知道一旦软件启动后是无法修改其文件名的,网上当然也有大神提供了一个方案:

需要重命名的exe做成资源打包进一个exe中,也就是把B.exe作为资源打包放入A.exe,启动A.exe后A会先把B.exe作为资源释放到指定目录先改名后再自动运行B.exe。要实现这个过程就比较繁琐了,因此本人的简配版解决方案就是直接用WINDOWS提供的批处理文件直接修改同目录下的指定EXE文件名后再直接启动,从原理和效果上是相同的,实现起来就容易得多了,这样我们每次都双击.bat文件,批处理文件就会自动修改指定exe文件名,然后再自动启动exe。

这个方案唯一需要解决的就是在我们需要启动的EXE中操作一下批处理文件.bat,修改其中下次启动时的EXE时的文件名,以达到随机文件名的效果。所以在此简配版方案中我们只需要搞清楚读写文件的API就可以了。虽然方法简陋,但是自行车也是车对吧,和春哥搞基那也是搞基呀。

1.首先需要先获取exe所在的目录

用于获取同目录下需要修改的.bat文件路径,具体的API解释可以参考本人博客中的《VS2010获得程序当前运行目录函数详解》博文。

2.下面是.bat文件中的内容

if exist f4wd.exe (goto aaa) else goto bbb
:aaa
ren f4wd.exe,awd4.exe ①
start awd4.exe ②
exit
:bbb
ren sdsd.exe,awd4.exe
start awd4.exe
exit

①把f4wd修改成awd4
②然后运行修改后的exe

3.CStdioFile

然后我们用MFC提供的这个CStdioFile类来操作.bat文件,这个类封装了C语言的WINDOWS系统读写文件API,读取文件和写入文件的原理其实也很简单,就是移动文件指针到指定字节,然后向此字节所在位置写入字节。例如:

移动文件指针

file.Seek(100,CFile::begin);///从文件头开始往下移动100字节
file.Seek(-50,CFile::end);///从文件末尾往上移动50字节
file.Seek(-30,CFile::current);///从当前位置往上移动30字节
file.SeekToBegin();///移到文件头
file.SeekToEnd();///移到文件尾

当然也有取巧的办法,就是我们用CStdioFile::ReadString()方法来读取一行,此方法是以行为单位读取文件内容,以换行符为结尾。读取一次就会移动文件指针到某一行,比如我们想读取第三行的内容,就调用3次此方法,又或者我们想向第三行写入也可以调用此方法3次,这样文件指针就会指向第三行。在本方案中,需要读取第三行的"awd4"4个字符,读取出这4个字符用于替换第一行的"f4wd"4个字符,这样下次启动的时候,.bat文件才能正常修改文件名。

4.CString::Right()和CString::Left()

现在我们已经成功读取到了"ren f4wd.exe,awd4.exe"第三行中的内容,要如何取出"awd4"这四个字符呢?可以使用CString::Right()和CString::Left两个方法,CString::Right()方法可以把一个字符串从右往左取参数中指定数目的字符,从右往左取刚好是8个字符就能把"awd4.exe"给取出来,然后再从左往右取4个字符,也就是使用CString::Left(),就能得到"awd4"这个修改后的文件名了。

5.CStdioFile::Open()

微软貌似并没有提供删除指定行的API,所以单独改写某一段不能实现。反正我是没有搜出相应方法,CSDN上也说只能清空整个文件,然后再重新写上。无论是读或者写我们都需要打开文件,微软提供了若干打开文件的策略,比如独占打开,打开后别的文件就不能再打开了,以及其他属性,这里我们需要用到CFile::modeCreate此属性,此属性为“如果文件不存在则创建,如果文件存在则打开文件并清空文件内容” 这样就能在我们要写入内容之前清空一个文件的所有内容。

下面是具体实现代码,在这里我把需要随机改变的文件名写入了ini配置文件中,可以随时修改随机文件名词组,要是觉得麻烦也可以把要随机的文件名写在程序中。

void Obopact()//随机修改bat文件
{CString cerem,inte,etween,sales,cloth,betweBu;CStdioFile file;string erved;wstring wstr; vector<string> presid; //随机文件名BOOL ret;int resid,veaare=0;wchar_t *path=new wchar_t[256]; GetModuleFileName(NULL,path,256); //获取exe所在路径wstr=path;cerem=wstr.c_str();cerem = cerem.Left(cerem.ReverseFind('\\')+1);//去掉\后面的××.exe//CAccorDlg::hungry(cerem);//输出结果delete [] path; //获取exe自身所在目录为读取.bat做准备//------------------------//读取.bat文件中的内容cerem+=L"haha.bat";ret = file.Open(cerem, CFile::modeRead | CFile::shareDenyNone);if (!ret){//CAccorDlg::hungry(L"文件打开失败");//输出结果veaare=0;}else{//CAccorDlg::hungry(L"文件打开成功");//输出结果 veaare=1;file.SeekToBegin();//把文件指针设置到文件开始for (int clot=0;clot<3;clot++){file.ReadString(etween);//读取一行}//CAccorDlg::hungry(etween);//输出结果inte=etween.Right(8);inte=inte.Left(4);//得到修改后的文件名//CAccorDlg::hungry(inte);//输出结果// 关闭文件file.Close();}//----------------------//--写bat文件if (veaare==1){ret = file.Open(cerem, CFile::modeCreate | CFile::modeNoTruncate | CFile::modeWrite | CFile::shareDenyWrite|CFile::modeCreate);if (!ret){//CAccorDlg::hungry(L"文件打开失败");//输出结果}else{//CAccorDlg::hungry(L"文件打开成功");//输出结果GetPrivateProfileString(L"随机文件名",L"betwe",NULL,betweBu.GetBufferSetLength(MAX_PATH),MAX_PATH,L"C:\\Warehouse\\config.ini");erved=toString(betweBu); //游戏账号转stringSplit(erved,"|",presid); //把账号拆分后放入presid向量resid=More(1,10)-1; //随机数生成函数cloth=toCString(presid[resid]); //string转CString;下一次启动要修改成的文件名file.SeekToBegin();//把文件指针设置到文件开始//  写文件sales=L"if exist "+inte+L".exe (goto aaa) else goto bbb\n"; //inte放的是变化以后的文件名file.WriteString(sales);file.WriteString(L":aaa\n");sales=L"ren "+inte+L".exe,"+cloth+L".exe\n";file.WriteString(sales);sales=L"start "+cloth+L".exe\n";file.WriteString(sales);file.WriteString(L"exit\n");file.WriteString(L":bbb\n");sales=L"ren ccor.exe,"+cloth+L".exe\n";  file.WriteString(sales);sales=L"start "+cloth+L".exe\n";file.WriteString(sales);file.WriteString(L"exit\n");// 关闭文件file.Close();}}}

参考文献:
https://blog.csdn.net/hisinwang/article/details/45725299
https://www.cnblogs.com/JiMuStudio/archive/2011/07/17/2108497.html
https://zhidao.baidu.com/question/329107372.html
https://www.jb51.net/article/41399.htm
https://blog.csdn.net/eager7/article/details/11655977

MFC程序每次启动前修改文件名相关推荐

  1. 基于Dialog的MFC程序在启动时隐藏为托盘程序(四)

    这部分说一下如何加menu..如果做小气球.. mfc的menu确是不如C#活着java那么easy.. 首先在rc里添加menu资源..然后在ui界面里先设置一下你的菜单.. 在第(二)部分已经简单 ...

  2. Python批量修改文件名解决TinyMediaManager 刮削动漫错误的问题

    目的 目的是为了解决在 VCB-Studio.Lolihouse 等压制组下载的 BDrip 动漫无法被 TinyMediaManager 正确地搜索并且刮削的问题.修改文件名后,文件就能被 Tiny ...

  3. 让微信小程序每次请求的时候不改变session_id的方法

    让微信小程序每次请求的时候不改变session_id的方法 每次微信小程序请求的时候都会改变session id, 还好他的请求方法内可以设置header头 所以只需要在启动程序后第一次请求服务器获得 ...

  4. MFC的exe启动时提示应用程序配置不正确,应用程序未能启动错误

    MFC的exe启动时提示应用程序配置不正确,应用程序未能启动错误 老姐笔记本中毒太深于病入膏肓,无奈迫写一程序"曲线救国".刚启动自己写的程序就出现应用程序配置不正确,应用程序未能 ...

  5. 在日常生活中,经常会遇到某些需求对文件名称进行修改,借助刚学过的文件操作,编写一个可以批量修改文件名的小程序。

    在日常生活中,经常会遇到某些需求对文件名称进行修改,借助刚学过的文件操作,编写一个可以批量修改文件名的小程序. import os path=input('请输入文件路径(结尾加上/):') #获取该 ...

  6. linux批量过去5小时前文件名,Linux批量修改文件名

    Linux批量修改文件名 2016.05.12 最近半个月在疯狂地做一些实验,然后需要批量地对一些文件的名字进行修改,而手工操作极其繁琐,在之前的博文中我说到我用了Cygwin软件,今天就告诉大家如何 ...

  7. 重新想象 Windows 8.1 Store Apps (91) - 后台任务的新特性: 下载和上传的新特性, 程序启动前预下载网络资源, 后台任务的其它新特性...

    原文:重新想象 Windows 8.1 Store Apps (91) - 后台任务的新特性: 下载和上传的新特性, 程序启动前预下载网络资源, 后台任务的其它新特性 [源码下载] 重新想象 Wind ...

  8. java 修改源码_再谈给应用程序diy启动画面和java源代码补丁修改

    再谈给应用程序diy启动画面和java源代码补丁修改 2006-8-21 16:18 6365 再谈给应用程序diy启动画面和java源代码补丁修改 2006-8-21 16:18 6365 搞diy ...

  9. 计算机开机硬盘扫描,每次启动系统进入前都要进行磁盘扫描硬盘的解决方法

    每次启动系统进入前都要进行磁盘扫描硬盘的解决方法 假如电脑系统遇到非正常关机的话,下次启动系统进入前一般都会出现磁盘扫描操作,就是蓝色底白色字然后数字由1跳至100的过程,整个过程中会有很多英文提示, ...

最新文章

  1. 【python图像处理】txt文件数据的读取与写入
  2. 求职特训营火热来袭,阿里大咖教你制作专业简历
  3. C#空值和null判断
  4. 用java来实现FIFO先进先出的队列
  5. tableau如何生成HTML文件,Tableau 入门
  6. 互联网金融网络借贷系统架构
  7. 键盘按钮keyCode对照表
  8. 易语言取计算机的ip,易语言怎样取IP物理地址
  9. ISO3834国际焊接认证简介
  10. 将 Debian APT 引入 iPhone
  11. (杭电2188)选拔志愿者
  12. iOS小技能:lldb打印block参数签名( Python script for lldb that prints an Objective-C block signature)
  13. 《量化投资与对冲基金入门》--量化投资--读书笔记(36)
  14. redis的持久化操作2 AOF
  15. IO流之 File 类和字节流
  16. google earth engine(GEE)进行非监督分类
  17. 岩板铺地好吗_岩板可以铺贴地面吗
  18. 深度学习和缠论应用,JQData应用
  19. 仍然不足够--读后感
  20. android4.1动态壁纸,动态壁纸大全APP

热门文章

  1. 多家机构宣布接入文心一言能力
  2. Storm Trident简介
  3. 一个实用的在线文档格式转换器
  4. 使用Jmeter对华为私有云进行性能测试
  5. 送什么礼物给小学生比较有纪念意义?适合送小学生的小礼物
  6. 关于拿鸡蛋数学题的解法
  7. 【数据应用案例学习】(一)—— 基于用户画像的腾讯大数据防刷架构
  8. 动物识别系统代码python_人工智能-动物识别专家系统算法Python + Pyqt 实现
  9. layui之图片上传
  10. 量子力学(4) 全同粒子