首页
社区
课程
招聘
[求助]CE开启后非法的疑问
发表于: 2012-5-27 12:14 17088

[求助]CE开启后非法的疑问

2012-5-27 12:14
17088
看了 下面这篇文章 我有自己也测试了,确实可以这么操作
标 题: 【原创】过QQ游戏大厅的SX保护(申请邀请码)
作 者: evilor
时 间: 2012-03-13,15:53:01
链 接: http://bbs.pediy.com/showthread.php?t=147811

我自己监控了 NtReadVirtualMemory 这个内核函数,发现QQ游戏会读取CE游戏的内存,估计是先打开CE进程获取进程句柄后 ->读取CE内存 ->扫描CE特征码。

游戏开启后有三个TenSLX.dll创建的线程,用XT可以看到



其中一个就是弹出非法对话框的 线程入口0x1002EF60,一个是显示终止状态,那就不管它,还有一个线程入口0x10035610。

经测试发现暂停 线程入口0x1002EF60 后 开了CE 就不会非法,但是游戏还是会读取CE的内存,前面说过我HOOK了NtReadVirtualMemory 函数进行监视的
假如单独暂停线程入口0x10035610 的线程,游戏就不会读取CE内存了,监控上没信息,不过没一会功夫 游戏就报非法了。

这让我猜想,难道线程入口0x1002EF60 的线程只是用来弹出对话框的么?我们暂停它 只是让游戏弹不出 非法对话框而已啊,因为另一个线程还在读取CE的内存,但是另一线程暂停后 虽然游戏没有读取CE 的内存,却还是发现了CE的存在,说明游戏还有其他的地方动了手脚,如果有高手知道的话,请指点我一下。QQ14584058

我针对上面这个疑问 还录制了一个视频
欢迎大家指点   
http://115.com/file/dpknxrmb#通过InlineHook阻止某程序去打开MyGame的进程.rar

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (21)
雪    币: 20570
活跃值: (3790)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
你测试了Evilor的方法,撤除所有的tenslx.dll线程。
如果再没有报非法,就可以推理没有其他的地方,对不对啊。。。?

可能我理解错了。。。
2012-5-27 15:05
0
雪    币: 615
活跃值: (530)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
3
http://115.com/file/bem2dgx7   这是答案吗?
2012-5-27 18:53
0
雪    币: 101
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
TX系列的网络游戏里,我用XT PT 好像都看不到 TenSLX.dll 创建的线程
2012-5-27 21:00
0
雪    币: 101
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我是看了你发的教程,才来问这些问题的,这个教程里的 猜想可能有误,就跟我说的一样,明明没有在读取内存了,为什么还会被发现,报非法呢
2012-5-27 21:02
0
雪    币: 20570
活跃值: (3790)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
下载了,不过需要密码?
可以分享吗?
谢谢!
2012-5-27 21:18
0
雪    币: 101
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
密码是 www.begin5.com
2012-5-29 20:24
0
雪    币: 130
活跃值: (392)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
感谢分享。·
2012-5-30 10:30
0
雪    币: 20570
活跃值: (3790)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9
谢谢您的回复和分享 !
2012-5-30 10:40
0
雪    币: 219
活跃值: (738)
能力值: (RANK:290 )
在线值:
发帖
回帖
粉丝
10
我 一般  之间 INline  全部和 HOOK 线程有关的函数
2012-5-30 11:20
0
雪    币: 286
活跃值: (57)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
xjj
11
按你的描述

游戏完全可以检测关键线程是否被停止,如果被停了,也提示非法

