鱼C论坛

 找回密码
 立即注册
查看: 4389|回复: 5

过腾讯非法提示的程序

[复制链接]
发表于 2012-12-23 15:58:01 | 显示全部楼层 |阅读模式
1鱼币
#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;
}

过腾讯非法提示的程序,编译后出现错误,请大家帮忙调试一下.

最佳答案

查看完整内容

这份代码看过,我记得是枚举模块,然后找到那个dll然后,结束掉那几个线程 缺了N多头文件。。 用了printf没包含stdio.h 用了_T宏却没有包含#include "tchar.h" 原本以为是C 结果还用了C++语法,定义变量得前置 还有一堆错误,这代码真非主流 没时间不改了 你大概就想调试下QQ大厅,写下WG吧。 那个QQ大厅用三个线程在检测是否被附加的 简单点,直接用XueTr工具右键查看QQGAME进程的线程,然后结束掉 三个模块是TenSLX ...
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-12-23 15:58:02 | 显示全部楼层
本帖最后由 メ㊣逆ご帅☆ 于 2012-12-23 21:49 编辑

这份代码看过,我记得是枚举模块,然后找到那个dll然后,结束掉那几个线程
缺了N多头文件。。
用了printf没包含stdio.h
用了_T宏却没有包含#include "tchar.h"
原本以为是C
结果还用了C++语法,定义变量得前置
还有一堆错误,这代码真非主流
没时间不改了

你大概就想调试下QQ大厅,写下WG吧。
那个QQ大厅用三个线程在检测是否被附加的
简单点,直接用XueTr工具右键查看QQGAME进程的线程,然后结束掉
三个模块是TenSLX.dll的线程就可以附加了

评分

参与人数 1鱼币 +5 收起 理由
s0512 + 5 真给力

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-1-6 19:39:52 | 显示全部楼层
感谢メ㊣逆ご帅☆ 回复,.之前我也是用XueTr工具过掉这个提示,  enum 枚举也知道.我就是想学习不用工具,自己写程序或驱动过掉这个非法提示,能说说 这里的 enum   枚举,具体是怎么实现的吗?愿闻其详.能有视频教程更是感激不尽!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-1-7 19:11:57 | 显示全部楼层
嘿嘿 ,支持下,新手学习
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-4-24 21:56:12 | 显示全部楼层
来看看呵呵
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-5-25 09:51:30 | 显示全部楼层
真是难得给力的帖子啊。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-8-13 18:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表