阅读:3815回复: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-22 18:13
引用第28楼guaiguaiguan于2007-11-22 15:14发表的 : mov edx,esp edx指向是参数栈,在参数栈上每0x4长达1K页上做dll query至少可以命中一个非系统的xxx |
|
|
板凳#
发布于:2007-11-22 15:14
edx 十有八九指向ntdll.dll地址空间。
|
|
地板#
发布于:2007-11-22 12:36
有edx就可以研究谁拉~
|
|
|
地下室#
发布于:2007-11-22 09:53
syscall:
lea ecx,xxxxxx mov edx,esp sysenter 进入ring0 然后 mov ebx,[eax*4+edi] .... call ebx 是有一个基地址和索引,但是执行到 sti sysexit iretd 返回ring3 寄存器的值已经发生变化,物是人非。如果在前面拦截的时候,保存edi、eax和ebx,但是频繁调用的syscall会不会乱序。 跟踪调用堆栈很有用,比如我想在拦截KeQuerySystemInforation class=5(查询进程信息),根据调用堆栈来判断究竟是那个模块或者驱动在调用。如果是微软提供的dll或者sys,可以放行,其他的,对不起。这样至少可以排除一些程序通过loadlibrary ntdll,直接调用本机API。 |
|
5楼#
发布于:2007-11-21 20:43
提示:KiSystemService中的edx有点用啊~
|
|
|
6楼#
发布于:2007-11-21 20:30
KiSystemService传入的call的参数可是xx的地址~xx的地址啊~~
|
|
|
7楼#
发布于:2007-11-21 20:29
KiSystemService进入时好像可以取得啊~~
|
|
|
8楼#
发布于:2007-11-21 20:27
慢慢搞~我的xxx采用了一个很poc的方法貌似可以获取到~嘿嘿~
|
|
|
9楼#
发布于:2007-11-21 13:43
KiSystemService函数退出前的sysenter是海平线。上面是天堂,下面是地狱。感觉处理起来非常烦琐。即使能够得到ring3的调用堆栈,把地址翻译成模块加偏移量或者模块函数加偏移量也是一个并不轻松的任务。像我等喜欢吃现成饭的懒人,不做也罢。不过感觉还是直接执行RDMSR指令去esp更容易些。
如果inline hook KiSystemService下面指令 popfd pop ecx sti sysexit iretd 在sti之前插入备份相关指令并拦截代码,此时ecx 存放的即为ring3 的esp,但是此时的syscall的索引号,却不知去向。 |
|
10楼#
发布于:2007-11-21 13:22
KiSystemService中应该可以吧~
|
|
|
11楼#
发布于:2007-11-21 10:32
按照本人的笨脑瓜理解是:
每一个tdi请求,通过调用堆栈回溯,可以发现其最终都是通过调用ZwDeviceIoControlFile函数实现的。不知道上面提到的callid是何物?不过每一个调用都会对应一个IoControlCode和pid。至于后面的“然后走ring3ESP,走之前检查是否是ring3 call syscall,都说到这份上了~~”,仍然没明白。一个sysenter指令把ring3的调用堆栈和ring0的调用堆栈截然分开,井水不犯河水。不知道你怎么走ring3ESP,走之前检查是否是ring3 call syscall。 killvxk如果怕泄露军机,不妨给我发个小窗,让我明白明白 |
|
12楼#
发布于:2007-11-09 23:42
hook中过滤ZwDeviceIoControlFile的callid,然后走ring3ESP,走之前检查是否是ring3 call syscall,都说到这份上了~~
其实tdi_connect中也可以做另外的文章~~哦弥陀佛~~ 无人回复么 |
|
|
13楼#
发布于:2007-11-06 16:44
没人回复,内容清空
|
|
14楼#
发布于:2007-11-06 16:36
没人回复,内容清空
|
|
15楼#
发布于:2007-11-06 15:04
KiXXX处确实可以获得ZwXXXX的ring3 CallStack的说~
|
|
|
16楼#
发布于:2007-11-06 14:30
引用第11楼killvxk于2007-11-06 13:32发表的 : sysenter ->call statck 从ntdll->ntoskrnl.exe 是一个分水岭,同一个世界,同一个梦想! |
|
17楼#
发布于:2007-11-06 13:53
xxx大仙又发威了~
![]() |
|
|
18楼#
发布于:2007-11-06 13:37
因为xxx是我的一个重要的xxx,所以有关xxx的很具体的xxx,我只能以xxxx形式说明~
只能说楼主仔细看看ETHREAD结构和KXXX结构(不是KTHREAD)中的Context地方~ |
|
|
19楼#
发布于:2007-11-06 13:32
哦弥陀佛~这个目的太明显,显然我看到了猥琐的xxx的影子~
把拦截做在ZwXXXX用CallStack 大法获得ring3的stackcall,然后分析一下最初搞WSAXXX或者xxx的地址是那个模块~ 哦弥陀佛~ |
|
|
上一页
下一页