driver2008++
驱动牛犊
驱动牛犊
  • 注册日期2007-10-30
  • 最后登录2007-12-06
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
阅读:3815回复:29

整样得到一个函数调用所在线程所对应的模块的地址?

楼主#
更多 发布于:2007-11-05 03:08
一个线程调用了一个函数,我现在想知道这个线程的起始地址,也就是对应的模块的地址?
就是实现 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就`为何能求出来呢?
驱网无线,快乐无限
killvxk
论坛版主
论坛版主
  • 注册日期2005-10-03
  • 最后登录2014-04-14
  • 粉丝3
  • 关注1
  • 积分1082分
  • 威望2003点
  • 贡献值0点
  • 好评度1693点
  • 原创分2分
  • 专家分0分
沙发#
发布于:2007-11-22 18:13
引用第28楼guaiguaiguan于2007-11-22 15:14发表的  :
edx 十有八九指向ntdll.dll地址空间。

mov edx,esp
edx指向是参数栈,在参数栈上每0x4长达1K页上做dll query至少可以命中一个非系统的xxx
没有战争就没有进步 X3工作组 为您提供最好的军火
guaiguaiguan
驱动中牛
驱动中牛
  • 注册日期2003-10-11
  • 最后登录2011-01-12
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望556点
  • 贡献值0点
  • 好评度490点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-11-22 15:14
edx 十有八九指向ntdll.dll地址空间。
killvxk
论坛版主
论坛版主
  • 注册日期2005-10-03
  • 最后登录2014-04-14
  • 粉丝3
  • 关注1
  • 积分1082分
  • 威望2003点
  • 贡献值0点
  • 好评度1693点
  • 原创分2分
  • 专家分0分
地板#
发布于:2007-11-22 12:36
有edx就可以研究谁拉~
没有战争就没有进步 X3工作组 为您提供最好的军火
guaiguaiguan
驱动中牛
驱动中牛
  • 注册日期2003-10-11
  • 最后登录2011-01-12
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望556点
  • 贡献值0点
  • 好评度490点
  • 原创分0分
  • 专家分0分
地下室#
发布于: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。
killvxk
论坛版主
论坛版主
  • 注册日期2005-10-03
  • 最后登录2014-04-14
  • 粉丝3
  • 关注1
  • 积分1082分
  • 威望2003点
  • 贡献值0点
  • 好评度1693点
  • 原创分2分
  • 专家分0分
5楼#
发布于:2007-11-21 20:43
提示:KiSystemService中的edx有点用啊~
没有战争就没有进步 X3工作组 为您提供最好的军火
killvxk
论坛版主
论坛版主
  • 注册日期2005-10-03
  • 最后登录2014-04-14
  • 粉丝3
  • 关注1
  • 积分1082分
  • 威望2003点
  • 贡献值0点
  • 好评度1693点
  • 原创分2分
  • 专家分0分
6楼#
发布于:2007-11-21 20:30
KiSystemService传入的call的参数可是xx的地址~xx的地址啊~~
没有战争就没有进步 X3工作组 为您提供最好的军火
killvxk
论坛版主
论坛版主
  • 注册日期2005-10-03
  • 最后登录2014-04-14
  • 粉丝3
  • 关注1
  • 积分1082分
  • 威望2003点
  • 贡献值0点
  • 好评度1693点
  • 原创分2分
  • 专家分0分
7楼#
发布于:2007-11-21 20:29
KiSystemService进入时好像可以取得啊~~
没有战争就没有进步 X3工作组 为您提供最好的军火
killvxk
论坛版主
论坛版主
  • 注册日期2005-10-03
  • 最后登录2014-04-14
  • 粉丝3
  • 关注1
  • 积分1082分
  • 威望2003点
  • 贡献值0点
  • 好评度1693点
  • 原创分2分
  • 专家分0分
8楼#
发布于:2007-11-21 20:27
慢慢搞~我的xxx采用了一个很poc的方法貌似可以获取到~嘿嘿~
没有战争就没有进步 X3工作组 为您提供最好的军火
guaiguaiguan
驱动中牛
驱动中牛
  • 注册日期2003-10-11
  • 最后登录2011-01-12
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望556点
  • 贡献值0点
  • 好评度490点
  • 原创分0分
  • 专家分0分
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的索引号,却不知去向。
killvxk
论坛版主
论坛版主
  • 注册日期2005-10-03
  • 最后登录2014-04-14
  • 粉丝3
  • 关注1
  • 积分1082分
  • 威望2003点
  • 贡献值0点
  • 好评度1693点
  • 原创分2分
  • 专家分0分
10楼#
发布于:2007-11-21 13:22
KiSystemService中应该可以吧~
没有战争就没有进步 X3工作组 为您提供最好的军火
guaiguaiguan
驱动中牛
驱动中牛
  • 注册日期2003-10-11
  • 最后登录2011-01-12
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望556点
  • 贡献值0点
  • 好评度490点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2007-11-21 10:32
按照本人的笨脑瓜理解是:
每一个tdi请求,通过调用堆栈回溯,可以发现其最终都是通过调用ZwDeviceIoControlFile函数实现的。不知道上面提到的callid是何物?不过每一个调用都会对应一个IoControlCode和pid。至于后面的“然后走ring3ESP,走之前检查是否是ring3 call syscall,都说到这份上了~~”,仍然没明白。一个sysenter指令把ring3的调用堆栈和ring0的调用堆栈截然分开,井水不犯河水。不知道你怎么走ring3ESP,走之前检查是否是ring3 call syscall。
killvxk如果怕泄露军机,不妨给我发个小窗,让我明白明白
killvxk
论坛版主
论坛版主
  • 注册日期2005-10-03
  • 最后登录2014-04-14
  • 粉丝3
  • 关注1
  • 积分1082分
  • 威望2003点
  • 贡献值0点
  • 好评度1693点
  • 原创分2分
  • 专家分0分
12楼#
发布于:2007-11-09 23:42
hook中过滤ZwDeviceIoControlFile的callid,然后走ring3ESP,走之前检查是否是ring3 call syscall,都说到这份上了~~

其实tdi_connect中也可以做另外的文章~~哦弥陀佛~~


无人回复么
没有战争就没有进步 X3工作组 为您提供最好的军火
guaiguaiguan
驱动中牛
驱动中牛
  • 注册日期2003-10-11
  • 最后登录2011-01-12
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望556点
  • 贡献值0点
  • 好评度490点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2007-11-06 16:44
没人回复,内容清空
guaiguaiguan
驱动中牛
驱动中牛
  • 注册日期2003-10-11
  • 最后登录2011-01-12
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望556点
  • 贡献值0点
  • 好评度490点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2007-11-06 16:36
没人回复,内容清空
killvxk
论坛版主
论坛版主
  • 注册日期2005-10-03
  • 最后登录2014-04-14
  • 粉丝3
  • 关注1
  • 积分1082分
  • 威望2003点
  • 贡献值0点
  • 好评度1693点
  • 原创分2分
  • 专家分0分
15楼#
发布于:2007-11-06 15:04
KiXXX处确实可以获得ZwXXXX的ring3 CallStack的说~
没有战争就没有进步 X3工作组 为您提供最好的军火
guaiguaiguan
驱动中牛
驱动中牛
  • 注册日期2003-10-11
  • 最后登录2011-01-12
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望556点
  • 贡献值0点
  • 好评度490点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2007-11-06 14:30
引用第11楼killvxk于2007-11-06 13:32发表的  :
哦弥陀佛~这个目的太明显,显然我看到了猥琐的xxx的影子~
把拦截做在ZwXXXX用CallStack 大法获得ring3的stackcall,然后分析一下最初搞WSAXXX或者xxx的地址是那个模块~
哦弥陀佛~

 sysenter ->call statck
从ntdll->ntoskrnl.exe
是一个分水岭,同一个世界,同一个梦想!
WQXNETQIQI
驱动大牛
驱动大牛
  • 注册日期2006-06-12
  • 最后登录2010-10-26
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望1076点
  • 贡献值0点
  • 好评度895点
  • 原创分1分
  • 专家分0分
17楼#
发布于:2007-11-06 13:53
xxx大仙又发威了~
驱动开发者 呵呵
killvxk
论坛版主
论坛版主
  • 注册日期2005-10-03
  • 最后登录2014-04-14
  • 粉丝3
  • 关注1
  • 积分1082分
  • 威望2003点
  • 贡献值0点
  • 好评度1693点
  • 原创分2分
  • 专家分0分
18楼#
发布于:2007-11-06 13:37
因为xxx是我的一个重要的xxx,所以有关xxx的很具体的xxx,我只能以xxxx形式说明~
只能说楼主仔细看看ETHREAD结构和KXXX结构(不是KTHREAD)中的Context地方~
没有战争就没有进步 X3工作组 为您提供最好的军火
killvxk
论坛版主
论坛版主
  • 注册日期2005-10-03
  • 最后登录2014-04-14
  • 粉丝3
  • 关注1
  • 积分1082分
  • 威望2003点
  • 贡献值0点
  • 好评度1693点
  • 原创分2分
  • 专家分0分
19楼#
发布于:2007-11-06 13:32
哦弥陀佛~这个目的太明显,显然我看到了猥琐的xxx的影子~
把拦截做在ZwXXXX用CallStack 大法获得ring3的stackcall,然后分析一下最初搞WSAXXX或者xxx的地址是那个模块~
哦弥陀佛~
没有战争就没有进步 X3工作组 为您提供最好的军火
上一页
游客

返回顶部