龙马谷

 找回密码
 立即注册

QQ登录

只需一步,快速开始

龙马谷VIP会员办理客服QQ:82926983(如果临时会话没有收到回复,请先加QQ好友再发。)
1 [已完结] GG修改器新手入门与实战教程 31课 2 [已完结] GG修改器美化修改教程 6课 3 [已完结] GG修改器Lua脚本新手入门教程 12课
4 [已完结] 触动精灵脚本新手入门必学教程 22课 5 [已完结] 手游自动化脚本入门实战教程 9课 6 [已完结] C++射击游戏方框骨骼透视与自瞄教程 27课
7 [已完结] C++零基础UE4逆向开发FPS透视自瞄教程 29课 8 [已完结] C++零基础大漠模拟器手游自动化辅助教程 22课 9 [已完结] C++零基础开发DXF内存脚本辅助教程 32课
以下是天马阁VIP教程,本站与天马阁合作,赞助VIP可以获得天马阁对应VIP会员,名额有限! 点击进入天马阁论坛
1 [已完结] x64CE与x64dbg入门基础教程 7课 2 [已完结] x64汇编语言基础教程 16课 3 [已完结] x64辅助入门基础教程 9课
4 [已完结] C++x64内存辅助实战技术教程 149课 5 [已完结] C++x64内存检测与过检测技术教程 10课 6 [已完结] C+x64二叉树分析遍历与LUA自动登陆教程 19课
7 [已完结] C++BT功能原理与x64实战教程 29课 8 [已完结] C+FPS框透视与自瞄x64实现原理及防护思路
查看: 7530|回复: 0

KiFastCallEntry过游戏驱动保护新玩法

[复制链接]

12

主题

0

回帖

15

积分

编程入门

Rank: 1

龙马币
32

内核重载+Hook KiFastCallEntry已经烂大街,白菜价格的技术了,所以我们要创新,我们要有新玩法:内核重载新玩法---借尸还魂。什么叫借尸还魂?基本的解释就是:迷信传说人死后灵魂还会借别人的尸体复活。但是用在计算机里面,顾名思义就是借助别人的东西来实现自己的目的。也就是借尸还魂的基本理论:借助360的HookPort,我们再Hook 360这个函数,即可绕过一些游戏保护对此函数的检测。那我们现在先来看360对KiFastCallEntry的Hook:

  1. 80542600 8b3f            mov     edi,dword ptr [edi]
  2. 80542602 8b1c87          mov     ebx,dword ptr [edi+eax*4]
  3. 80542605 e9d6945109      jmp     89a5bae0

  4. lkd> u 89a5bae0
  5. 89a5bae0 e91f5e8527      jmp     b12b1904
  6. 89a5bae5 0000            add     byte ptr [eax],al
  7. 89a5bae7 0002            add     byte ptr [edx],al
  8. 89a5bae9 0003            add     byte ptr [ebx],al

  9. lkd> u b12b1904 l 20
  10. b12b1904 8bff            mov     edi,edi
  11. b12b1906 9c              pushfd
  12. b12b1907 60              pushad
  13. b12b1908 57              push    edi
  14. b12b1909 53              push    ebx
  15. b12b190a 50              push    eax
  16. b12b190b e860ffffff      call    b12b1870
  17. b12b1910 89442410        mov     dword ptr [esp+10h],eax
  18. b12b1914 61              popad
  19. b12b1915 9d              popfd
  20. b12b1916 2be1            sub     esp,ecx
  21. b12b1918 c1e902          shr     ecx,2
  22. b12b191b ff351c432bb1    push    dword ptr ds:[0B12B431Ch]
  23. b12b1921 c3              ret
复制代码


我们怎么知道360这个Hook函数的参数,以及返回地址是什么含义呢?
  1. b12b1908 57              push    edi
  2. b12b1909 53              push    ebx
  3. b12b190a 50              push    eax
  4. b12b190b e860ffffff      call    b12b1870
复制代码


自己hook b12b1870,打印出來這些參數,就懂了。。

帖子的核心:借助360的HookPort,然后我们在Hook 360的地址,这样一来,游戏保护就会认为KiFastCallEntry是被360的Hook着,但是实际上,我们已经接管了360的HookPort

最後放馬:

  1. NTSTATUS NewNtOpenProcess(
  2. PHANDLE ProcessHandle,
  3. ACCESS_MASK DesiredAccess,
  4. POBJECT_ATTRIBUTES ObjectAttributes,
  5. PCLIENT_ID ClientId
  6. )
  7. {
  8. if (KeGetCurrentIrql() == PASSIVE_LEVEL){
  9. KdPrint(("NtOpenProcess() by %s\r\n",PsGetProcessImageFileName(PsGetCurrentProcess())));
  10. }
  11. //这里直接调用我们的重载函数,这样一来就可以直接绕过游戏保护对NtOpenProcess此函数的Hook
  12. //我们可以做个判断,如果是0D,就要走重载内核的函数
  13. //如果是游戏调用,就要走原始函数地址
  14. return ReloadNtOpenProcess(ProcessHandle,DesiredAccess,ObjectAttributes,ClientId);
  15. }
  16. //这个是360的过滤函数
  17. //参数:1ssdt服务号,2当前调用的ssdt函数地址,3KiServiceTable
  18. //返回值:假设如果调用的是NtOpenProcess,那么返回的是360自己的过滤函数,如果调用的是其他360不关心的函数,则直接返回
  19. PVOID NewHookPortFunction(__in ULONG ulong_ssdt_number,
  20. __in PVOID pvoid_ssdt_function_address,
  21. __in PVOID KiServiceTable
  22. )
  23. {
  24. PVOID pvoid_360_call_ret;

  25. //首先调用360这个原始函数
  26. HookPortFunction = (HOOKPORTFUNCTION)HookPortFunctionHookZone;
  27. pvoid_360_call_ret = HookPortFunction(ulong_ssdt_number,pvoid_ssdt_function_address,KiServiceTable);

  28. //for test
  29. if (ulong_ssdt_number == 122)
  30. {
  31. KdPrint(("pvoid_360_call_ret:%08X %08X\r\n",pvoid_360_call_ret,pvoid_ssdt_function_address));

  32. //直接返回我们自己的过滤函数地址,这样就达到了借尸还魂的目的
  33. return NewNtOpenProcess;
  34. }
  35. return pvoid_360_call_ret;
  36. }
复制代码

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

本版积分规则

龙马谷| C/C++辅助教程| 安卓逆向安全| 论坛导航| 免责申明|Archiver|
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表龙马谷立场!
任何人不得以任何方式翻录、盗版或出售本站视频,一经发现我们将追究其相关责任!
我们一直在努力成为最好的编程论坛!
Copyright© 2018-2021 All Right Reserved.
在线客服
快速回复 返回顶部 返回列表