首页
社区
课程
招聘
[讨论]突破 *** 反外挂系统
2007-11-18 17:47 40876

[讨论]突破 *** 反外挂系统

2007-11-18 17:47
40876
在给MM朋友做了个诛仙外挂(脚本写的 )后,再应她要求,小试一下劲舞团!

2G的劲舞一个通宵下载下来后安装,先注册一个ID吧,进游戏,CPU好卡!!!!!
打开CE准备搜索内存了,选中游戏进程,我搜!! 咔--------居然说无法打开进程!!!
预料之中,看了NP的介绍,觉得问题不大,但仔细一看,好像不是NP,  SSDT有以下几个地方被HOOK了:
NtOpenProcess              ;防止你打开游戏进程
NtReadVirtualMemory     ;防止你读游戏内存
NtWriteVirtualMemory    ;防止你写游戏内存
NtSuspendThread          ;游戏有一个线程不停的反外挂检测,防止被你停掉了!!!
NtTerminateThread        ;防止进程被意外终止后驱动不能正常退出,SSDT不能恢复!!

写驱动注入NtOpenProcess和NtReadVirtualMemory,
OK,可以打开游戏了,继续读内存试试,
怪事来了,返回EAX=1,好像成功了!但读出的东西全是0!怀疑根本没读成功!!!

这还不是最怪的,用VirtualQueryEx查询游戏内存情况,这时反外挂跳出来了!游戏终止,
VirtualQueryEx===>NtQueryVirtualMemory都没有被HOOK啊!!!是怎么被发现的??

还有用冰刃查看进程,也会被游戏侦查到,然后提示反外挂出现问题后退出,
冰刃查看进程用了比较底层的东西了,但仍会被检查到!!!
SSDT就只有以上的地方被HOOK,  NtQuerySystemInformation没有遭毒手!

在冰刃的进线程监控中得到的游戏PID和任务管理器里的一样,我openprocess和ReadVirtualMemory完全绕过了SSDT,但就是读不出东西!然后一调用VirtualQueryEx就会被游戏发现!
openprocess得到的句柄绝对是正确的!因为我可以在游戏中创建远线程!!

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
点赞7
打赏
分享
最新回复 (67)
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
c李拨 2007-11-18 17:57
2
0
实在没精力了,蓝屏N次
总结问题如下:
openprocess和ReadVirtualMemory和VirtualQueryEx我完全绕过SSDT了,
而且openprocess还可以开远线程!
但ReadVirtualMemory返回EAX=1就是读不出数据,然后一调用VirtualQueryEx就被检查到了!!怎么做到的?
SSDT表里的这些函数的前16个字节都没被修改!游戏不会变态到注入16字节以后吧????应该不会!
那问题就严重了,是怎么检查到我的行为的?
要是这些技术用到壳里,OD就没法活了,所以我发出来大家谈论一下……
雪    币: 331
活跃值: (56)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
Isaiah 10 2007-11-18 20:23
3
0
你太激动了吧

也许是inline hook
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
austinzq 2007-11-18 20:27
4
0
嗯,inline hook 哪里可能都会躲。
不然就自己实现一下 ReadVirtualMemory

==================================
NTSTATUS
NtReadVirtualMemory (
     IN HANDLE ProcessHandle,
     IN PVOID BaseAddress,
     OUT PVOID Buffer,
     IN ULONG BufferSize,
     OUT PULONG NumberOfBytesRead OPTIONAL
     )
{
    ULONG BytesCopied;
    KPROCESSOR_MODE PreviousMode;
    PEPROCESS Process;
    NTSTATUS Status;

    PAGED_CODE();

    PreviousMode = KeGetPreviousMode();
    if (PreviousMode != KernelMode) {

        Status = MiValidateUserTransfer(BaseAddress, Buffer, BufferSize);
        if (Status != STATUS_SUCCESS) {
            return Status;
        }

        if (ARGUMENT_PRESENT(NumberOfBytesRead)) {
            try {
                ProbeForWriteUlong(NumberOfBytesRead);

            } except(EXCEPTION_EXECUTE_HANDLER) {
                return GetExceptionCode();
            }
        }
    }

    BytesCopied = 0;
    Status = STATUS_SUCCESS;
    if (BufferSize != 0) {

        Status = ObReferenceObjectByHandle(ProcessHandle,
                                           PROCESS_VM_READ,
                                           PsProcessType,
                                           PreviousMode,
                                           (PVOID *)&Process,
                                           NULL);

        if (Status == STATUS_SUCCESS) {

            Status = MmCopyVirtualMemory (Process,
                                          BaseAddress,
                                          PsGetCurrentProcess(),
                                          Buffer,
                                          BufferSize,
                                          PreviousMode,
                                          &BytesCopied);

            ObDereferenceObject(Process);
        }
    }

    if (ARGUMENT_PRESENT(NumberOfBytesRead)) {
        try {
            *NumberOfBytesRead = BytesCopied;

        } except(EXCEPTION_EXECUTE_HANDLER) {
            NOTHING;
        }
    }

    return Status;
}
雪    币: 325
活跃值: (97)
能力值: ( LV13,RANK:530 )
在线值:
发帖
回帖
粉丝
foxabu 13 2007-11-18 20:45
5
0
注入进去读吧。~ 自己总是可以读自己的
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
austinzq 2007-11-18 20:55
6
0
foxabu,自己写自己应该会被校验档下吧,有啥办法吗?
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
nbw 24 2007-11-18 21:49
7
0
人家说的是让你读,读应该不会被校验掉。就算写也没有什么太大问题,只要把握好方法尊守好校验规则就没事。
雪    币: 331
活跃值: (56)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
Isaiah 10 2007-11-18 22:24
8
0
现在是full scan.原来的规则没有了

