-
-
[原创]枚举进程定时器
-
发表于:
2013-1-17 16:58
20177
-
这个进程定时器 Xuetr Pt 都有这个功能,这个功能也很实用,这个大家都知道,
群里前些日子有人说起这进程定时器怎么枚举,发出来给大家玩玩
以XP分析为主,不怎么会说话,我就以图片为主。
首先要分析 user32.dll 的 SetTimer 函数,至于这个函数作用大家都知道,
用 IDA 打开 use32.dll 找到 SetTimer
调用的是NtUserSetTimer,继续跟
继续跟call __SetTimer@16 ; _SetTimer(x,x,x,x)
进入__SetTimer@16
继续跟call _InternalSetTimer@20 ; InternalSetTimer(x,x,x,x,x)
进入InternalSetTimer
call _FindTimer@16 ; FindTimer(x,x,x,x)
关键函数FindTimer,进入FindTimer看看
mov eax, _gptmrFirst
通过2K代码,知道_gptmrFirst 就是进程定时器的一个表里面存放着所有进程定时器信息
2K代码我就不贴了,相信大家都有
// 进程定时器结构
typedef struct _HEAD {
HANDLE h;
DWORD cLockObj;
} HEAD, *PHEAD;
typedef struct tagTIMER {
HEAD head;
// 下个结构
struct tagTIMER *ptmrNext;
struct tagTIMER *ptmrPrev;
PULONG pti;
// 窗口句柄
PULONG spwnd;
// 定时器ID
UINT_PTR nID;
// 倒计时
INT cmsCountdown;
// 间隔时间
INT cmsRate;
UINT flags;
// 函数入口
ULONG pfn;
PULONG ptiOptCreator;
} TIMER, *PTIMER;
这就是定时器的结构
找到了关键的表,那么枚举就容易了,我只贴枚举的代码,全贴太长了,没必要。
这里以XP分析为主,2K3的略有不同,但是大体相同主要是定位问题,WIN7 没研究出来,
WIN7的那个表与结构完全与XP 2K3不同,希望研究出来的朋友能分享下。
效果图:
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!