社区
非技术类
帖子详情
各位老大,有个简单却又有趣的问题
uk
2002-03-11 08:47:43
请问如何让一个exe文件只能运行一次后,就再也不能运行?
...全文
55
7
打赏
收藏
各位老大,有个简单却又有趣的问题
请问如何让一个exe文件只能运行一次后,就再也不能运行?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
uk
2002-03-11
打赏
举报
回复
我想将原有EXE程序内容改掉,让他不能再运行!
gdjonak
2002-03-11
打赏
举报
回复
用系统的原子表。。
ghost_shl
2002-03-11
打赏
举报
回复
向注册表里写东东
temujen
2002-03-11
打赏
举报
回复
呵呵,你小子究竟想干什么?想让人不说话,最好的办法就是让他永远说不了话,这个是电视剧里太滥的情节了.
vcfor
2002-03-11
打赏
举报
回复
有没有用,你试过没有?
whz_time
2002-03-11
打赏
举报
回复
你可以在程序退出的时候将程序删除,我这有点资料:
进程退出前删除自身EXE
下面的代码由Gary Nebbett写就.Gary Nebbett乃是WINDOWS NT/2000 NATIVE API REFERENCE的作者.乃NT系统一等一的高手.下面就分析一些他的这段代码.
这段代码在PROCESS没有结束前就将启动PROCESS的EXE文件删除了.
int main(int argc, char *argv[])
{
HMODULE module = GetModuleHandle(0);
CHAR buf[MAX_PATH];
GetModuleFileName(module, buf, sizeof buf);
CloseHandle(HANDLE(4));
__asm {
lea eax, buf
push 0
push 0
push eax
push ExitProcess
push module
push DeleteFile
push UnmapViewOfFile
ret
}
return 0;
}
现在,我们先看一下堆栈中的东西
偏移 内容
24 0
20 0
16 offset buf
12 address of ExitProcess
8 module
4 address of DeleteFile
0 address of UnmapViewOfFile
调用RET返回到了UnmapViewOfFile,也就是栈里的偏移0所指的地方.当进入UnmapViewOfFile的流程时,栈里见到的是返回地址DeleteFile和HMODUL module.也就是说调用完毕后返回到了DeleteFile的入口地址.当返回到DeleteFile时,看到了ExitProcess的地址,也就是返回地址.和参数EAX,而EAX则是buffer.buffer存的是EXE的文件名.由GetModuleFileName(module, buf, sizeof buf)返回得到.执行了DeleteFile后,就返回到了ExitProcess的函数入口.并且参数为0而返回地址也是0.0是个非法地址.如果返回到地址0则会出错.而调用ExitProcess则应该不会返回.
这段代码的精妙之处在于:
1.如果有文件的HANDLE打开,文件删除就会失败,所以,CloseHandle(HANDLE(4));是十分巧妙的一手.HANDLE4是OS的硬编码,对应于EXE的IMAGE.在缺省情况下,OS假定没有任何调用会关闭IMAGE SECTION的HANDLE,而现在,该HANDLE被关闭了.删除文件就解除了文件对应的一个句柄.
2.由于UnmapViewOfFile解除了另外一个对应IMAGE的HANDLE,而且解除了IMAGE在内存的映射.所以,后面的任何代码都不可以引用IMAGE映射地址内的任何代码.否则就OS会报错.而现在的代码在UnmapViewOfFile后则刚好没有引用到任何IMAGE内的代码.
3.在ExitProcess之前,EXE文件就被删除了.也就是说,进程尚在,而主线程所在的EXE文件已经没了.(WINNT/9X都保护这些被映射到内存的WIN32 IMAGE不被删除.)
Gary Nebbett果然是WIN系列平台的顶尖高手之一.能写出如此代码.独辟蹊径啊:)
uk
2002-03-11
打赏
举报
回复
还有什么高见?
OllyDBG最终完美版
<br> 在这里我要感谢看雪论坛上的看雪
老大
和论坛上各位兄弟的支持,正是有了他们的测试和建议,经过多次修正后,才有了今天的这个最终版本,由衷的感谢看雪论坛上的各位兄弟! <br>汉化第二版主要更新: 1...
如何与你的
老大
沟通?
但现实毕竟是“
老大
”就是
老大
,你的前途、薪水都掌握在
老大
手里,抱怨和郁闷都不能解决
问题
,反而...下面是我根据自己的经验总结的几条,希望对各位遇到类似
问题
的兄弟姐妹能有帮助。 1)用别人听得懂的语言 这个...
如何与你的
老大
沟通
本来是想找找如何加入一个开源项目,在CSDN上却找到了这篇文章,很有感触,对于一个新手挺有帮助如何与你的
老大
沟通 看了CSDN冯大侠的《
老大
,我想说两句》,深有感触,因为我也曾经遇到过类似的情况,深知这种情况...
如何与你的
老大
沟通?(转)
但现实毕竟是“
老大
”就是
老大
,你的前途、薪水都掌握在
老大
手里,抱怨和郁闷都不能解决
问题
,反而会使
问题
更加恶化;而且既然是
老大
,那么必然有过人之处(不管是技术、还是有关系、还是会说话,那都是
老大
的优势)...
转发 如何与你的
老大
沟通?
但现实毕竟是“
老大
”就是
老大
,你的前途、薪水都掌握在
老大
手里,抱怨和郁闷都不能解决
问题
,反而会使
问题
更加恶化;而且既然是
老大
,那么必然有过人之处(不管是技术、还是有关系、还是会说话,那都是
老大
的优势)...
非技术类
1,658
社区成员
58,950
社区内容
发帖
与我相关
我的任务
非技术类
VC/MFC 非技术类
复制链接
扫一扫
分享
社区描述
VC/MFC 非技术类
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章