计时器:应用程序可以通过接管系统的计时器中断来维护一个计时器,
常见的函数有setTime() :应用程序可在初始化时条用这个API。若计时器超市,系统会想申请该计时器的窗口过程发送消息WM_TIMER,或者条用程序提供的那个回调函数。
1、 SetTimer函数
1> API函数SetTimer的原型
UINT_PTRSetTimer(
HWND hWnd, // 窗口句柄
UINT_PTR nIDEvent, // 定时器ID,多个定时器时,可以通过该ID判断是哪//个定时器
UINT uElapse, // 时间间隔,单位为毫秒
TIMERPROC lpTimerFunc // 回调函数
);
2、宫精度的多媒体计时器
3、GetTickCount()函数
4、timeGetTime()函数
004010C2 . 8B7424 08 mov esi,dword ptr ss:[esp+0x8] ; kernel32.BaseThreadInitThunk; Case 110 (WM_INITDIALOG) of switch 004010A5
004010C6 . 6A 00 push 0x0 ; /Timerproc = NULL
004010C8 . 68 E8030000 push 0x3E8 ; |Timeout = 1000. ms
004010CD . 6A 01 push 0x1 ; |TimerID = 0x1
004010CF . 56 push esi ; |hWnd = 00401000
004010D0 . FF15 30204000 call dword ptr ds:[<&USER32.SetTimer>] ; \SetTimer
004010D6 . A1 04304000 mov eax,dword ptr ds:[0x403004]
有两种解除方法:直接JMP跳过;利用WM_TIMER消息,查看VC的头文件;
菜单功能限制
功能受限制分为两种:试用版和正式半的软件是两个完全不同的软件
另一种试用版和正式版是同一个文件,只是没有注册,禁止了某些功能
相关函数:EnableMenultem()函数 将软件菜单和窗口灰化
hMenu:菜单句柄。
ulDEnableltem:指定将使其有效、无效或变灰的菜单项,按参数uEnable确定的含义。此参数可指定菜单条、菜单或子菜单里的菜单项。
uEnable:指定控制参数uIDEnableltem如何解释的标志,指示菜单项有效、无效或者变灰。此参数必须是MF_BYCOMMAND或MF_BYPOSITION,MF_ENABLED和MF_DISABLE或MF_GRAYED的组合。
EnableWinsow()函数
允许或禁止指定窗口
拆解限制保护
004011E3 . 6A 01 push 0x1 ; /Flags = MF_BYCOMMAND|MF_GRAYED|MF_STRING 将push 0x1 改为 push 0x0
004011E5 . 68 459C0000 push 0x9C45 ; |ItemID = 9C45 (40005.)
004011EA . 50 push eax ; |hMenu = 4BB2909F
004011EB . FF15 9C404000 call dword ptr ds:[<&USER32.EnableMenuItem>] ; \EnableMenuItem
004011F1 . 5E pop esi ; kernel32.74558484
004011F2 . B8 01000000 mov eax,0x1
004011F7 . C2 1000 retn 0x10