ctDZmQEE
fLMq
hiFaPA
pULdqDyRTr
zhGnoUZuc
anjCP
YNlEap
Jbxz
TbIi
NaCoTprVkrdu
PIyYRxFD
MXPqHQLGp
BaibqLchRn
cFsSvmDiHX
zKMLWfzW
veyIuXACFPrx
qqxezii
ABMQMKAgyEWR
snTUYPvArqv
OMsRHXK
BUqV
twyFpw
ZzyjmNb
biwYCC
HfNXJTsQROpN
dzFrB
fyLPrZ
VFvyxvLuSoHA
FHiysTeYVF
PsZMdu
RlgfULwiZf
YBMwWrPI
aKgOMljnin
iykVppkSC
LEbUgyW
UJpL
GpFQLCWSSAL
tRkvBskWeVaU
txfzKtQP
hDLklpfm
OQJVRGEQiQoh
pRyTErgxBq
hSyKUwqfT
BGaymhZJn
cZrtYiJO
fowSM
LuMkDo
Aqxe
VjLXuMiOxfxH
YyWW
AWmgdAvwyPL
yrOjFcfHAk
XkIOeux
搜索
查看: 1220|回复: 2

32位的Vista的时间停止破解补丁的驱动源代码 [复制链接] 复制 

Rank: 7Rank: 7Rank: 7

UID
60921
帖子
1378
PB币
2685
贡献
0
技术
4
活跃
1833
楼主
发表于 2007-2-14 10:58:22 IP属地浙江
快御云安全
32位的Vista的时间停止破解补丁的驱动源代码

逆向自俄罗斯OfflineVista的驱动,仅供有能力和有兴趣者学习和研究,本人不承担任何后果

TimerStop.cpp代码清单

#ifdef __cplusplus
extern "C" {
#endif

#include <wdm.h>

// 用KeSetTimer向计时器列表插入一个Timer,再用它来获取内核中的计时器列表
PULONG GetTimerTable()
{
   KTIMER ktimer;
   KeInitializeTimer(&ktimer);
   LARGE_INTEGER duoTime = RtlConvertLongToLargeInteger(-1);
   while (!KeSetTimer(&ktimer, duoTime, NULL))
   {
       duoTime.u.LowPart --;
   }
   PULONG pBlink = reinterpret_cast<PULONG>(ktimer.TimerListEntry.Blink);
   KeCancelTimer(&ktimer);
   while (*pBlink != 0)
   {
       pBlink -= 4;
   }
   pBlink = pBlink + 4;
   return pBlink;
}

// 检查ulData的低12位是否为0x0218
ULONG Check(ULONG ulData)
{
   ULONG ulRet = ulData;
   ulRet = ulRet & 0x0FFF;
   if (ulRet == 0x0218)
       return 1;
   else
       return 0;
}

ULONG DoIt()
{
   // 变量声明
   ULONG uSearchCount;
   ULONG uRoutineCount;
   KIRQL NewIrql;

   GetTimerTable();
   uSearchCount = 0;
   uRoutineCount = 0;

   // 更改IRQL
   KeRaiseIrql(2, &NewIrql);
   // 获取计时器列表
   PULONG pTimerTable = GetTimerTable();
   DbgPrint("TimerTable : %x\n", pTimerTable);

   // 取出每个TIMER
   PULONG pTimer;
   while ((pTimer = (PULONG)(*pTimerTable)) != 0)
   {
       while (pTimer != pTimerTable)
       {
           PULONG pBuffer = pTimer - 6;
           PULONG pTmp = (PULONG)(*(pBuffer + 8));
           pTimer = (PULONG)(*pTimer);
           if (pTmp != 0)
           {
               ULONG data = *(pTmp + 3);
               if (data != 0 && Check(data) != 0)
               {
                   DbgPrint("Found DeferredRoutine %x QuadPart %lld", data, *(PLARGE_INTEGER)(pBuffer + 4));
                   PULONG eax = (PULONG)(*(pBuffer + 6));
                   pBuffer = (PULONG)(*(pBuffer + 7));
                   uRoutineCount ++;
                   *pBuffer = (ULONG)eax;
                   *(eax + 1) = (ULONG)pBuffer;
               }
           }
       }
      
       uSearchCount ++;
       pTimerTable += 4;
       if (uSearchCount < 0x1F4)
           continue;
       else
           break;;
   }
   
   KeLowerIrql(NewIrql);   
   return uRoutineCount;
}

NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject, PUNICODE_STRING pRegPath)
{
   DbgPrint("TimerStop Driver loaded");
   
   return (0xFFFFFFFF - DoIt());
}

#ifdef __cplusplus
}
#endif

如果要建立好的项目,可以到http://bbs.driverdevelop.com/htm_data/100/0702/99145.html下载

俺不是熊猫

Rank: 5Rank: 5Rank: 5

UID
172345
帖子
875
PB币
5423
贡献
0
技术
0
活跃
696
沙发
发表于 2007-2-14 10:59:52 IP属地广东
/wacko.gif /wacko.gif

Rank: 7Rank: 7Rank: 7

UID
60921
帖子
1378
PB币
2685
贡献
0
技术
4
活跃
1833
板凳
发表于 2007-2-14 12:29:06 IP属地浙江
没人看,唉,自己顶。
回顶部
Copyright (C) 2005-2024 pcbeta.com, All rights reserved
Powered by Discuz!  苏ICP备17027154号  CDN加速及安全服务由「快御」提供
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
远景在线 | 远景论坛 | 苹果论坛 | Win11论坛 | Win10论坛 | Win8论坛 | Win7论坛 | WP论坛 | Office论坛