易语言教程_易语言源码_易语言视频教程_易语言论坛

 找回密码
 点击注册

Vip新手入门区
新手学习指南  学员作品展示 Vip课程总纲  Vip绝密课程系列

Vip相关下载区
Vip模块下载   Vip模块绑定   Vip模块例子 魔鬼插件下载  魔鬼插件例子  教程工具下载

Vip论坛服务区
教程问题提问区   模块问题提问区 技术交流区   魔鬼插件建议   忘记密码找回

VIP会员办理QQ: 8643245   
【请先加好友,然后到好友列表双击联系客服,办理VIP会员。】
【基础篇】易语言辅助入门基础教程
VIP模块办理QQ: 7189694 办理正版魔鬼作坊VIP模块 【基础篇】OD与CE入门基础教程
办理【终身VIP会员】“秒杀价” 仅需 RMB278.00元… 【基础篇】零基础绝密汇编语言入门课程 (共26课已完成)…
办理VIP详情…猛击这里查看详情 【基础篇】VIP辅助入门基础教程-新手必学 已发布10课 ……
VIP教程免费试看章节…猛击下载 【第1款】制作“辅助挂”教程目录查看(共107+16_x64下更新课已完成)…
亲爱的VIP学员,请到此写下你学习的感受与发布作品截图… 【第2款】制作“任务挂”教程目录查看(共77+1_x64下更新课已完成)…
卍解吧!不用bp send类封包断点找CALL的各种通杀思路 【第3款】驱动过保护技术课程(共38课已完成)…
【绝密教程】VIP绝密教程系列---注意:随时会更新! 【第4款】VIP邪恶二叉树辅助课程 (共31+17_x64下更新课已完成)…
【精品第13款】3D射击游戏与页游透视 智辅课程 已完成17课… 【第5款】零基础易语言按键辅助教程 (30课已完成)…
【精品第14款】变态功能辅助是如何炼成的 已完成36课… 【第6款】从零开始学习封包辅助技术教程(20课已完成) …
【精品第15款】DNF商业变态辅助的修炼之路 已完成27课… 【第7款】大杀特杀分析来源与CALL吸血鬼课程 (56课已完成)
【精品第16款】中控台多线程多开自动化商业辅助课程 已完成66课… 【第8款】完全零基础网页辅助课程(40课已完成)
【全新精品第17款】检测原理与过游戏内存检测技术课程 已发布9课… 【第9款】自动登录与操控LUA技术课程 (共46+8_x64下更新课已完成)…
【全新精品第18款】手游全自动化任务脚本辅助课程 已发布25课…… 【第10款】网页辅助封包脱机进阶课程 已完成30课…
【全新精品第19款】D3D方框骨骼透视与自瞄辅助课程进阶篇 已发布34课…… 【第11款】VC++ Lua脚本辅助课程 已完成112课…
【全新精品第20款】 X64模拟器吃鸡游戏方框透视自瞄辅助课程 发布中... 【第12款】网游脱机封包智辅课程 已完成35课…
查看: 1253|回复: 0

普及X64 ssdtshadow inline HOOK

[复制链接]

14

主题

3

回帖

23

积分

编程入门

Rank: 1

魔鬼币
512
发表于 2015-10-21 14:43:17 | 显示全部楼层 |阅读模式
原因:玩保护玩到了 XINGCODE3 就他的各种检测就让我不得不重视这个问题了

各种窗口 各种X 我的工具 让我忍无可忍,就决定先HOOK了在说其他 最开始我用TA 的代码里面的 HOOK 方法 在 挂钩 NT 内核中的函数算是无往不利 在SHADOWSSDT中就蛋疼菊花紧了~~
于是 开始自己搞

我们要做的就是
得到KeServiceDescriptorTableShadow的地址 然后根据这个玩意儿得到函数地址 再inline hook!


大家要说了为什么不直接利用表HOOK 我就像说一句 太麻烦 要找一个在同一4GB 的内存空间做代理函数 还要二级跳 何必呢


HOOK 方式 使用汇编引擎得到一个不截断的大于等于14字节的可存放JMP 的长度

然后COPY 这个一片内存 复制到代理函数的开头  我用的汇编文件 给他30 个NOP 怎么都够了

然后 进入过滤函数 最后决定是跳回去执行还是这里就返回了

下面这个函数是获取 指定shadowssdt中指定index的项的函数地址


ULONG64 ssdt_GetSSDTShaDowFuncX64(ULONG serviceID){
  PKSERVICE_TABLE_DESCRIPTOR SSDTShadow;
  PULONG         W32pServiceTable;
  KAPC_STATE     ApcState;
  PULONG g_Guiprocess;
  ULONG64 funcAddress;
  SSDTShadow = (PKSERVICE_TABLE_DESCRIPTOR)KeServiceDescriptorTableShadow;
  serviceID &= 0x0FFF;
  if (!SSDTShadow)
  {
    return 0;
  }


  g_Guiprocess = Search64Process("csrss", 0);

  W32pServiceTable = SSDTShadow[1].Base;
  KeStackAttachProcess(g_Guiprocess, &ApcState);
  funcAddress = (LONGLONG)(W32pServiceTable[serviceID] >> 4)
    + (ULONGLONG)W32pServiceTable;

  KeUnstackDetachProcess(&ApcState);
  funcAddress &= 0xfffffff0ffffffff;
  return funcAddress;



}

代码略丑不要见怪
上面一些调用自己补充~~很简单~~


下面开始HOOK~、



这次目标程序函数是NtUserWindowFromPoint~
  g_NtUserWindowFromPoint = ssdt_GetSSDTShaDowFuncX64(20);这样就得到了这个函数的地址
  X64 = g_NtUserWindowFromPoint;保存一下一会儿HOOK 用
  g_NtUserWindowFromPoint = g_NtUserWindowFromPoint+ 15;//十五字节
这里一会儿代理函数跳回去 跨过15个字节用到


下面编写.asm 文件
这里这个函数的前15个字节不截断的
EXTERN  g_NtUserWindowFromPointWORD //汇编中调用C里面申明的跳转地址
.CODE
FromPoint MACRO
  BYTE   048h ,089h ,05Ch ,024h ,018h ,048h, 089h ,04Ch  ,024h ,008h ,057h ,048h ,083h ,0ECh ,060h
ENDM
proxy_NtUserWindowFromPoint PROC
  FromPoint //实现开头15字节
  JMP QWORD ptr [g_NtUserWindowFromPoint] //跳回去
proxy_NtUserWindowFromPoint ENDP


一切准备就绪我们实现的功能就是跳到代理函数再跳回去~

DbgPrint("proxy_NtUserWindowFromPoint:%p", &proxy_NtUserWindowFromPoint);
  tmpv = (UINT64)&proxy_NtUserWindowFromPoint;

  memcpy(jmp_code + 6, &tmpv, 8);
  attach(&ApcState);

  DbgPrint("X64:%p", X64);
  irql = WPOFFx64();
  RtlFillMemory((void*)X64, 15, 0x90);
  memcpy(X64, &jmp_code, 14);
  WPONx64(irql);
  deach(&ApcState);
// HOOK好了
您需要登录后才可以回帖 登录 | 点击注册

本版积分规则

魔鬼作坊|易语言教程|易语言源码|易语言论坛|易语言视频教程| 论坛导航|免责申明|手机版||网站地图
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表魔鬼作坊立场!
任何人不得以任何方式翻录、盗版或出售本站视频,一经发现我们将追究其相关责任!
我们一直在努力成为最好的编程论坛!
Copyright© 2010-2019 All Right Reserved.
快速回复 返回顶部 返回列表