天堂W游戏内核驱动保护简单分析(四)

防止读取文件特征


Object钩子    


    ParseProcedure -> nt!IopParseFile (文件访问函数 , 打开文件都要经过这个函数 )

代码crc校验


int3断点检测


    代码校验都要获取进程的基址和大小, 或者直接通过某个函数的地址,这种只能校验单个函数
    1. ZwQueryInformationProcess(ProcessBaseInformation)
    2. Peb
    3. VadTree
    4. GetMdouleHandle(NULL)
    5. 直接对crc线程进行挂起
    6. 使用Dr寄存器来下断点(也就是硬件断点)

硬件断点


    Dr0, Dr1, Dr2, Dr3寄存器清清零,
    1. 当游戏调用GetThreadContent来获取Dr寄存器的值时返回0,以及当游戏保护调用SetThreadContent()来清服务异常Dr寄存器时直接返回


dll注入


0: 内核下PsSetLoadImageNotifyRoutine() 或者 PsSetLoadImageNotifyRoutine()
    和
    Apc或者NtCreateThread()或者NtResumeThread()来注入(启动进程就注入, 时机早)
1:输入法注入(利用搜狗,百度拼音等等方法)
2:全局钩子注入(SetWindowsHookEx)
3:DLL挟持(LPK,usp10)
4:CreateRemoteThread远程线程注入()
5:应用层apc注入,关键api:QueueUserAPC

那么在驱动层下有哪些注入呢?

1:驱动hook NtCreateThread挟持注入(修改eip)
2:APC注入(本节课要讲解的)
3:OEP感染注入(这是我们下节课要讲解的)

----- 获取隐藏进程 --------
1. 内核下使用PsSetCreateProcessNotifyRoutine()函数获取进程列表
2. 暴力搜索内存空间
3. Hook NtQuerySystemInformation

----- ring3下hook -----
1. veh无㾗hook, 但这种方式无法调用原函数
2. minhook
3. Dobby


其他


1. 应用层重载 Immemset(NewDll, 0, sizeof(NewDll))


反多开

1. 内核对象反多开
    Mutex(内核引用为2的, CreateMutex, 对象本身与进程相关,名字随机,没有空格,且看不出任何意义), 
        解决办法是hook函数不调用真正的创建,或者拦截并修改互斥量名称为[每次随机]即可
        使用NtQueryObject查询内核对象并关闭
    Semaphore(CreateSemaphore),
    Event(ZwCreateEvent) 配合信号量可以控制多开数量, 用的比较多
2. 文件独占反多开
    CreateFile, hook该函数修改第二个打开文件的参数为可读可写
3. 进程反多开
4. 窗口反多开
    NTUserFindWindowEx()
5. Port(ZwCreatePort)
6. CreateFileMappingA() 和 GetLastError() = 0xB7(183) 共享内存


NP 反双机调试目前分析


1. 只要启动引导项勾选了调试,则np就会自动退出
2. 那就直接hook  NtQueryInformationThread、NtQuerySystemInformation、NtQueryObject这三个函数可以检测到系统调试信息
    参考: https://www.361shipin.com/blog/1535384246925918208

3. 也有可能是串口检测(com),或者是引导项检测

4. NtQuerySystemInformation
    这个原理就是查询 SystemKernelDebuggerInformation 的信息
    这个API函数检测当前系统是否正在调试状态,比如双机调试
    参考: https://bbs.pediy.com/thread-262200.htm

5. NTQueryObject
    系统中的某个调试器调试进程时,会创建1个调试对象类型的内核对象。检测该对象是否存在即可判断是否有进程正在被调试。

  • 21
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值