首页
社区
课程
招聘
如何读取其它进程的线程局部存贮数据[已解决]
发表于: 2007-3-7 00:41 6400

如何读取其它进程的线程局部存贮数据[已解决]

2007-3-7 00:41
6400
自己写了一个游戏工具,一直运行的很好,但这次游戏更新后,
存放怪物列表动态地址的基地址不再使用全局变量,而是使用了一个线程局部变量存放,游戏内可以访问,但只能通过fs寄存器,象这样:
mov     ecx, large fs:2Ch
mov     edx, TlsIndex
mov     eax, [ecx+edx*4]
mov     edi, [eax+8]
edi里面存放的就是基地址

现在想在游戏外部得到edi这个基地址的值,怎么写代码才能搞定啊
有哪位xdjm懂得怎么做啊,请不吝赐教
多谢多谢

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 248
活跃值: (18)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
线程局部变量地址和线程环境块有什么关系吗
是不是可以通过线程基地址得到线程变量地址
2007-3-7 13:34
0
雪    币: 242
活跃值: (14)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
用的是静态TLS存储的,TlsIndex是固定的吧?
2007-3-7 17:11
0
雪    币: 248
活跃值: (18)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
whtyy  
:用的是静态TLS存储的,TlsIndex是固定的吧?
--------------------------------------------------
是的,TlsIndex是固定的,一直都是零。不知为什么

========================================================
自己解决了
方法如下:
HANDLE hThread =
OpenThread(THREAD_GET_CONTEXT|THREAD_QUERY_INFORMATION | PROCESS_VM_OPERATION|PROCESS_VM_READ,FALSE, threadID);
if (NULL != hThread)
{
CONTEXT context = {0};
LDT_ENTRY sel;
DWORD read,teb,tls;

context.ContextFlags=CONTEXT_ALL;
GetThreadContext(hThread,&context);
GetThreadSelectorEntry(hThread,context.SegFs,&sel);
teb = sel.BaseLow
                  |(sel.HighWord.Bytes.BaseMid<<16)
                  |(sel.HighWord.Bytes.BaseHi<<24);

ReadProcessMemory(hProcess,(LPCVOID)(teb + 0x2c),&tls,sizeof(DWORD),&read);
         //TLS里就是线程的局部存贮地址
::CloseHandle(hWowMainThread);
}
感谢 网络技术论坛的zuoyefeng,他提供的文章
Writing Trojans that Bypass Windows XP Service Pack 2 Firewall
2007-3-12 21:20
0
游客
登录 | 注册 方可回帖
返回
//