某反外挂系统。搞得是Obxxxx函数
雪    币: 796
活跃值: (370)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
Winker 8 2007-11-19 03:13
9
0
np的r0 Inline hook貌似很铞哦..用ssdt要饶过 Inline hook,没想到启动游戏之后,ssdt就没有了..把游戏断开,ssdt又出现了..不知道为什么
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
c李拨 2007-11-19 09:16
10
0
要读写内存使很容易的,可以靠游戏进程的的CR3自己读写物理内存(就是内存是否存在校验很麻烦),

我想的是能尽量和RING3的API兼容,这样就可以做个反反外挂的外挂,供CE和OD用!

今天有时间写个小工具DUMP一下正常的内核和游戏启动后的内核,看到底是不是被inline hook了
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
c李拨 2007-11-19 09:23
11
0
"inline hook 哪里可能都会躲",但是超过16字节后兼容性就很难保证!
因为不同系统的代码是不一样的!但一般前几个字节的代码基本一样!
所以我认为超过16字节的inline hook 在正统的程序里不太可能!
如果真的是那样的话,它就不用在SSDT里显摆了
雪    币: 223
活跃值: (70)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
aki 2 2007-11-19 09:35
12
0
不同系统,前几个字节也不一定一样的
雪    币: 14
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jpinglove 2007-11-19 10:06
13
0
学习了不少知识,呵呵 @!
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
austinzq 2007-11-19 10:09
14
0
把握好方法遵守好规则,nbw能具体解说一下吗?或者指点下方向?
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
austinzq 2007-11-19 10:14
15
0
你看过ReadVirtualMemory没有被hook.
有可能他去hook MmCopyVirtualMemory 也是一样效果,

另外np可不是正统程序,他是典型的无赖程序。不然也不会一覆盖它的hook他就重启。呵呵
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
c李拨 2007-11-19 10:33
16
0
哈哈,好像不是NP哦,恢复SSDT后游戏会自动退出,但不会挂掉系统
另外根据这个反外挂系统的表现来看它和游戏结合并不紧密!可能就是开了个线程不停的校验!
但要停住这个线程并不简单,就算你暴力打开了进程得到句柄,但你一枚举它的线程就会退出!

hook MmCopyVirtualMemory ,呵呵,感觉有点像是它了!!!
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
c李拨 2007-11-19 10:35
17
0
NND,一上午忙得不行了,下午非DUMP出内核看看到底做了哪些手脚!!!!
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
c李拨 2007-11-19 10:36
18
0
也许它摇身一变,这就是未来的变态壳了!
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
austinzq 2007-11-19 10:55
19
0
哈哈,不是np哦。我没玩过这个游戏,

一定要dump看看,MmCopyVirtualMemory也许hook了

也可以hook MiDoMappedCopy MiDoPoolCopy

系统那么大,不dump可能抓不全
雪    币: 6073
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
forgot 26 2007-11-19 11:15
20
0
模拟一个CopyOnWrite,嘿
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
c李拨 2007-11-19 12:32
21
0
啥意思?
你是说让反外挂钩挂的不是全局内的内存,而是一个假象??
这样其他程序就能不受其影响了????????????????????????????
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
c李拨 2007-11-19 12:42
22
0
恐怕不行哦!!!
因为程序会不停的透过驱动来校验其钩挂的有效性!!
这样就不是只是游戏进程的CR3了,时间片落到那个进程就是那个进程的CR3!!!
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
daniao 2007-11-19 13:50
23
0
呵呵,,,,好帖顶下
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
austinzq 2007-11-19 14:14
24
0
模拟一个CopyOnWrite===> forgot大侠能详细说一下吗?
雪    币: 331
活跃值: (56)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
Isaiah 10 2007-11-19 15:01
25
0
fg说的是过校验吧。和读内存没有关系。

外挂直接搞掉反外挂系统可能会得不偿失吧。
兼容工作最好。

封包算法论坛搜一下
游客
登录 | 注册 方可回帖
返回