2013年9月3日 星期二

修改映像路徑達到HS BYPASS





修改映像路徑當然要先談談PEB..




PEB = Process Environment Block
PEB structure 
Contains process information
PEB結構包含著進程的資訊。




一般來說FS指向TEB,然後TEB的結構是這樣的。
+0x000 NtTib : _NT_TIB
+0x01c EnvironmentPointer : Ptr32 Void
+0x020 ClientId : _CLIENT_ID
+0x028 ActiveRpcHandle : Ptr32 Void
+0x02c ThreadLocalStoragePointer : Ptr32 Void
+0x030 ProcessEnvironmentBlock : Ptr32 _PEB //這個是PEB




從FS->TEB->PEB這個位址,至於PEB的結構是這樣。
typedef struct _PEB { // Size: 0x1D8 //從這裡知道還有很多,但是太長就貼出我們需要部分。
/*000*/ UCHAR InheritedAddressSpace;
/*001*/ UCHAR ReadImageFileExecOptions;
/*002*/ UCHAR BeingDebugged;
/*003*/ UCHAR SpareBool; // Allocation size
/*004*/ HANDLE Mutant;
/*008*/ HINSTANCE ImageBaseAddress; // Instance
/*00C*/ VOID *DllList;
/*010*/ PPROCESS_PARAMETERS *ProcessParameters; //進程的參數 (這就是我們要的)
/*014*/ ULONG SubSystemData;
/*018*/ HANDLE DefaultHeap;
/*01C*/ KSPIN_LOCK FastPebLock;
/*020*/ ULONG FastPebLockRoutine;



ProcessParameters的結構我們看一下。MSDN
nt!_RTL_USER_PROCESS_PARAMETERS
+0x000 MaximumLength : Uint4B
+0x004 Length : Uint4B
+0x008 Flags : Uint4B
+0x00c DebugFlags : Uint4B
+0x010 ConsoleHandle : Ptr32 Void
+0x014 ConsoleFlags : Uint4B
+0x018 StandardInput : Ptr32 Void
+0x01c StandardOutput : Ptr32 Void
+0x020 StandardError : Ptr32 Void
+0x024 CurrentDirectory : _CURDIR //當前目錄
+0x030 DllPath : _UNICODE_STRING
+0x038 ImagePathName : _UNICODE_STRING  //映像路徑




可以知道ProcessParameters+0x38進去修改和讀取映向路徑,
之後配合Hackshield內幕所講到的白名單,
可以做到修改和讀取部分楓之谷的記憶體。



沒有留言:

張貼留言