看下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 //检查作弊工具