我写了一个对话框程序,我怎么做,才能够隐藏程序??在任务管理器中看不到!怎么做呢??我看了一些程序和文章,对于外部提供的数据(输入和输出的数据)的处理,都不时很清楚!我希望大家能提供一个详细的说明和代码!谢谢!希望大家不吝赐教!谢谢!希望大家能提供一些源代码!谢谢!

解决方案 »

  1.   

    供参考:
    http://dev.csdn.net/develop/article/11/11989.shtm
      

  2.   

    http://www.vckbase.com/document/viewdoc.asp?id=650
      

  3.   

    上面的错了
    http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=192778
      

  4.   

    lixiaosan(小三) ,请较您一下,我按照您给我的那个网页写了程序,可是编译部过去啊!!!报的错误是: error C2420: 'regproc' : illegal symbol in first operand
    error C2415: improper operand type这是为什么呢???
      

  5.   

    在任务管理器中隐藏进程,主要思路是通过Hook API,让进程内核对象拒绝来自于任务管理器的任何访问。具体方法比较复杂,你可以点名去问蒋晟老大
      

  6.   

    你是怎么写的?
    void  *regproc; 有没有?
      

  7.   

    lixiaosan(小三),
    我用你给的那个网页写了程序,
    执行这条语句时:
    regproc  =  GetProcAddress(GetModuleHandle("kernel32.dll"),  "RegisterServiceProcess");    
    regproc  返回总是NULL
    找不到 RegisterServiceProcess 
    我是在XP下运行的,是不是XP下不用RegisterServiceProcess 这个函数
      

  8.   


    我把他放在 .cpp 文件后就好了!但是一运行, 就弹出向微软发送错误报告的对话框,这是为什么啊??
      

  9.   

    http://dev.csdn.net/develop/article/11/11989.shtm不知道是不是系统的影响
      

  10.   

    一个exe文件在98下到是可以,不过在2000做不到,除非远程插入DLL或进行代码复制到另一个进程中运行
      

  11.   

    转别人的,我当时认为太麻烦,所以没有用,我把程序写成服务了。运行DLL文件最简单的方法是利用Rundll32.exe,Rundll/Rundll32是Windows自带的动态链接库工具,可以用来在命令行下执行动态链接库中的某个函数,其中Rundll是16位而Rundll32是32位的(分别调用16位和32位的DLL文件),Rundll32的使用方法如下:  Rundll32 DllFileName FuncName  例如我们编写了一个MyDll.dll,这个动态链接库中定义了一个MyFunc的函数,那么,我们通过Rundll32.exe  MyDll.dll  MyFunc就可以执行MyFunc函数的功能。  这个和木马的进程隐藏有什么关系么?当然有了,假设我们在MyFunc函数中实现了木马的功能,那么我们不就可以通过Rundll32来运行这个木马了么?在系统管理员看来,进程列表中增加的是Rundll32.exe而并不是木马文件,这样也算是木马的一种简易欺骗和自我保护方法(至少你不能去把Rundll32.exe删掉吧?想从Rundll32进程找到DLL木马还是有一点麻烦的)  使用Rundll32的方法进行进程隐藏是简易的,非常容易被识破。(虽然杀起来会麻烦一点)比较高级的方法是使用特洛伊DLL,特洛伊DLL的工作原理是使用木马DLL替换常用的DLL文件,通过函数转发器将正常的调用转发给原DLL,截获并处理特定的消息。例如,我们知道WINDOWS的Socket1.x的函数都是存放在wsock32.dll中的,那么我们自己写一个wsock32.dll文件,替换掉原先的wsock32.dll(将原先的DLL文件重命名为wsockold.dll)我们的wsock32.dll只做两件事,一是如果遇到不认识的调用,就直接转发给wsockold.dll(使用函数转发器forward);二是遇到特殊的请求(事先约定的)就解码并处理。这样理论上只要木马编写者通过SOCKET远程输入一定的暗号,就可以控制wsock32.dll(木马DLL)做任何操作。特洛伊DLL技术是比较古老的技术,因此微软也对此做了相当的防范,在Win2K的system32目录下有一个dllcache的目录,这个目录中存放着大量的DLL文件(也包括一些重要的exe文件),这个是微软用来保护DLL的法宝,一旦操作系统发现被保护的DLL文件被篡改(数字签名技术),它就会自动从dllcache中恢复这个文件。虽然说有种种方法可以绕过DLL保护(例如先更改dllcache目录中的备份再修改DLL文件、或者利用KnownDLLs键值更改DLL的默认启动路径等),但是可以想见的未来微软必将更加小心地保护重要的DLL文件;同时由于特洛伊DLL方法本身有着一些漏洞(例如修复安装、安装补丁、升级系统、检查数字签名等方法都有可能导致特洛伊DLL失效),所以这个方法也不能算是DLL木马的最优选择。  DLL木马的最高境界是动态嵌入技术,动态嵌入技术指的是将自己的代码嵌入正在运行的进程中的技术。理论上来说,在Windows中的每个进程都有自己的私有内存空间,别的进程是不允许对这个私有空间进行操作的(私人领地、请勿入内),但是实际上,我们仍然可以利用种种方法进入并操作进程的私有内存。在多种动态嵌入技术中(窗口Hook、挂接API、远程线程),我最喜欢的是远程线程技术,这种技术非常简单,只要有基本的进线程和动态链接库的知识就可以很轻松地完成嵌入,下面就为大家介绍一下远程线程技术。远程线程技术指的是通过在另一个进程中创建远程线程的方法进入那个进程的内存地址空间。我们知道,在进程中,可以通过CreateThread函数创建线程,被创建的新线程与主线程(就是进程启动时被同时自动建立的那个线程)共享地址空间以及其他的资源。但是很少有人知道,通过CreateRemoteThread也同样可以在另一个进程内创建新线程,被创建的远程线程同样可以共享远程进程(是远程进程耶!)的地址空间,所以,实际上,我们通过一个远程线程,进入了远程进程的内存地址空间,也就拥有了那个远程进程相当的权限。例如在远程进程内部启动一个DLL木马(与进入进程内部相比,启动一个DLL木马是小意思,实际上我们可以随意篡改那个远程进程的数据)。  首先,我们通过OpenProcess 来打开我们试图嵌入的进程(如果远程进程不允许打开,那么嵌入就无法进行了,这往往是由于权限不足引起的,解决方法是通过种种途径提升本地进程的权限) hRemoteProcess = OpenProcess( PROCESS_CREATE_THREAD | file://允许远程创建线程
                    PROCESS_VM_OPERATION | file://允许远程VM操作
                    PROCESS_VM_WRITE,//允许远程VM写
                    FALSE, dwRemoteProcessId )  由于我们后面需要写入远程进程的内存地址空间并建立远程线程,所以需要申请足够的权限(PROCESS_CREATE_THREAD、VM_OPERATION、VM_WRITE)。  然后,我们可以建立LoadLibraryW函数这个线程来启动我们的DLL木马,LoadLibraryW函数是在kernel32.dll中定义的,用来加载DLL文件,它只有一个参数,就是DLL文件的绝对路径名pszLibFileName,(也就是木马DLL的全路径文件名),但是由于木马DLL是在远程进程内调用的,所以我们首先还需要将这个文件名复制到远程地址空间:(否则远程线程是无法读到这个参数的) file://计算DLL路径名需要的内存空间
     int cb = (1 + lstrlenW(pszLibFileName)) * sizeof(WCHAR);
     file://使用VirtualAllocEx函数在远程进程的内存地址空间分配DLL文件名缓冲区
     pszLibFileRemote = (PWSTR) VirtualAllocEx( hRemoteProcess, NULL, cb, 
                MEM_COMMIT, PAGE_READWRITE);
     file://使用WriteProcessMemory函数将DLL的路径名复制到远程进程的内存空间
     iReturnCode = WriteProcessMemory(hRemoteProcess,
                pszLibFileRemote, (PVOID) pszLibFileName, cb, NULL);
     file://计算LoadLibraryW的入口地址
     PTHREAD_START_ROUTINE pfnStartAddr = (PTHREAD_START_ROUTINE)
         GetProcAddress(GetModuleHandle(TEXT("Kernel32")), "LoadLibraryW");OK,万事俱备,我们通过建立远程线程时的地址pfnStartAddr(实际上就是LoadLibraryW的入口地址)和传递的参数pszLibFileRemote(实际上是我们复制过去的木马DLL的全路径文件名)在远程进程内启动我们的木马DLL: file://启动远程线程LoadLibraryW,通过远程线程调用用户的DLL文件
     hRemoteThread = CreateRemoteThread( hRemoteProcess, NULL, 0, 
                     pfnStartAddr, pszLibFileRemote, 0, NULL);  至此,远程嵌入顺利完成,为了试验我们的DLL是不是已经正常的在远程线程运行,我编写了以下的测试DLL: BOOL APIENTRY DllMain(HANDLE hModule, DWORD reason, LPVOID lpReserved)
       {
        char szProcessId[64] ;
        switch ( reason )
         {
          case DLL_PROCESS_ATTACH:
           {
             file://获取当前进程ID
             _itoa ( GetCurrentProcessId(), szProcessId, 10 );
             MessageBox ( NULL, szProcessId, "RemoteDLL", MB_OK );
           }
          default:
          return TRUE;
         }
       }  当我使用RmtDll.exe程序将这个TestDLL.dll嵌入Explorer.exe进程后(PID=1208),该测试DLL弹出了1208字样的确认框,同时使用PS工具也能看到   Process ID: 1208 
       C:\WINNT\Explorer.exe (0x00400000)
       ……
       C:\TestDLL.dll (0x100000000)
       ……  这证明TestDLL.dll已经在Explorer.exe进程内正确地运行了。  无论是使用特洛伊DLL还是使用远程线程,都是让木马的核心代码运行于别的进程的内存空间,这样不仅能很好地隐藏自己,也能更好的保护自己。
      

  12.   

    您是把一个dll 嵌入Explorer.exe进程, 我可不可以把一个 exe 程序 嵌入Explorer.exe进程呢???????????????
      

  13.   

    当然可以,但是程序没有入口点,所以执行不到你的代码,又有什么用呢!
    一般来说用DLL远程嵌入,然后在DllMain()中创建一个勾子或者是线程的话,那样
    你的程序就可以执行了。
      

  14.   

    那么,我如何把我的dll 添加到 SVCHOST.exe,有这样的源代码么??我可不可以把 exe 添加到 SVCHOST.exe ???????????????????/
      

  15.   

    请文大家,有没有类似的源程序啊???xiexie
      

  16.   

    msdn里面有过介绍还有一个sample