能力值:
( LV2,RANK:10 )
|
-
-
2 楼
没人了...
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
真没人知道了?
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
就没大神提点几句吗??
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
定时器好像都在一个链表上?拿到链表的物理内存地址然后读出来?
|
能力值:
( 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
}
|
能力值:
( LV9,RANK:610 )
|
-
-
7 楼
mov esi,0xbf9aae14 // gptmrFirst地址
这个不用符号文件的话,很难找,但是win32k.sys有个特点是它的加载基址是固定的,就是它PE头中的ImageBase,32位系统里这个值总是 0xBF800000,所以对某一版本系统而言,这个值应该也是固定的
所以,我觉得可以考虑每个系统版本一个硬编码吧
但是,还有一个问题,就是同一系统的某个系统文件可能也存在不同的版本, 这些版本里偏移也不知道一样不一样,这个就有点麻烦了
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
感谢教主的回答!
我自己又抄起WinDbg搞了半天,找到一点思路了!
u win32k!gptmrFirst
本机Win2003下的gptmrFirst地址:
0xbf9bb4dc
虚拟机Win2003下的gptmrFirst地址:
0xbf9b301c
不想用硬编码,还是想要动态获取好一些:
发现FindTimer这个函数中有gptmrFirst地址,
但现在的问题是如何获取到FindTimer这个函数的地址?
一层一层用特征码搜索下来定位感觉太麻烦!
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
终于自己搞定了!就此结贴!
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
请问大神是怎样获得的
|
|
|