这只是按你的说法理论推导,,无事实依据.
2012-5-30 11:46
0
雪    币: 101
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
那我把那个提示非法的线程给暂停了,CE就可以任意玩弄QQ游戏大厅了。说明没其他线程来其他线程来检测了,要么就是被我暂停的这个线程会去检测 其他线程有没有暂停吧?
2012-5-30 19:01
0
雪    币: 508
活跃值: (202)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
13
我不习惯每次都用工具
我做了个假的TenSLX.dll代替它就可以了
2012-5-31 19:42
0
雪    币: 101
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
假的不会被游戏程序发现 比如比较版本 特征码什么的?
2012-5-31 21:45
0
雪    币: 508
活跃值: (202)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
15
不会的我用CE搜了30分钟都没出非法
2012-5-31 21:50
0
雪    币: 101
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
高人,假的 DLL 怎么写 能传授不?
2012-5-31 21:53
0
雪    币: 508
活跃值: (202)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
17
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 头文件
#include <Windows.h>
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 导出函数
#pragma comment(linker, "/EXPORT:GetTSObject=_AheadLib_GetTSObject,@1")
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 宏定义
#define EXTERNC extern "C"
#define NAKED __declspec(naked)
#define EXPORT __declspec(dllexport)

#define ALCPP EXPORT NAKED
#define ALSTD EXTERNC EXPORT NAKED void __stdcall
#define ALCFAST EXTERNC EXPORT NAKED void __fastcall
#define ALCDECL EXTERNC NAKED void __cdecl
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// AheadLib 命名空间
namespace AheadLib
{
        HMODULE m_hModule = NULL;        // 原始模块句柄
        DWORD m_dwReturn[1] = {0};        // 原始函数返回地址

        // 加载原始模块
        inline BOOL WINAPI Load()
        {
                TCHAR tzPath[MAX_PATH];
                TCHAR tzTemp[MAX_PATH * 2];

                lstrcpy(tzPath, TEXT("TenSLX"));
                m_hModule = LoadLibrary(tzPath);
                if (m_hModule == NULL)
                {
                        wsprintf(tzTemp, TEXT("无法加载 %s,程序无法正常运行。"), tzPath);
                        MessageBox(NULL, tzTemp, TEXT("AheadLib"), MB_ICONSTOP);
                }

                return (m_hModule != NULL);       
        }
               
        // 释放原始模块
        inline VOID WINAPI Free()
        {
                if (m_hModule)
                {
                        FreeLibrary(m_hModule);
                }
        }

        // 获取原始函数地址
        FARPROC WINAPI GetAddress(PCSTR pszProcName)
        {
                FARPROC fpAddress;
                CHAR szProcName[16];
                TCHAR tzTemp[MAX_PATH];

                fpAddress = GetProcAddress(m_hModule, pszProcName);
                if (fpAddress == NULL)
                {
                        if (HIWORD(pszProcName) == 0)
                        {
                                wsprintf(szProcName, "%d", pszProcName);
                                pszProcName = szProcName;
                        }

                        wsprintf(tzTemp, TEXT("无法找到函数 %hs,程序无法正常运行。"), pszProcName);
                        MessageBox(NULL, tzTemp, TEXT("AheadLib"), MB_ICONSTOP);
                        ExitProcess(-2);
                }

                return fpAddress;
        }
}
using namespace AheadLib;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 入口函数
BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReason, PVOID pvReserved)
{
        if (dwReason == DLL_PROCESS_ATTACH)
        {
               
                //DisableThreadLibraryCalls(hModule);

                //return Load();
        }
        else if (dwReason == DLL_PROCESS_DETACH)
        {
                Free();
        }

        return TRUE;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 导出函数
ALCDECL AheadLib_GetTSObject(void)
{
        // 保存返回地址
        __asm POP m_dwReturn[0 * TYPE long];

        // 调用原始函数
        GetAddress("GetTSObject")();

        // 转跳到返回地址
        __asm JMP m_dwReturn[0 * TYPE long];
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

伪照一下就可以了
2012-5-31 22:18
0
雪    币: 130
活跃值: (392)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
膜拜下。
2012-6-1 10:24
0
雪    币: 160
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
专注wangweilll三十年
2012-6-1 10:46
0
雪    币: 302
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
按照你的方法写发现不行 还是提示加载那DLL错误 工具查看导出函数的确就一个不知道是没写好还是什么 ~
2012-6-22 13:04
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
膜拜  !!!!
2012-8-8 23:43
0
雪    币: 1461
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
只能对QQGAME
2012-8-14 03:18
0
游客
登录 | 注册 方可回帖
返回
//