• <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 楊粼波 閱讀(1160) 評論(0)  編輯 收藏 引用

            久久精品国产亚洲AV嫖农村妇女| 欧美日韩精品久久久免费观看| 久久成人国产精品| 丁香五月综合久久激情| 伊人情人综合成人久久网小说 | 狠狠色丁香婷综合久久| 久久久久这里只有精品| 久久精品人人做人人爽97| 久久久久人妻一区精品| 精品久久久久久国产| 97精品国产97久久久久久免费| 青青草国产精品久久| 久久久久久久91精品免费观看| 国产午夜久久影院| 亚洲AV无码成人网站久久精品大| 精品久久久久久国产牛牛app| 久久综合噜噜激激的五月天| 天天影视色香欲综合久久| 热久久国产精品| 国产精品久久久久久吹潮| 久久久久久久久久久精品尤物 | 精品久久久无码人妻中文字幕| 久久93精品国产91久久综合| 久久精品无码一区二区三区| 热re99久久精品国99热| 久久天天躁夜夜躁狠狠躁2022| 久久97久久97精品免视看秋霞| 亚洲成色999久久网站| 久久久久国产精品熟女影院 | 日本人妻丰满熟妇久久久久久| 午夜精品久久久久久| 久久精品一区二区三区中文字幕| 国产 亚洲 欧美 另类 久久| 青青青青久久精品国产h| 久久精品国产免费一区| 久久夜色tv网站| 中文字幕一区二区三区久久网站| 欧美日韩中文字幕久久伊人| 26uuu久久五月天| 久久久中文字幕日本| 久久99久久无码毛片一区二区|