能力值:
( LV2,RANK:10 )
|
-
-
2 楼
实在没精力了,蓝屏N次
总结问题如下:
openprocess和ReadVirtualMemory和VirtualQueryEx我完全绕过SSDT了,
而且openprocess还可以开远线程!
但ReadVirtualMemory返回EAX=1就是读不出数据,然后一调用VirtualQueryEx就被检查到了!!怎么做到的?
SSDT表里的这些函数的前16个字节都没被修改!游戏不会变态到注入16字节以后吧????应该不会!
那问题就严重了,是怎么检查到我的行为的?
要是这些技术用到壳里,OD就没法活了,所以我发出来大家谈论一下……
|
能力值:
( LV13,RANK:410 )
|
-
-
3 楼
你太激动了吧
也许是inline hook
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
嗯,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;
}
|
能力值:
( LV13,RANK:530 )
|
-
-
5 楼
注入进去读吧。~ 自己总是可以读自己的
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
foxabu,自己写自己应该会被校验档下吧,有啥办法吗?
|
能力值:
( LV13,RANK:970 )
|
-
-
7 楼
人家说的是让你读,读应该不会被校验掉。就算写也没有什么太大问题,只要把握好方法尊守好校验规则就没事。
|
能力值:
( LV13,RANK:410 )
|
-
-
8 楼
现在是full scan.原来的规则没有了
某反外挂系统。搞得是Obxxxx函数
|
能力值:
( LV9,RANK:380 )
|
-
-
9 楼
np的r0 Inline hook貌似很铞哦..用ssdt要饶过 Inline hook,没想到启动游戏之后,ssdt就没有了..把游戏断开,ssdt又出现了..不知道为什么
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
要读写内存使很容易的,可以靠游戏进程的的CR3自己读写物理内存(就是内存是否存在校验很麻烦),
我想的是能尽量和RING3的API兼容,这样就可以做个反反外挂的外挂,供CE和OD用!
今天有时间写个小工具DUMP一下正常的内核和游戏启动后的内核,看到底是不是被inline hook了
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
"inline hook 哪里可能都会躲",但是超过16字节后兼容性就很难保证!
因为不同系统的代码是不一样的!但一般前几个字节的代码基本一样!
所以我认为超过16字节的inline hook 在正统的程序里不太可能!
如果真的是那样的话,它就不用在SSDT里显摆了
|
能力值:
( LV6,RANK:90 )
|
-
-
12 楼
不同系统,前几个字节也不一定一样的
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
学习了不少知识,呵呵 @!
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
把握好方法遵守好规则,nbw能具体解说一下吗?或者指点下方向?
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
你看过ReadVirtualMemory没有被hook.
有可能他去hook MmCopyVirtualMemory 也是一样效果,
另外np可不是正统程序,他是典型的无赖程序。不然也不会一覆盖它的hook他就重启。呵呵
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
哈哈,好像不是NP哦,恢复SSDT后游戏会自动退出,但不会挂掉系统
另外根据这个反外挂系统的表现来看它和游戏结合并不紧密!可能就是开了个线程不停的校验!
但要停住这个线程并不简单,就算你暴力打开了进程得到句柄,但你一枚举它的线程就会退出!
hook MmCopyVirtualMemory ,呵呵,感觉有点像是它了!!!
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
NND,一上午忙得不行了,下午非DUMP出内核看看到底做了哪些手脚!!!!
|
能力值:
( LV2,RANK:10 )
|
-
-
18 楼
也许它摇身一变,这就是未来的变态壳了!
|
能力值:
( LV2,RANK:10 )
|
-
-
19 楼
哈哈,不是np哦。我没玩过这个游戏,
一定要dump看看,MmCopyVirtualMemory也许hook了
也可以hook MiDoMappedCopy MiDoPoolCopy
系统那么大,不dump可能抓不全
|
能力值:
(RANK:1060 )
|
-
-
20 楼
模拟一个CopyOnWrite,嘿
|
能力值:
( LV2,RANK:10 )
|
-
-
21 楼
啥意思?
你是说让反外挂钩挂的不是全局内的内存,而是一个假象??
这样其他程序就能不受其影响了????????????????????????????
|
能力值:
( LV2,RANK:10 )
|
-
-
22 楼
恐怕不行哦!!!
因为程序会不停的透过驱动来校验其钩挂的有效性!!
这样就不是只是游戏进程的CR3了,时间片落到那个进程就是那个进程的CR3!!!
|
能力值:
( LV2,RANK:10 )
|
-
-
23 楼
呵呵,,,,好帖顶下
|
能力值:
( LV2,RANK:10 )
|
-
-
24 楼
模拟一个CopyOnWrite===> forgot大侠能详细说一下吗?
|
能力值:
( LV13,RANK:410 )
|
-
-
25 楼
fg说的是过校验吧。和读内存没有关系。
外挂直接搞掉反外挂系统可能会得不偿失吧。
兼容工作最好。
封包算法论坛搜一下
|
|
|