过QQ游戏大厅的SX保护 - Evil0r's Blog - 博客频道 - CSDN_NET
Evil0r's Blog
很久很久以前,天是藍的,水是清的,Virus是跑在Ring3的,AV是只做掃描的
- 目錄視圖
- 摘要視圖
- 訂閱
CSDN 2011年度十大風云博客專欄評選火爆進行中!??????????????CSDN社區3月技術大分享百本IT圖書等你拿!
過QQ游戲大廳的SX保護
分類: VC/C/C++GAMEHACK2012-03-13 15:42137人閱讀評論(0)收藏舉報? ? ? ?早些時間看郁金香的教程,寫過qq游戲練練看的掛,那時候CE附加QQ游戲大廳的時候貌似是沒有任何保護的,昨天舍友讓做個斗地主的記牌器,但是,我用CE附加的時候,被檢測到了,其實不附加也會被檢測,所以猜測可能只是檢測窗口進程或是模塊名稱啥的吧,被檢測到的時候主程序會退出,但是那個對話框還在,就是那個SX什么什么的,所以如果是QQgame啟動了某個線程來檢測非法的話,在主程序退出其他線程對象都釋放掉的時候,那個檢測的線程對象還是存在的(提示SX非法的對話框別關掉!)。借助pt很容易就找到了這個線程。
未開CE前線程狀態:
開了CE被檢測到后的線程狀態:
然后該怎么辦就不用說了吧,干掉這個線程就OK了。
若是嫌麻煩每次都要開pt找線程的話,可以寫個結束這個模塊內線程的程序
#include "stdafx.h"#include "windows.h"#include "TlHelp32.h"const TCHAR QQ_GAME[] = _T("QQGame.exe");const TCHAR QQ_THREAD_DLL[] = _T("TenSLX.dll");typedef enum _THREADINFOCLASS { ThreadBasicInformation, ThreadTimes, ThreadPriority, ThreadBasePriority, ThreadAffinityMask, ThreadImpersonationToken, ThreadDescriptorTableEntry, ThreadEnableAlignmentFaultFixup, ThreadEventPair_Reusable, ThreadQuerySetWin32StartAddress, ThreadZeroTlsCell, ThreadPerformanceCount, ThreadAmILastThread, ThreadIdealProcessor, ThreadPriorityBoost, ThreadSetTlsArrayAddress, ThreadIsIoPending, ThreadHideFromDebugger, ThreadBreakOnTermination, MaxThreadInfoClass } THREADINFOCLASS;typedef LONG (__stdcall *_pfnZwQueryInformationThread) ( IN HANDLE ThreadHandle, IN THREADINFOCLASS ThreadInformationClass, OUT PVOID ThreadInformation, IN ULONG ThreadInformationLength, OUT PULONG ReturnLength OPTIONAL );HANDLE m_GameProcessHandle;//記錄QQ_THREAD_DLL信息BYTE * m_pmodBaseAddr; DWORD m_dwmodBaseSize;_pfnZwQueryInformationThread m_pfnZwQueryInformationThread;BOOL StartPatch();//PATCHQQ主函數DWORD EnablePrivilege (LPCTSTR name);//提權函數BOOL ListProcessModules(DWORD dwPID);//枚舉指定進程的模塊BOOL ListProcessThreads( DWORD dwOwnerPID);//枚舉指定進程創建的線程,并結束掉QQ保護線程PVOID ShowThreadInfo(DWORD tid);//獲取線程的起始地址int _tmain(int argc, _TCHAR* argv[]){ m_pfnZwQueryInformationThread =(_pfnZwQueryInformationThread)\ GetProcAddress (LoadLibrary(_T("ntdll.dll")),"ZwQueryInformationThread"); if (StartPatch()) { printf("可以CE附加QQ游戲大廳了\n"); } else printf("失敗!\n"); return 0;}BOOL StartPatch(){ if(0!=EnablePrivilege (SE_DEBUG_NAME)) { return FALSE; } HANDLE hProcessSnap; PROCESSENTRY32 pe32; hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 ); if( hProcessSnap == INVALID_HANDLE_VALUE ) { return FALSE; } pe32.dwSize = sizeof( PROCESSENTRY32 ); if( !Process32First( hProcessSnap, &pe32 ) ) { CloseHandle( hProcessSnap ); return FALSE; } BOOL bStartGame = FALSE; do { if (_tcscmp(pe32.szExeFile, QQ_GAME) == 0) { bStartGame = TRUE; m_GameProcessHandle = OpenProcess(PROCESS_VM_WRITE|PROCESS_CREATE_THREAD|PROCESS_VM_OPERATION,\ FALSE, pe32.th32ProcessID); if (m_GameProcessHandle == NULL) { return FALSE; } for (int i=0; i<5;i++) { if (!ListProcessModules(pe32.th32ProcessID)) { return FALSE; } } if (!ListProcessThreads(pe32.th32ProcessID)) { return FALSE; } } } while( Process32Next( hProcessSnap, &pe32 ) ); if (!bStartGame) { MessageBox(NULL,_T("運行QQ大廳后才能使用"),_T("提示"),MB_OK); return FALSE; } CloseHandle( hProcessSnap ); return TRUE;}DWORD EnablePrivilege (LPCTSTR name) { HANDLE hToken; BOOL rv; //設置結構 TOKEN_PRIVILEGES priv = { 1, {0, 0, SE_PRIVILEGE_ENABLED} }; // 查找權限值 LookupPrivilegeValue ( 0, name, &priv.Privileges[0].Luid ); // 打開本進程Token OpenProcessToken( GetCurrentProcess (), TOKEN_ADJUST_PRIVILEGES, &hToken ); // 提權 AdjustTokenPrivileges ( hToken, FALSE, &priv, sizeof priv, 0, 0 ); // 返回值,錯誤信息,如果操作成功,則應為ERROR_SUCCESS,為O rv = GetLastError(); // 關閉Token CloseHandle (hToken); return rv; } BOOL ListProcessModules(DWORD dwPID){ HANDLE hModuleSnap = INVALID_HANDLE_VALUE; MODULEENTRY32 me32; hModuleSnap = CreateToolhelp32Snapshot( TH32CS_SNAPMODULE, dwPID ); if( hModuleSnap == INVALID_HANDLE_VALUE ) { return( FALSE ); } me32.dwSize = sizeof( MODULEENTRY32 ); if( !Module32First( hModuleSnap, &me32 ) ) { CloseHandle( hModuleSnap ); return( FALSE ); } do { if (_tcscmp(me32.szModule, QQ_THREAD_DLL) == 0) { m_pmodBaseAddr = me32.modBaseAddr; m_dwmodBaseSize = me32.modBaseSize; } }while( Module32Next( hModuleSnap, &me32 )); CloseHandle( hModuleSnap ); return( TRUE );}BOOL ListProcessThreads( DWORD dwOwnerPID) { HANDLE hThreadSnap = INVALID_HANDLE_VALUE; THREADENTRY32 te32; PVOID addr; hThreadSnap = CreateToolhelp32Snapshot( TH32CS_SNAPTHREAD, 0 ); if( hThreadSnap == INVALID_HANDLE_VALUE ) return( FALSE ); te32.dwSize = sizeof(THREADENTRY32 ); if( !Thread32First( hThreadSnap, &te32 ) ) { CloseHandle( hThreadSnap ); return( FALSE ); } do { if( te32.th32OwnerProcessID == dwOwnerPID ) { addr = ShowThreadInfo(te32.th32ThreadID); if(((DWORD)addr>(DWORD)m_pmodBaseAddr)&&((DWORD)addr<\ ((DWORD)m_pmodBaseAddr+(DWORD)m_dwmodBaseSize))) { HANDLE oth=OpenThread(THREAD_ALL_ACCESS,FALSE,te32.th32ThreadID); //關閉這個線程 TerminateThread(oth, 0); } } } while( Thread32Next(hThreadSnap, &te32 ) ); CloseHandle( hThreadSnap ); return( TRUE );}PVOID ShowThreadInfo(DWORD tid) { PVOID startaddr; HANDLE thread; //thread = m_pfnOpenThread_ex(THREAD_ALL_ACCESS,FALSE,tid); thread=OpenThread(THREAD_ALL_ACCESS,FALSE,tid); if (thread == NULL) return FALSE; m_pfnZwQueryInformationThread(thread, ThreadQuerySetWin32StartAddress, &startaddr, sizeof(startaddr), NULL); CloseHandle (thread); return startaddr; }
evi10r
- 訪問:20477次
- 積分:1273分
- 排名:第4601名
- 原創:86篇
- 轉載:13篇
- 譯文:0篇
- 評論:85條
看雪論壇
一蓑煙雨
第八個男人
卡飯論壇
ZeroBox
SoftRCE
吾愛破解友情鏈接Sphinx_翔
小平童鞋
何Leader
zz_1215文章分類
- 逆向學習(13)
- vc基礎(11)
- VC/C/C++(32)
- GAMEHACK(5)
- 驅動內核(11)
- LUA(0)
- Python(1)
- 算法與數據結構(2)
- PE/Virus(6)
- 操作系統(2)
- 文字(4)
- ActiveX編程(0)
- 魔獸編程(4)
- OpenCV(2)
- 病毒分析(2)
- 調試器(1)
- 溢出學習(5)
- Ruby(1)
- 資源共享(2)
- 信息隱藏(0)
- PE結構導出表詳細解析 (1827)
- 基于11平臺的全圖和迅游加速器破解版 (761)
- 一步一步教你寫DOTA外掛 (518)
- __declspec(naked) 生成... (415)
- DOTA作弊地址,持續更新 (367)
- 做了個隱藏進程跟保護進程的小工具 (360)
- 寫了個魔獸爭霸輔助工具 (344)
- 簡單實現了下SSDT SHADOW HO... (337)
- Detour安裝及簡單使用實例 (330)
- QQ連連看小外掛一個 (318)
- 模仿LordPE寫了個PE解析工具
ak47tt1: ak47tt1@qq.com非常感謝!!
- 由遠程線程注入代碼引出來的一些問題
evi10r: .bss段是未初始化的靜態變量和未初始化的全局變量的存放區一般RawData為0 表示在磁盤中不占...
- 關于ImageRvaToVa與SEC_IMAGE的一些東東
evi10r: @evi10r:可以理解為映射進去后的VA,但是貌似得不到PE頭的數據,返回的都是null
- 關于ImageRvaToVa與SEC_IMAGE的一些東東
evi10r: @Lactoferrin:謝謝明白了其實是view的base+offset啊結合LOADPE和代碼又...
- 簡簡單單,做自己的視頻加密軟件
evi10r: @wangjieest:視頻也是數據文件的呀
- 簡簡單單,做自己的視頻加密軟件
wangjieest:看起來是視頻加密...原來是文件加密...不明白有些WMV可以在內部加密的原理...
- 模仿LordPE寫了個PE解析工具
wangjieest: wangjieest@163.com
- 關于VS2008調試時加載符號緩慢的問題
evi10r: @evi10r:可以,lockresource是16位留下來的東西應該是沒啥用
- 關于VS2008調試時加載符號緩慢的問題
evi10r:大晚上突然想起個東西,資源的內存地址可以直接用loadresource的返回值?
- VC釋放資源
evi10r: http://www.vckbase.com/document/viewdoc/?id=1564
- 做了個隱藏進程跟保護進程的小工具 (10)
- 模仿LordPE寫了個PE解析工具 (10)
- 一步一步教你寫DOTA外掛 (7)
- 關于ImageRvaToVa與SEC_I... (5)
- 關于程序基址改變問題 (4)
- 寫了個魔獸爭霸輔助工具 (4)
- 窗口全屏,覆蓋任務欄 (3)
- QQ連連看小外掛一個 (3)
- 用戶界面線程簡單學習 (2)
- 使用DLL_THREAD_ATTACH阻... (2)
通過 Wiz 發布
附件列表
?
轉載于:https://www.cnblogs.com/xe2011/archive/2012/05/30/2525939.html
總結
以上是生活随笔為你收集整理的过QQ游戏大厅的SX保护 - Evil0r's Blog - 博客频道 - CSDN_NET的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 服务器地址显示169.254,IP地址是
- 下一篇: CS5序列号