• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            牽著老婆滿街逛

            嚴以律己,寬以待人. 三思而后行.
            GMail/GTalk: yanglinbo#google.com;
            MSN/Email: tx7do#yahoo.com.cn;
            QQ: 3 0 3 3 9 6 9 2 0 .

            ring0檢測隱藏進程

             題: 【原創】ring0檢測隱藏進程
            作 者: 墮落天才
            時 間: 2007-05-10,13:28
            鏈 接: http://bbs.pediy.com/showthread.php?t=44243


            //網上得到一篇好文章 Ring0下搜索內存枚舉隱藏進程 ,但是拿里面的代碼來使用的時候發現并沒有太多效果
            //于是修改之,終于實現了最初的目標
            //由于直接搜索內存,跟系統調度沒什么關系,所以能夠枚舉到各種方法隱藏的進程 包括斷鏈、抹PspCidTable... 
            //甚至能枚舉到已經"死掉"的進程,本程序通過進程的ExitTime來判斷進程是不是已經結束
            //除非能夠把EProcess結構修改掉,但這個實現難度可能比較大,不知有沒有哪位大俠試過(PID我修改過),歡迎討論
            //
            //作者:墮落天才
            //時間:2007年5月10日
            //參考: uty  Ring0下搜索內存枚舉隱藏進程 http://www.cnxhacker.net/Article/show/3412.html
            //下面代碼在XP SP2測試通過
            #include<ntddk.h>

            ///////////////////////////不同的windows版本下面的偏移值不同
            #define  EPROCESS_SIZE       0x25C //EPROCESS結構大小

            #define  PEB_OFFSET          0x1B0
            #define  FILE_NAME_OFFSET    0x174
            #define  PROCESS_LINK_OFFSET 0x088
            #define  PROCESS_ID_OFFSET   0x084
            #define  EXIT_TIME_OFFSET    0x078

            #define  OBJECT_HEADER_SIZE  0x018
            #define  OBJECT_TYPE_OFFSET  0x008

            #define PDE_INVALID 2 
            #define PTE_INVALID 1 
            #define VALID 0 


            ULONG     pebAddress;         
            //PEB地址的前半部分
            PEPROCESS pSystem;            //system進程
            ULONG     pObjectTypeProcess; //進程對象類型

            ULONG   VALIDpage(ULONG addr) ;  
            //該函數直接復制自 Ring0下搜索內存枚舉隱藏進程
            BOOLEAN IsaRealProcess(ULONG i); //該函數復制自 Ring0下搜索內存枚舉隱藏進程
            VOID    WorkThread(IN PVOID pContext);
            ULONG   GetPebAddress();          
            //得到PEB地址前半部分
            VOID    EnumProcess();            //枚舉進程
            VOID    ShowProcess(ULONG pEProcess); //顯示結果

            VOID    OnUnload(IN PDRIVER_OBJECT DriverObject)
            {
            }

            NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING RegistryPath)
            {
              HANDLE hThread; 

              DriverObject 
            -> DriverUnload = OnUnload;

              pSystem    
            = PsGetCurrentProcess();
              pebAddress 
            = GetPebAddress();
              pObjectTypeProcess 
            = *(PULONG)((ULONG)pSystem - OBJECT_HEADER_SIZE +OBJECT_TYPE_OFFSET);  

              PsCreateSystemThread(
            &hThread, 
                (ACCESS_MASK)
            0
                NULL, 
                (HANDLE)
            0
                NULL, 
                WorkThread, 
                NULL ); 

              
            return STATUS_SUCCESS;
            }

            //////////////////////////////////////////////
            VOID WorkThread(IN PVOID pContext) 

              EnumProcess();
              PsTerminateSystemThread(STATUS_SUCCESS);  
            }

            ////////////////////////////////////////////////////////
            ULONG  GetPebAddress()
            {
              ULONG Address;
              PEPROCESS pEProcess;

                    
            //由于system進程的peb總是零 我們只有到其他進程去找了
              pEProcess = (PEPROCESS)((ULONG)((PLIST_ENTRY)((ULONG)pSystem + PROCESS_LINK_OFFSET))->Flink - PROCESS_LINK_OFFSET);
              Address   
            = *(PULONG)((ULONG)pEProcess + PEB_OFFSET);

              
            return (Address & 0xFFFF0000);  
            }

            ///////////////////////////////////////////////////////
            VOID EnumProcess()
            {
              ULONG  uSystemAddress 
            = (ULONG)pSystem;
              ULONG  i;
              ULONG  Address;
              ULONG  ret;

              DbgPrint(
            "-------------------------------------------");
              DbgPrint(
            "EProcess    PID    ImageFileName");
              DbgPrint(
            "---------------------------------");
              

              
            for(i = 0x80000000; i < uSystemAddress; i += 4){//system進程的EPROCESS地址就是最大值了
                ret = VALIDpage(i); 
                
            if (ret == VALID)
                  Address 
            = *(PULONG)i;
                  
            if (( Address & 0xFFFF0000== pebAddress){//每個進程的PEB地址都是在差不多的地方,地址前半部分是相同的       
                    if(IsaRealProcess(i))
                      ShowProcess(i 
            - PEB_OFFSET);  
                       i 
            += EPROCESS_SIZE;                
                    }
             
                  }
             
                }
            else if(ret == PTE_INVALID)
                  i 
            -=4
                  i 
            += 0x1000;//4k 
                }
            else
                  i
            -=4
                  i
            += 0x400000;//4mb 
                }
             
              }


              ShowProcess(uSystemAddress);
            //system的PEB總是零 上面的方法是枚舉不到的 不過我們用PsGetCurrentProcess就能得到了
              DbgPrint("-------------------------------------------");
              
            }

            /////////////////////////////////////////////////////////
            VOID    ShowProcess(ULONG pEProcess)
            {
              PLARGE_INTEGER ExitTime;
              ULONG PID;
              PUCHAR pFileName;
              
              ExitTime 
            = (PLARGE_INTEGER)(pEProcess + EXIT_TIME_OFFSET);  
              
            if(ExitTime->QuadPart != 0//已經結束的進程的ExitTime為非零
                return ;

              PID 
            = *(PULONG)(pEProcess + PROCESS_ID_OFFSET);
              pFileName 
            = (PUCHAR)(pEProcess + FILE_NAME_OFFSET);

              DbgPrint(
            "0x%08X  %04d   %s",pEProcess,PID,pFileName);
            }

            /////////////////////////////////////////////////////////////
            ULONG VALIDpage(ULONG addr) 

              ULONG pte; 
              ULONG pde; 
              
              pde 
            = 0xc0300000 + (addr>>22)*4
              
            if((*(PULONG)pde & 0x1!= 0)
                
            //large page 
                if((*(PULONG)pde & 0x80!= 0)
                  
            return VALID; 
                }
             
                pte 
            = 0xc0000000 + (addr>>12)*4
                
            if((*(PULONG)pte & 0x1!= 0)
                  
            return VALID; 
                }
            else
                  
            return PTE_INVALID; 
                }
             
              }
             
              
            return PDE_INVALID; 
            }
             
            ////////////////////////////////////////////////////////////////
            BOOLEAN IsaRealProcess(ULONG i) 

              NTSTATUS STATUS; 
              PUNICODE_STRING pUnicode; 
              UNICODE_STRING Process; 
              ULONG pObjectType; 
              ULONG ObjectTypeAddress; 
              
              
            if (VALIDpage(i- PEB_OFFSET) != VALID)
                
            return FALSE; 
              }
             

              ObjectTypeAddress 
            = i - PEB_OFFSET - OBJECT_HEADER_SIZE + OBJECT_TYPE_OFFSET ;
              
              
            if (VALIDpage(ObjectTypeAddress) == VALID)
                pObjectType 
            = *(PULONG)ObjectTypeAddress; 
              }
            else
                
            return FALSE; 
              }
             
              
              
            if(pObjectTypeProcess == pObjectType)//確定ObjectType是Process類型
                return TRUE; 
              }
             
              
            return FALSE; 

            }
             

            posted on 2011-01-31 11:37 楊粼波 閱讀(1162) 評論(0)  編輯 收藏 引用

            一本色道久久99一综合| 亚洲国产一成人久久精品| 久久人人妻人人爽人人爽| 久久水蜜桃亚洲av无码精品麻豆| 久久精品国产免费观看三人同眠| 色狠狠久久AV五月综合| 国产精品久久毛片完整版| 国产成人无码精品久久久免费| 久久91这里精品国产2020| 伊色综合久久之综合久久| 久久久久亚洲AV无码永不| 久久国产精品波多野结衣AV| 丁香色欲久久久久久综合网| 2022年国产精品久久久久| 性做久久久久久久久久久| 国产精品久久久久久吹潮| 亚洲欧美日韩精品久久亚洲区 | 久久久综合香蕉尹人综合网| 亚洲AV无码久久精品成人| 国产99久久久国产精免费| 性高湖久久久久久久久| 久久久久综合中文字幕| 日本免费一区二区久久人人澡| 久久人人超碰精品CAOPOREN | 香蕉久久久久久狠狠色| 久久国产成人精品麻豆| 色综合久久无码五十路人妻| 综合久久给合久久狠狠狠97色| 欧美亚洲另类久久综合| 久久精品水蜜桃av综合天堂| 一本久久免费视频| 久久亚洲中文字幕精品一区四| 99久久精品国内| 欧美牲交A欧牲交aⅴ久久| 久久久久久国产a免费观看黄色大片| 国产精品VIDEOSSEX久久发布| 久久久久女人精品毛片| 国产情侣久久久久aⅴ免费| 伊人久久精品无码av一区| 久久99久国产麻精品66| 久久毛片一区二区|