见到个程序,扩展名是.exv 但它同样能出现在任务管理器中,当然也能正常运行这东西是怎么做的 怎么执行的

解决方案 »

  1.   

    我把a.exe改名为a.exv,dos命令行下直接输入a.exv,也是能执行的
      

  2.   

    或许是文件关联的问题,你可以把*.exv关联成.exe也可以关联成.txt,注册表里面有相应的设定
      

  3.   

    估计是命令行执行器cmd.exe会根据文件头来判断是不是可以执行,而不是仅仅看扩展名
      

  4.   

    都什么乱七八糟的, CreateProcess 根本就不管你扩展名是什么,你把 exe 改成 txt 照样能运行
      

  5.   

    程序运行会调用createprocess这个函数,这个函数可参考MSDN,lpApplicationName可以指定文件类型,只不过默认情况是EXE罢了
      

  6.   

    你说的涉及到Rootkit了,一般情况可以利用文件过滤驱动隐藏文件,但是文件一旦运行都会被映射到内存当中,不可能存在内存中运行的程序和文件不一样的情况,除非恶意破坏这个进程内存里面的数据
      

  7.   

    Rootkit的隐藏也只不过是从链表中把要隐藏的文件或进程拆下来了我想要的就是不能让这个小程序原样的出现在目标硬盘上,哪怕是曾经出现一下也不行 运行完后再删除或者擦除都不好
    能达到这个目的就行了
      

  8.   

    那你不如加密算了,既然不要原样出现,直接加密之
    另外隐藏也不只有链表一种方法,可以用irp,只不过Delphi不适合写驱动
      

  9.   


    可以, 原理就是用CreateProcess带CREATE_SUSPENDED启动任意一个可执行程序(比如explorer.exe, 可以称之为僵尸进程), 然后将其内存替换成真正要执行的exe内容, 修改入口指针最后用ResumeThread即可隐蔽地执行你的exe了, 而且你exe的内容只在内存中存在, 任务管理器中看到的却是僵尸进程的文件名. 如果你把svchost.exe作为僵尸进程那就非常具备欺骗性了. 而且实现并不复杂, 主要就是替换时要判断一下僵尸进程占用的内存空间要够装下你的程序. 如果僵尸进程内存空间太小还可以通过调用ntdll.dll中的NtUnmapViewOfSection先卸载僵尸进程占用的内存, 再通过VirtualAllocEx指定首地址的方式重新分配足够的空间, 用WriteProcessMemory将你的程序代码写入目标内存, 再用GetThreadContext, SetThreadContext修改目标进程的EBX寄存器使之指向新的exe入口地址, 最后用ResumeThread恢复目标进程的执行即可大功告成.不过我发现这个方法对delphi编译的程序执行完全没有问题, 但是对使用mfc的用vc编写的程序却无法执行, 原因就是用mfc的程序加载资源时不是直接从已经加载到内存中的资源里读取, 而是去读文件中的资源节, 但是我们程序对应的文件却是那个僵尸程序, 这就造成了读不到资源的异常发生.