首页
社区
课程
招聘
[求助]在用户层怎样枚举指定进程的定时器?
发表于: 2014-7-6 21:30 5312

[求助]在用户层怎样枚举指定进程的定时器?

2014-7-6 21:30
5312
也就是怎样枚举Ring3定时器?
求大神指教!
收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 67
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
没人了...
2014-7-12 19:38
0
雪    币: 67
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
真没人知道了?
2014-7-14 10:33
0
雪    币: 67
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
就没大神提点几句吗??
2014-7-26 13:13
0
雪    币: 74
活跃值: (243)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
定时器好像都在一个链表上?拿到链表的物理内存地址然后读出来?
2014-7-27 16:45
0
雪    币: 67
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
上次抄了某位大牛的代码,是在内核层枚举的,在WinXP下测试可以,在此感谢,但是,在他的代码里有几处硬编码,我现在想要在别的系统上运行,不知道这几处硬编码是怎么找出来的!

        __asm
        {
        pushad
        mov esi,0xbf9aae14 // gptmrFirst地址
        mov esi,dword ptr[esi]
        mov edi,dword ptr[0xbf9aae18] // gptiCurrent 当前线程 Win32Thread  _W32THREAD  这个尚未用到
        mov edi,dword ptr[edi]
        xor ebx,ebx
        CmpAddr : cmp esi,ebx
        je End
        }

        __asm
        {
        mov Timer_Object,esi
        mov eax,dword ptr[esi + 10h]    // 存放线程 ETHREAD 的指针地址
        mov eax,dword ptr[eax]        //  _ETHREAD
        mov Timer_Ethread,eax
        mov edx,dword ptr[eax + 0x1ec]  //  +0x1ec Cid              : _CLIENT_ID ETHREAD->Cid->PID 进程ID
        mov PID,edx
        mov edx,dword ptr[eax + 0x1f0]  //  +0x1ec Cid              : _CLIENT_IDETHREAD->Cid->TID  线程ID
        mov TID,edx
        mov edx,dword ptr[eax + 0x220]  //  +0x220 ThreadsProcess   : Ptr32 _EPROCESS
        mov EPROCESS_ADDR,edx
        }
2014-7-31 10:39
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
7
mov esi,0xbf9aae14 // gptmrFirst地址

这个不用符号文件的话,很难找,但是win32k.sys有个特点是它的加载基址是固定的,就是它PE头中的ImageBase,32位系统里这个值总是 0xBF800000,所以对某一版本系统而言,这个值应该也是固定的

所以,我觉得可以考虑每个系统版本一个硬编码吧

但是,还有一个问题,就是同一系统的某个系统文件可能也存在不同的版本, 这些版本里偏移也不知道一样不一样,这个就有点麻烦了
2014-7-31 20:14
0
雪    币: 67
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
感谢教主的回答!
我自己又抄起WinDbg搞了半天,找到一点思路了!

u win32k!gptmrFirst

本机Win2003下的gptmrFirst地址:
0xbf9bb4dc

虚拟机Win2003下的gptmrFirst地址:
0xbf9b301c

不想用硬编码,还是想要动态获取好一些:
发现FindTimer这个函数中有gptmrFirst地址,
但现在的问题是如何获取到FindTimer这个函数的地址?
一层一层用特征码搜索下来定位感觉太麻烦!
2014-7-31 22:10
0
雪    币: 67
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
终于自己搞定了!就此结贴!
2014-8-4 14:50
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
请问大神是怎样获得的
2014-10-12 18:11
0
游客
登录 | 注册 方可回帖
返回
//