有关Exe运行时删除自己的问题,
现在所发现的所有方法都没有做到真正在exe运行时删除,而要等到结束程序时...而用复制品删除自己,早两年我就用过,这种方法太不专业,没有做到本质...——————————————
我所要的从来没有出现过...

解决方案 »

  1.   


    BOOL DeleteSelfEx()
    {
    HMODULE module = GetModuleHandle(0); 
    char buf[MAX_PATH];
    GetModuleFileName(module, buf, sizeof buf);  OSVERSIONINFO os_info;
    os_info.dwOSVersionInfoSize=sizeof(os_info);
    if(!GetVersionEx(&os_info))//版本相关
    return FALSE;

    LPVOID pCloseSelf;
    switch(os_info.dwPlatformId)
    {
    case VER_PLATFORM_WIN32_NT:
    CloseHandle((HANDLE)4);
    pCloseSelf = UnmapViewOfFile;
    break;
    case VER_PLATFORM_WIN32_WINDOWS:
    pCloseSelf = FreeLibrary;
    break;
    default:
    return FALSE;
    } __asm
    {
    lea eax, buf 
    push 0 
    push 0 
    push eax 
    push ExitProcess 
    push module 
    push DeleteFile 
    push [pCloseSelf] 
    ret 
    }
    return TRUE;//不可能到达此句
    }
      

  2.   

    看看以前的讨论
    http://community.csdn.net/Expert/topic/3108/3108243.xml?temp=.2523157
      

  3.   

    拜托大家看清楚题目...我要的是删除了自己还要自己在运行,
    而不是删除了自己再结束,或者一定要等到结束了才能删除...bs那些看问题不经大脑乱贴代码和地址带星的分又多自以为了不起的sb——————————————
    我所要的从来没有出现过...
      

  4.   

    我靠,你 丫 的欠揍,有种的就别提问,问别人东西还这么没礼貌,你tmd自己照着改改会死啊,我后悔回复你的帖子.
    版主看到请删了我所有回复
      

  5.   

    有关Exe运行时删除自己的问题,
    ------------------------------
    如题,即,进程如何在运行的时候,自己删除自己的.exe文件,上面两句话的意思差别很大吗??????????????????
      

  6.   

    to: laiyiling(最熟悉的陌生人)进程如何在运行的时候,自己删除自己的.exe文件,————————
    我要的是删除了自己还要自己在运行,
    而不是删除了自己再结束,或者一定要等到结束了才能删除...也就是文件删除了,但程序还在运行...__________________________
    我所要的从来没有出现过...
      

  7.   

    是不是像UNIX中的僵尸进程一样。
      

  8.   

    No idea!
    变通下到想得到,就是copy到人家的进程地址上运行,删除自己
      

  9.   

    to 楼主
    你回的第一帖都说人家sb 了还说自己没有不友好的意思,真有道理啊谈问题本身:
    运行时不能删除是因为文件加载器把整个exe做了个文件映象,所以删除之前必须解除这个映象,但是解除了映象之后exe的代码会被移出内存,所以看我前面帖的代码最后部分deletefile exitprocess 都是将地址放在了栈里,在ret时直接返回到的这两个函数内.要做到运行时删除自己然后接着运行我认为可以做到,首先,把exe文件的内容读一份到内存,接着对这份内容进行重定位,然后直接jmp到这里去,在这里面解除文件映象并删文件.最麻烦的是怎么重定位,这好比写一个PE文件加载器.
      

  10.   

    放在可移动磁盘或cdrom的程序可以脱离exe文件直接运行,windows加载此类程序的时候会将该程序全部拷入内存, 而不是简单的做文件影射。所以问题可以转化为如何骗过操作系统, 使它认为认为这个程序是放在可移动磁盘或cdrom中的。
      

  11.   

    可以啊 jink(毁人不倦) 的代码已经实现删除后继续运行了他把删除后要运行的代码压入堆栈了只不过删除自己后就调用ExitProcess退出了,你也可以调用DLL中的代码,或事先将代码复制到某处内存,然后删除自己后跳入这段代码继续执行