请问一个运行中的EXE程序通过什么途径可以修改自己磁盘上EXE文件的内容?
谢谢! 问题点数:100、回复次数:8Top
1 楼zhanwt(zhanwt)回复于 2005-08-03 20:16:37 得分 0
1用记事本打开,然后乱改:)
2反汇编Top
2 楼hateMonday(天行)回复于 2005-08-03 20:28:48 得分 0
通常任何试途修改或删除正在运行的程序文件都会被提示"拒绝访问"怎么办?Top
3 楼masterz(www.fruitfruit.com)回复于 2005-08-03 20:36:11 得分 100
可以这么做:先给自己(A.exe)做一个copy(B.exe),修改B.exe
然后CreateProcess调用B.exe,通过参数告诉她用B.exe覆盖A.exe就完成了修改。
B.exe可以用网络上的方法自己删除自己
BOOL SelfDelete()
{
SHELLEXECUTEINFO sei;
TCHAR szModule [MAX_PATH],
szComspec[MAX_PATH],
szParams [MAX_PATH]; // get file path names:
if((GetModuleFileName(0,szModule,MAX_PATH)!=0) &&
(GetShortPathName(szModule,szModule,MAX_PATH)!=0) &&
(GetEnvironmentVariable(_T("COMSPEC"),szComspec,MAX_PATH)!=0))
{
// set command shell parameters
lstrcpy(szParams,_T("/c del "));
lstrcat(szParams, szModule);
lstrcat(szParams, _T(" > nul")); // set struct members
sei.cbSize = sizeof(sei);
sei.hwnd = 0;
sei.lpVerb = _T("Open");
sei.lpFile = szComspec;
sei.lpParameters = szParams;
sei.lpDirectory = 0;
sei.nShow = SW_HIDE;
sei.fMask = SEE_MASK_NOCLOSEPROCESS; // increase resource allocation to program
SetPriorityClass(GetCurrentProcess(),
REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread(),
THREAD_PRIORITY_TIME_CRITICAL);
// invoke command shell
if(ShellExecuteEx(&sei))
{
// suppress command shell process until program exits
SetPriorityClass(sei.hProcess,IDLE_PRIORITY_CLASS);
SetProcessPriorityBoost(sei.hProcess,TRUE);
// notify explorer shell of deletion
SHChangeNotify(SHCNE_DELETE,SHCNF_PATH,szModule,0);
return TRUE;
}
else // if error, normalize allocation
{
SetPriorityClass(GetCurrentProcess(),
NORMAL_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread(),
THREAD_PRIORITY_NORMAL);
}
}
return FALSE;
}Top
4 楼hateMonday(天行)回复于 2005-08-03 20:42:16 得分 0
可是如果A.exe很大,copy一个效率不是很差?Top
5 楼masterz(www.fruitfruit.com)回复于 2005-08-03 20:58:38 得分 0
这种方法是可行的,直接修改运行中的文件比较困难,而且不兼容
你也可以在资源中包含一个比较小的程序,需要的时候把它释放出来实现对主程序文件的修改,当然主程序要退出后才能改Top
6 楼hateMonday(天行)回复于 2005-08-03 22:05:09 得分 0
thanksTop
7 楼dirdirdir3(风)回复于 2005-08-03 22:12:38 得分 0
删除也可以用同样的办法啊,由A来删除B.Top
8 楼lbird(heng)回复于 2005-08-04 14:04:55 得分 0
markTop




