• <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)  編輯 收藏 引用

            亚洲国产成人精品91久久久| 久久国产成人精品麻豆| 2021久久国自产拍精品| 久久久午夜精品福利内容| 热综合一本伊人久久精品| 精品国产乱码久久久久久浪潮 | 亚洲另类欧美综合久久图片区| 久久er99热精品一区二区| 久久人人爽人人爽人人片av高请| 久久亚洲国产最新网站| 亚洲国产日韩综合久久精品| 久久涩综合| 国产精品久久久久久久人人看| 超级97碰碰碰碰久久久久最新| 国产成人综合久久精品红| 久久精品极品盛宴观看| 亚洲国产另类久久久精品小说 | 精品人妻伦九区久久AAA片69| 精品久久久一二三区| 国产偷久久久精品专区| AAA级久久久精品无码片| 久久九九亚洲精品| 免费精品久久久久久中文字幕| 武侠古典久久婷婷狼人伊人| 久久天天躁狠狠躁夜夜不卡| 精品国产乱码久久久久久郑州公司 | 成人国内精品久久久久影院| 久久精品中文字幕久久| 亚洲成av人片不卡无码久久| 亚洲AV日韩AV永久无码久久| 久久久青草青青亚洲国产免观 | 国产99久久久国产精品~~牛| 亚洲精品高清一二区久久| 少妇久久久久久被弄高潮| 99久久亚洲综合精品成人| 久久久久se色偷偷亚洲精品av| 99久久人妻无码精品系列蜜桃| 91精品国产91久久久久久青草| 伊人久久无码精品中文字幕| 精品国产福利久久久| 久久综合偷偷噜噜噜色|