首页
社区
课程
招聘
[旧帖] 修改ImagePathName对付HS inline Hook[邀请码已发放] 0.00雪花
发表于: 2010-5-13 06:00 2764

[旧帖] 修改ImagePathName对付HS inline Hook[邀请码已发放] 0.00雪花

2010-5-13 06:00
2764
本来在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.去试下读写. 发现没? 可以读也可以写了..

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

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

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 25
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
学习
2010-5-13 11:58
0
雪    币: 89
活跃值: (43)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
高考压力大!!!看来还是个小伙子啊,继续加油吧.....努力总会有回报的,不过你的文章..........
2010-5-13 13:23
0
雪    币: 263
活跃值: (85)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
拜读了。。。
2010-5-13 17:24
0
雪    币: 11
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
学习了,有空试试!
2010-5-13 20:59
0
雪    币: 2105
活跃值: (424)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
用任务管理可以结束是亮点
2010-5-13 23:46
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
好办法,学习了。
2011-4-14 01:18
0
雪    币: 284
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
无法学习只能膜拜
2011-4-14 08:22
0
雪    币: 122
活跃值: (72)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
9
哈哈。。我把他翻译成C++...

void HsKill(char *sName)
{
	_asm
	{      
    		mov eax,dword ptr fs:[0x030] //指向PEB
			mov eax,[eax+0x010] //指向_RTL_USER_PROCESS_PARAMETERS
			add eax,0x038  //指向ImagePathName
			add eax,0x004   //指向ImagePathName.buffer
			mov ebx,sName 
			mov [eax],ebx 
			mov sName,eax  //赋值

	}
}
void CHsDlg::OnButton1() 
{
	// TODO: Add your control notification handler code here
	HsKill("C:\WINDOWS\system32\taskmgr.exe");
}
2011-9-30 09:26
0
游客
登录 | 注册 方可回帖
返回
//