首页
社区
课程
招聘
[原创]利用VEH之给游戏添加检测(二)
发表于: 2018-1-1 18:28 12308

[原创]利用VEH之给游戏添加检测(二)

2018-1-1 18:28
12308

https://bbs.pediy.com/thread-190668.htm

这里有资料   @ 机械瞑衍 牛讲的很清晰.透彻.

重新挂上INT3还原HOOK



TF(bit 8) [Trap flag]   将该位设置为1以允许单步调试模式,清零则禁用该模式。



这是一张调用种物CALL结果检测到堆栈错误的信息。

二 .设计思路及原理分析

  • 初认堆栈检测 (CallStack 检测)
  • 初认堆栈检测 (CallStack 检测)
众所周知,通常在进入一个CALL (函数) 时候会把下一条指令的地址压入 esp 寄存器中,后面随着各种指令的执行 esp 也会发生变化,例如(pushad,popad,push,pop )等指令堆栈都会发生改变,而 esp 中存放着栈顶的的地址当然也会跟着变化,知道遇到 retn 指令时候 [esp] 
的值为返回地址,这就是我们常说的堆栈平衡。  (以上内容纯属个人理解,如有错误还请多多指正。)

可以看到上图 [esp+0x24] 为第一层返回地址 [esp+0x48] 为第二层返回地址,当我们调用功能 CALL 的时候,这些返回地址肯定会发生变化。

  • VEH实现简单的HOOK
  • VEH实现简单的HOOK
  • 判断是否非法调用
  • 判断是否非法调用
这个很简单,无非就是拿现在的返回地址跟原始的返回地址做比较就好。
这个很简单,无非就是拿现在的返回地址跟原始的返回地址做比较就好。
这个很简单,无非就是拿现在的返回地址跟原始的返回地址做比较就好。

三 .收集数据和实现

  1. 寻找合适的HOOK位置
  1. 寻找合适的HOOK位置



  1. 实现VEH HOOK
  1. 实现VEH HOOK



  1. 对比原返回地址
  1. 对比原返回地址



  1. 重新挂上INT3还原HOOK


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2019-2-1 15:18 被admin编辑 ,原因:
上传的附件:
收藏
免费 1
支持
分享
最新回复 (13)
雪    币: 12848
活跃值: (9147)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
2
检测调用是否合法直接用RtlWalkfFrameChain就行了
2018-1-1 22:11
0
雪    币: 181
活跃值: (621)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
检测调用是否合法直接用RtlGetCallersAddress就行了 
2018-1-2 10:18
0
雪    币: 775
活跃值: (2292)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
4
感谢各位分享,学到老活到老。
2018-1-2 17:27
0
雪    币: 457
活跃值: (218)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
5
竟然提到了我  混个脸熟吧    哈哈~
2018-1-3 18:15
0
雪    币: 9
活跃值: (175)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
6
学习了
2018-1-4 12:44
0
雪    币: 144
活跃值: (38)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
2018-1-4 19:04
0
雪    币: 775
活跃值: (2292)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
8
机械瞑衍 竟然提到了我 混个脸熟吧 哈哈~
还请多多捧场,有空多多指教
2018-1-6 19:24
0
雪    币: 6818
活跃值: (153)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
不错!!
2018-1-6 21:49
0
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
楼主用的什么工具和语言  大家介绍下  科普下小白一个
2018-1-7 22:33
0
雪    币: 3741
活跃值: (1797)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
很多游戏都有CALL调用检测,  一般都是自己构造返回地址  自己的函数      PUSH  他自己的代码段的合法POP  RET这些地址  然后JMP  到CALL  函数头  堆栈平衡下
这样绕过检测
2018-1-12 18:26
0
雪    币: 2630
活跃值: (5078)
能力值: ( LV9,RANK:225 )
在线值:
发帖
回帖
粉丝
12
异常数据结构里面有个dword数组。里面前2个元素一个指示是读取异常还是写入异常,一个指示异常地址(在401000向22000写入异常,则该元素为后者)
修改一个页的属性,需要做边界检查,也就是常说的内存断点长度问题。故实际上内存断点效率非常之低下。
2018-2-24 16:58
0
雪    币: 238
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
13
我想知道你下CC异常VEH接管之后修复CC然后EIP不需要-1重新执行正常指令吗
2018-8-5 12:12
0
雪    币: 11716
活跃值: (133)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
#寻宝大战#祝看雪19岁快乐!
2019-1-11 20:16
0
游客
登录 | 注册 方可回帖
返回
//