No.68199 作者:jola 邮件:ch181120@163.net ID:10295 登陆:39次 QQ:122348673 文章数:145篇 最后登陆IP:210.21.215.18 最后登陆:2005/1/7 17:49:35 注册:2003/3/16 12:29:00 财富:637 发帖时间:2004/12/6 22:09:53 发贴者IP:202.105.135.4 标题:jola:vc程序删除自己 摘要:No.68199vc程序删除自己 发信人: floppy (软驱~~~~数据载入中,请稍后), 信区: VisualC 标 题: VC程序删除自己 发信站: 北大未名站 (2001年06月02日02:35:21 星期六), 站内信件 下面的代码由Gary Nebbett写就.Gary Nebbett乃是WINDOWS NT/2000 NATIVE API REFE RENCE的作者.乃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所指的地方.当进入UnmapViewOf File的流程时,栈里见到的是返回地址DeleteFile和HMODUL module.也就是说调用完毕后 返回到了DeleteFile的入口地址.当返回到DeleteFile时,看到了ExitProcess的地址,也 就是返回地址.和参数EA ......
>>返回讨论的主题
|