首页
社区
课程
招聘
[原创]基于页面异常的Hook:原理与实现
2022-6-5 09:36 11096

[原创]基于页面异常的Hook:原理与实现

2022-6-5 09:36
11096

基于异常的Hook

基于异常的hook自然也有许多方法,如DR Hook(基于调试寄存器),int3 Hook等,只要了解异常机制,很容易就能联想到这些。

  • 本篇文章中,各类Hook的学名是我个人所取,因为已有的学名我感觉不是很合适,什么硬件hook啥的,你们叫什么都可以,只要了解在本文中它们是什么意思即可

DR Hook

通过修改进程中所有线程的DR寄存器,实现Hook

  • 缺陷
    • 存在数量限制,处理较繁琐(需要接管创建线程才能使新线程也受影响)

int3 Hook

通过在被Hook处修改指令为int3,实现Hook

  • 缺陷
    • 会破坏原有指令

Page Hook

比起上述提起的异常hook,Page Hook更为隐蔽,缺陷更少

原理

修改指令处所属页面的属性为可读可写(不可执行)
使得此页面被执行时发生异常,接管此异常即可。

编写代码需注意的一些细节

  • 修改页属性,会使得整个页内的任意指令被执行时都会发生异常,需要做一下处理。

实现

  • 实际写出一个通用的框架也有些繁琐,不过我这里已经写好了一份,可以直接使用
  • https://github.com/yuyuaqwq/YPage-Hook

    使用注意事项

    • vs会接管页异常,断下时可直接放行
    • 不知道如何使用,参考下图

应用:不修改任何指令实现爆破

图片描述

结尾

  • 仅供学习交流使用,请勿用于非法用途!

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

最后于 2022-12-20 19:41 被yuyuaqwq编辑 ,原因: 完善框架,修复已知的一些问题
收藏
点赞3
打赏
分享
最新回复 (32)
雪    币: 6287
活跃值: (3812)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
大鲤鱼 2022-6-5 11:02
2
0
能用在64位进程里面吗?
雪    币: 263
活跃值: (1979)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yuyuaqwq 2022-6-5 11:51
3
0
大鲤鱼 能用在64位进程里面吗?
可以的
雪    币: 11612
活跃值: (3120)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
email123 2022-6-5 13:02
4
0
楼主把demo程序也传上来呀
雪    币: 1641
活跃值: (3601)
能力值: (RANK:15 )
在线值:
发帖
回帖
粉丝
はつゆき 2022-6-5 13:54
5
0
缺陷主要是过于影响性能,并且怕查页面属性
雪    币: 263
活跃值: (1979)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yuyuaqwq 2022-6-5 16:10
6
0
email123 楼主把demo程序也传上来呀[em_67]
可以参考一下我的截图来使用,挺简单的,就两个接口
雪    币: 263
活跃值: (1979)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yuyuaqwq 2022-6-5 16:12
7
0

...没引用到

最后于 2022-6-5 16:13 被yuyuaqwq编辑 ,原因:
雪    币: 263
活跃值: (1979)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yuyuaqwq 2022-6-5 16:14
8
0
はつゆき 缺陷主要是过于影响性能,并且怕查页面属性
是的,性能确实有些影响
雪    币: 11612
活跃值: (3120)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
email123 2022-6-5 21:09
9
0


我怎么执行不下去呢

雪    币: 258
活跃值: (1746)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
劫局丶 2022-6-5 21:24
10
0
局限性有点大,如果同一个页面存在多个hook点,或者你的函数要调用原先hook的位置,直接傻了
雪    币: 263
活跃值: (1979)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yuyuaqwq 2022-6-6 00:22
11
0
email123 我怎么执行不下去呢
不要在vs中调试,vs会接管页异常,用release编译出来测试
雪    币: 263
活跃值: (1979)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yuyuaqwq 2022-6-6 00:25
12
0
劫局丶 局限性有点大,如果同一个页面存在多个hook点,或者你的函数要调用原先hook的位置,直接傻了
同一个页面的多个hook点是可以处理的,我写的时候是有思路的,不过偷了个懒。

调用原先hook的位置会出问题,这个我不是太明白你的意思,线程执行到这里的时候走异常,调用回调,然后恢复执行,并没有什么问题吧
雪    币: 263
活跃值: (1979)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yuyuaqwq 2022-6-6 00:28
13
0
email123 我怎么执行不下去呢
另外不要删掉代码段的预处理,不然就可能将异常处理例程这些东西和被hook的函数链接到同一个页面
雪    币: 263
活跃值: (1979)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yuyuaqwq 2022-6-6 00:29
14
0
劫局丶 局限性有点大,如果同一个页面存在多个hook点,或者你的函数要调用原先hook的位置,直接傻了
我大概明白你的意思了,是指我的函数和被hook的函数链接到了同一个页面对吧?这个其实可以通过指定段来解决的
雪    币: 11612
活跃值: (3120)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
email123 2022-6-6 09:06
15
0
hook.install(func,1, hookCallBack);
你github中intall函数只有两个参数,图片中有3个,1是代表啥意义呢
雪    币: 263
活跃值: (1979)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yuyuaqwq 2022-6-6 10:43
16
0
email123 hook.install(func,1, hookCallBack); 你github中intall函数只有两个参数,图片中有3个,1是代表啥意义呢
源代码我更新过,现在1是不需要的
雪    币: 11612
活跃值: (3120)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
email123 2022-6-6 11:03
17
0

好像hook不起作用,怪哦

雪    币: 263
活跃值: (1979)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yuyuaqwq 2022-6-6 14:45
18
0
email123 好像hook不起作用,怪哦
这是C++的优化问题,将C++的优化设置为已禁用,启用内部函数选择是
雪    币: 263
活跃值: (1979)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yuyuaqwq 2022-6-6 15:45
19
0
email123 好像hook不起作用,怪哦
另外你手上那份存在一些bug,建议你重新下一份,我传github上了
雪    币: 11612
活跃值: (3120)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
email123 2022-6-6 16:28
20
0
yuyuaqwq 这是C++的优化问题,将C++的优化设置为已禁用,启用内部函数选择是
ok了
雪    币: 263
活跃值: (1979)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yuyuaqwq 2022-6-6 16:50
21
0
email123 ok了
刚刚又改了点东西,大概不会再改了23333,没什么问题了
雪    币: 11612
活跃值: (3120)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
email123 2022-6-6 17:30
22
0
yuyuaqwq 刚刚又改了点东西,大概不会再改了23333,没什么问题了
雪    币: 5089
活跃值: (4394)
能力值: ( LV5,RANK:65 )
在线值:
发帖
回帖
粉丝
gamehack 2022-6-6 18:03
23
0
感谢分享,下来看看!
雪    币: 11612
活跃值: (3120)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
email123 2022-6-6 18:30
24
0
yuyuaqwq 刚刚又改了点东西,大概不会再改了23333,没什么问题了
把后面跟新的文件覆盖昨天下载的,生产的exe文件反而运行有问题了,一闪而过,用旧的重新覆盖,再生产没有问题,请检查
雪    币: 263
活跃值: (1979)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yuyuaqwq 2022-6-6 18:43
25
0
email123 把后面跟新的文件覆盖昨天下载的,生产的exe文件反而运行有问题了,一闪而过,用旧的重新覆盖,再生产没有问题,请检查
你重新看一下文章里的那张图片,给被hook的函数添加一下预处理指令
游客
登录 | 注册 方可回帖
返回