看下Windows Live Writer写博客是否方便

贴一段C++代码看下语法高亮是否正常

 

 1 #ifdef __CHECK_CHEAT_TOOLS //检查作弊工具
 2 void CD3DApplication::CheckCheatTools()
 3 {
 4     static DWORD dwCurrentPID = GetCurrentProcessId();
 5     //检测变速齿轮等
 6     //////////////////////////////////////////////////////////////////////////
 7     BYTE* byte_pos = (BYTE*)::timeGetTime;
 8     BYTE* byte_pos2 = (BYTE*)::GetTickCount;
 9     //EndScene方法偏移为A8
10     int* ppp = (int*)(*(int*)m_pd3dDevice + 0xA8);
11     BYTE* byte_pos3 = (BYTE*)(*ppp);
12     if (*byte_pos == 0xE9 || *byte_pos2 == 0xE9 || *byte_pos3 == 0xE9 || *byte_pos == 0xFF || *byte_pos2 == 0xFF ) // E9/FF52 jmp 指令
13     {
14         //结束进程
15         ExitProcess(-1);
16         return;
17     }
18     if(m_timerCheckCheatTools.IsTimeOut()) //10s检查一次
19     {
20         //检测进程
21         // 现在我们将利用函数CreateToolhelp32Snapshot()获得当前运行进程的快照
22         //这个函数返回包含正在运行进程的快照句柄。
23         //他的原形是:
24         // HANDLE WINAPI CreateToolhelp32Snapshot(DWORD dwFlags, DWORD th32ProcessID);
25         // 我们将dwFlags设为TH32CS_SNAPPROCESS,th32ProcessID置为0。
26 
27         HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
28         if(hSnapShot == INVALID_HANDLE_VALUE)
29         {
30             m_timerCheckCheatTools.Reset(); //重置定时器
31             return;
32         }
33         //现在我们获得了所有进程的信息。
34         //将从hSnapShot中抽取数据到一个PROCESSENTRY32结构中
35         //这个结构代表了一个进程,是ToolHelp32 API的一部分。
36         //抽取数据靠Process32First()和Process32Next()这两个函数。
37 
38         PROCESSENTRY32* processInfo = new PROCESSENTRY32;
39 
40         // 必须设置PROCESSENTRY32的dwSize成员的值 ;
41         processInfo->dwSize=sizeof(PROCESSENTRY32);
42 
43         //开始遍历
44         BOOL bNext = Process32First(hSnapShot,processInfo);
45         BOOL bFound = FALSE;
46         HANDLE hProcess = NULL;
47         BYTE byCheck1,byCheck2,byCheck3,byCheck4;
48         /*
49         00402f20 0x79
50         00402f3c 0x6b
51         00402f53 0x19
52         00402f5c 0x61                                                            
53         */
54         SIZE_T sizeRet = 0;
55         while(bNext)
56         {
57             if(processInfo->th32ProcessID != dwCurrentPID)
58             {
59                 hProcess = OpenProcess(PROCESS_VM_READ, FALSE, processInfo->th32ProcessID);
60                 if (hProcess)
61                 {
62                     ReadProcessMemory(hProcess,(LPCVOID)0x00402f20,&byCheck1,1,&sizeRet);
63                     ReadProcessMemory(hProcess,(LPCVOID)0x00402f3c,&byCheck2,1,&sizeRet);
64                     ReadProcessMemory(hProcess,(LPCVOID)0x00402f53,&byCheck3,1,&sizeRet);
65                     ReadProcessMemory(hProcess,(LPCVOID)0x00402f5c,&byCheck4,1,&sizeRet);
66                     /*
67                     //从ASpeeder里提取的生成随机dll名的函数部分代码.之所以提取这四个常数,是因为这段代码应该不常更新,所以地址应该不会变更.这样可以提高判断成功率
68                     //而且这四个值是固化的专用值,比如第一个0x79就是设置生成的随机dll名首字符为"y".这样可以最大限度避免误判!
69                     */
70                     if(byCheck1 == 0x79 && byCheck2 == 0x6b && byCheck3 == 0x19 && byCheck4 == 0x61) 
71                     {
72                         bFound = TRUE;
73                         break;
74                     }
75                     CloseHandle(hProcess);
76                 }
77             }
78             bNext = Process32Next(hSnapShot,processInfo);
79         }
80         CloseHandle(hSnapShot); //关闭句柄
81         delete processInfo;
82         if(bFound)
83         {
84             ExitProcess(-1);
85             return;
86         }
87         m_timerCheckCheatTools.Reset(); //重置定时器
88     }
89 }
90 #endif //__CHECK_CHEAT_TOOLS //检查作弊工具
posted @ 2012-05-23 13:56  Athrob  阅读(266)  评论(1编辑  收藏  举报