dt_TEBnt!_TEB+0x000NtTib:_NT_TIB+0x01cEnvironmentPointer:Ptr32Void+0x020ClientId:_CLIENT_ID+0" />
文档库 最新最全的文档下载
当前位置:文档库 › 修改ImagePathName对付HS inline Hook

修改ImagePathName对付HS inline Hook

本来v大神发了一篇调戏HS的 但碍于声望不够看不到 似乎听到有人说是"白名单"大法 于是搜了些资料 于是就KO了 于是就有此文了。

"白名单","白名单","白名单","白名单"-------"伪装进程"?

先来看看 TEB。

lkd> dt _TEB
nt!_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

再来看看PEB。

lkd> dt _PEB
nt!_PEB
+0x000 InheritedAddressSpace : UChar
+0x001 ReadImageFileExecOptions : UChar
+0x002 BeingDebugged : UChar
+0x003 SpareBool : UChar
+0x004 Mutant : Ptr32 Void
+0x008 ImageBaseAddress : Ptr32 Void
+0x00c Ldr : Ptr32 _PEB_LDR_DATA
+0x010 ProcessParameters : Ptr32 _RTL_USER_PROCESS_PARAMETERS //这里指向进程参数

接着再来看_RTL_USER_PROCESS_PARAMETERS 的结构。

lkd> dt _RTL_USER_PROCESS_PARAMETERS
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 //指向映像完整路径 

再来看下_UNICODE_STRING (似乎看过瘾了?)

lkd> dt _UNICODE_STRING
nt!_UNICODE_STRING
+0x000 Length : Uint2B
+0x002 MaximumLength : Uint2B
+0x004 Buffer : Ptr32 Uint2B //指向存放模块名的UNICODE字符串指针



好了,你会发现有HS保护的游戏 用任务管理器结束得了,噢,对了,这就是"白名单"大法. 我们可以修改ImagePathName 指向任务管理器(C:\WINDOWS\system32\taskmgr.exe).

具体实现代码:


procedure Kill(name:widestring);
//Writer:fairystory
begin
asm
mov eax,dword ptr fs:[$30] //指向TEB
mov eax,[eax+$10] //指向PEB
add eax,$38 //指向ImagePathName
add eax,$4 //指向ImagePathName.buffer
mov ebx,name
mov [eax],ebx
mov name,eax //赋值
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
lj:widestring;
begin
lj:='C:\WINDOWS\system32\taskmgr.exe'; //任务管理器路径
Kill(lj);
end;


好了,你在加些代码FindWindow,GetWindowThreadProcessId,OpenProcess,ReadProcessMemory/WriteProcessMemory.去试下读写. 发现没? 可以读也可以写了..

//////////////////////////////////////////////////////////////////////////////////////

高考压力太大,此仅为降压之用,如有错还请各位大神指点.

相关文档
相关文档 最新文档