阅读:3619回复:29
整样得到一个函数调用所在线程所对应的模块的地址?
一个线程调用了一个函数,我现在想知道这个线程的起始地址,也就是对应的模块的地址?
就是实现 IEXPLORER 中的线程的详细信息的功能! 我得到了线程的ID,TEB 得到了TEB 的TIB结构 typedef struct _NT_TIB { PEXCEPTION_REGISTRATION_RECORD ExceptionList; PVOID StackBase; PVOID StackLimit; PVOID SubSystemTib; union { PVOID FiberData; ULONG Version; }; PVOID ArbitraryUserPointer; PNT_TIB Self; } NT_TIB, *PNT_TIB; 我得到了StackBase 这个地址和模块的起始地址有啥关系呢? 还有就是通过ETHREAD 结构能得到线程对应的模块信息吗? 奇怪IEXPLORER就`为何能求出来呢? |
|
|
沙发#
发布于:2007-11-05 08:58
地址查询ZwQueryVirtualMemory
很轻松~~ |
|
|
板凳#
发布于:2007-11-05 12:19
|
|
|
地板#
发布于:2007-11-05 13:26
引用第2楼WQXNETQIQI于2007-11-05 12:19发表的 : 这个办法用处不大,因为可以set,ws的线程可以一运行就set成别的值 细节楼主可以参考大牛Nebbett 99年出版的NT/2000 Native API Reference |
|
地下室#
发布于:2007-11-05 13:48
猥亵的话,什么地址也可以set,只是一个start address而已,对运行又没有影响
微软的tlist就是用这个方法的~标准做法~ |
|
|
5楼#
发布于:2007-11-05 14:01
对,标准做法
这玩意儿不好就因为不用什么驱动什么权限随便自由set,依赖这个值做事心是悬着的 |
|
6楼#
发布于:2007-11-05 15:20
不解,这个模块调用这个函数一定会创建一个新线程吗?如果是枚举线程,那么你如何知道在这个线程里一定调用了这个函数,如果不是枚举线程,而是拦截函数,该函数的调用堆栈里面不是已经保存了这个函数返回线程后的地址吗?根据各个模块加载的基地址和模块大小,通过比较,推断是那个模块调用这个函数应该不困难吧。不知道楼主的用意是什么?是为了查证一个http请求是那个dll发出的?
如果是在tdi里面做,别忘交流一下,我也想知道一个tcp包究竟是那个模块发出的。 |
|
7楼#
发布于:2007-11-05 15:39
谢谢大家的回复!
要分的话再一起给大家把! "不知道楼主的用意是什么?是为了查证一个http请求是那个dll发出的?" 就是这样的要求 我需要的是在驱动里,知道当前操作的IRP是由应用程序的哪个模快调用的,最好能知道是当前是调用哪个函数! 譬如在TDI FILTER DRIVER 在tdi_connect 中我用 PsGetCurrentThread() 得到当前线程的句柄,这个句柄也是 TEB 的结构 在 TEB 的结构中我得到了 TIB 的结构 TIB 中有 线程堆栈的地址 我现在也把进程的模块地址 大小 线程ID 线程堆栈的地址 都得到了 但还是找不到线程起始地址和模块地址的对应关系 线程的 ETHREAD 和 KTHREAD 结构里有些信息 不知道能不能找出和模块的对应关系呢? |
|
|
8楼#
发布于:2007-11-05 21:30
先者为王
|
|
9楼#
发布于:2007-11-05 23:36
不想被改掉起始地址,很简单,hook create thread,或者用CreateThreadNotifyRoutine~
不过根本就没必要~ |
|
|
10楼#
发布于:2007-11-06 11:07
引用第7楼driver2008++于2007-11-05 15:39发表的 : 也需要了解这部分的内容,先琢磨一下,楼主有什么进展和收获,贡献一把,也给咱学习学习 |
|
11楼#
发布于:2007-11-06 13:32
哦弥陀佛~这个目的太明显,显然我看到了猥琐的xxx的影子~
把拦截做在ZwXXXX用CallStack 大法获得ring3的stackcall,然后分析一下最初搞WSAXXX或者xxx的地址是那个模块~ 哦弥陀佛~ |
|
|
12楼#
发布于:2007-11-06 13:37
因为xxx是我的一个重要的xxx,所以有关xxx的很具体的xxx,我只能以xxxx形式说明~
只能说楼主仔细看看ETHREAD结构和KXXX结构(不是KTHREAD)中的Context地方~ |
|
|
13楼#
发布于:2007-11-06 13:53
xxx大仙又发威了~
|
|
|
14楼#
发布于:2007-11-06 14:30
引用第11楼killvxk于2007-11-06 13:32发表的 : sysenter ->call statck 从ntdll->ntoskrnl.exe 是一个分水岭,同一个世界,同一个梦想! |
|
15楼#
发布于:2007-11-06 15:04
KiXXX处确实可以获得ZwXXXX的ring3 CallStack的说~
|
|
|
16楼#
发布于:2007-11-06 16:36
没人回复,内容清空
|
|
17楼#
发布于:2007-11-06 16:44
没人回复,内容清空
|
|
18楼#
发布于:2007-11-09 23:42
hook中过滤ZwDeviceIoControlFile的callid,然后走ring3ESP,走之前检查是否是ring3 call syscall,都说到这份上了~~
其实tdi_connect中也可以做另外的文章~~哦弥陀佛~~ 无人回复么 |
|
|
19楼#
发布于:2007-11-21 10:32
按照本人的笨脑瓜理解是:
每一个tdi请求,通过调用堆栈回溯,可以发现其最终都是通过调用ZwDeviceIoControlFile函数实现的。不知道上面提到的callid是何物?不过每一个调用都会对应一个IoControlCode和pid。至于后面的“然后走ring3ESP,走之前检查是否是ring3 call syscall,都说到这份上了~~”,仍然没明白。一个sysenter指令把ring3的调用堆栈和ring0的调用堆栈截然分开,井水不犯河水。不知道你怎么走ring3ESP,走之前检查是否是ring3 call syscall。 killvxk如果怕泄露军机,不妨给我发个小窗,让我明白明白 |
|
上一页
下一页