首页
社区
课程
招聘
修改ImagePathName对付HS inline Hook
发表于: 2010-5-25 05:46 8049

修改ImagePathName对付HS inline Hook

2010-5-25 05:46
8049
本来在DEBUGMAN看到有人发了一篇调戏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] //指向PEB
   mov eax,[eax+$10] //指向_RTL_USER_PROCESS_PARAMETERS
   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.去试下读写. 发现没? 可以读也可以写了..

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

错误地方还请各位大神指点一二。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 101
活跃值: (157)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
这不是在DM转过来的吗..
2010-5-25 09:23
0
雪    币: 62
活跃值: (72)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
3
貌似在8哥人那里看过了
2010-5-25 15:46
0
雪    币: 44
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
对阿。那里的作者也是我。你可以看用户名。
Ps:手机发不了表情 :(
2010-5-25 16:03
0
雪    币: 325
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
貌似发重了  http://bbs.pediy.com/showthread.php?t=112898
2010-6-22 18:03
0
游客
登录 | 注册 方可回帖
返回
//