社区
非技术类
帖子详情
各位老大,有个简单却又有趣的问题
uk
2002-03-11 08:47:43
请问如何让一个exe文件只能运行一次后,就再也不能运行?
...全文
100
7
打赏
收藏
各位老大,有个简单却又有趣的问题
请问如何让一个exe文件只能运行一次后,就再也不能运行?
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用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
打赏
举报
回复
还有什么高见?
有趣
的海盗分金
问题
(博弈论)
海盗分金
问题
关于海盗分金
问题
是经济学上的一个经典模型:是说5个海盗抢得100金币,他们按照抽签的顺序依次提方案:首先由1号提出分配方案,然后5人表决,投票要超过半数同意方案才能被通过,否则他将被扔入大海喂鲨鱼。该题同时也是一道著名的博弈题目,涉及到了博弈论的知识。那么什么是博弈论呢? 什么是博弈论 博弈论(Game Theory),是研究决策主体的行为发生直接相互作用时候的决策以及这种决策的均衡...
程序员跳槽面试看见公司
老大
也来面试,网友:
老大
比你更尴尬
程序员跳槽已经成了重要的一个话题,只有极少的一部分的程序员才会在一家公司呆上10年以上,更多的程序员把腾讯、阿里这样的互联网大型公司当成职业生涯的目标 所以发生了下面的场景,一个程序员去阿里面试,既然在休息室遇到
老大
,他也来面试。好尴尬。~确认过眼神,你是我遇见尴尬的人! ...
抱歉,今年我劝各位真的别轻易离职!
今天想跟大家说几句心里话,算是有感而发吧。希望我的读者看完都能重视起来。给大家分享一个读者的留言。“博主大大你好,我最近遇到一件事,我为了我女朋友裸辞了,目前我还处在失业状态,但是她还是和其他男生跑了,跑之前说了一句,你真的是废物,没钱谈什么恋爱,我该怎么办,我唯一的工作也没了,我好绝望,我想赚钱但又无从下手!”我的回复少年我以前像你一样迷茫,焦虑,不知所措,但我没有放弃,我知道我这辈子还长,我想...
程序员跳槽支付宝:面试遇
老大
太尴尬,网友:我觉得还行
跳槽,是绝大多数程序员曾经历的过程,也是每个程序员必须面对的
问题
。在这个缺乏安全感的年代,到处充斥着不稳定因素。社会环境不稳定,企业不稳定,程序员不稳定。所以说,那些不断跳来跳去的程序员,其实是仍在初级阶段,到了中级阶段基本就稳定下来了,在某一个细分方向上获得突破。但我建议是,如果不能达到工资翻一倍的水平,或者目标公司没有特别之处,最好不要跳。否则每跳一次,原来积累的人际关系就会丢掉,而技术又没有...
活在微软2
在微软结识了很多朋友,现在在做polit,没有什么程序要写。所以每天吃吃喝喝忙的不亦乐乎。加入了饭团,还有了个
老大
。于是近几个星期整天跟在
老大
后面混口饭吃,也准备学Wei和Shawn来个10元包月套餐。也可以跟在
老大
去去健身房。反正最近也要把健身卡用完。 想想再过一个月就要离开他们,还真是恋恋不舍。准备为饭团中的各位做传,以示缅怀。 瑞军
老大
:饭团的组建者之一。
非技术类
1,663
社区成员
58,947
社区内容
发帖
与我相关
我的任务
非技术类
VC/MFC 非技术类
复制链接
扫一扫
分享
社区描述
VC/MFC 非技术类
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章