动态定位 PEB 在 EPROCESS 中的便移量

bool GetPEBOffset(ULONG* PEBOffset) EJCKVT  
{ BSO6Z("a7  
     ULONG n,*Buffer,PID,Count=0,i=0; ${iMlcd/,  
     UCHAR* SearchBuffer; Je%)/U  
     PEPROCESS Pr = NULL; ,p:crJ9  
     bool bOK; |bsJ1=U  
     ULONG Array[3]={0,0,0}; n]3|Ca*  
     if(PEBOffset) uGVn}+  
           *PEBOffset=0; > >u R L  
     ZwQuerySystemInformation(SystemModuleInformation,&n,0,&n); 9<-0B%8  
     Buffer = (ULONG*)ExAllocatePool(NonPagedPool,n*sizeof(ULONG)); %sKb  
     ZwQuerySystemInformation(SystemProcessInformation,Buffer,n*sizeof(ULONG),0); G]b})kb  
     ULONG Offset = 0; ~$ ]<?5  
     SYSTEM_PROCESS_INFORMATION*P=(SYSTEM_PROCESS_INFORMATION*)Buffer; wZ~{@tIw  
     do LE JKY< H  
     { ~~~)+y  
           P=(SYSTEM_PROCESS_INFORMATION*)((BYTE*)P+Offset); ^8H+P4  
           Offset = P->NextEntryOffset; s$BpH5[=h=  
           PID = PTR_TO_NUM(P->UniqueProcessId); M' ([~  
           if(PID<8)continue; _lA+8%?e  
           Pr = NULL; gf n>~(  
           PsLookupProcessByProcessId(NUM_TO_PTR(PID),&Pr); &n,1JS5}  
           if(Pr) Z #-0(@  
           { IMR1R#u  
                 SearchBuffer=(UCHAR*)Pr; C[Xn"o+h  
                 if(MmIsAddressValid((VOID*)&SearchBuffer[0x150])==false) jxN:  
                       continue;                   a@D>rT*G  
                 if(MmIsAddressValid((VOID*)&SearchBuffer[0x304])==false) K{)h!h4v5  
                       continue; ;LW;HKq<  
                 for(n = 0x150; n < 0x300;n++) n`,'&C$  
                 { a- xa/i(e  
                       if((*(DWORD*)&SearchBuffer[n] & 0x7FFD0FFF)==0x7ffd0000) /=Q N1m  
                       { (1 n_aIz  
                             Array=n; 'qyx"t  
                             i++; U<~WMl8  
                             break;                                     hk.hA  
                       } DJzMwe  
                 } #j_3DT`jb  
                 if(i>=3) FWal&plg  
                       break; ^o-uOOw [  
           } [ i r^&4c  
     }while(Offset); &56@(2S  
     ExFreePool(Buffer); X(zYGWn j  
     bOK=true; | hDYe?gI  
     for(i = 0; i < 3;i++) dM*gm=  
     { ocMktwm~  
           if(Array!=Array[0]) -f~5#6Q]  
           { m G-4F/  
                 bOK=false; wo!rp|>*  
                 break; 9jWO#8&[1  
           } w=4RBNe  
     }       f<JD JTe%{  
     if(bOK) ~CSi@]49  
     { dwR. 4KY  
           if(PEBOffset) 9bSVKv]  
                 *PEBOffset=Array[0]; ai Uk:e  
           DbgPrint("Syser : Find PEB at %x of EPROCESS/n",Array[0]); h[B#cF.3'  
     } j`2zNEO9]  
     return bOK; o 2~bU/  
}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值