网页
资讯
视频
图片
知道
文库
贴吧
地图
采购
进入贴吧
全吧搜索
吧内搜索
搜贴
搜人
进吧
搜标签
日
一
二
三
四
五
六
签到排名:今日本吧第
个签到,
本吧因你更精彩,明天继续来努力!
本吧签到人数:0
一键签到
可签
7
级以上的吧
50
个
一键签到
本月漏签
0
次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行
补签
。
连续签到:
天 累计签到:
天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
01月15日
漏签
0
天
易语言吧
关注:
266,545
贴子:
1,664,583
看贴
图片
吧主推荐
视频
游戏
5
回复贴,共
1
页
<返回易语言吧
>0< 加载中...
【科普向】Hook技术的简单介绍
取消只看楼主
收藏
回复
pppploi8
易之神仙
13
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
Hook拦截成果镇楼
1、这只是
科普向
,会介绍相关Hook技术及原理,但是
不会给源码
、
源码请自行百度
2、请至少有
一点
Windows编程经验,知道系统API是什么...以免看科普内容给您带来不适
3、如果有说错的地方请
务必
说出来,我会直接删楼编辑...
4、发完前不要插楼,我会删的← ←I
送TA礼物
IP属地:浙江
本楼含有高级字体
1楼
2013-10-08 22:11
回复
pppploi8
易之神仙
13
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
最近正好在看这个,感觉无聊就整理下讲解下Hook玩玩好了。只是单纯的讲解让人了解什么是Hook,不提供源码。有兴趣的自己百度← ←
首先要说下CPU权限...Intel把自家CPU指令分为四个等级,Ring0,Ring1,Ring2,Ring3,Windows操作系统只用了Ring0和Ring3两个权限。简称R0和R3好了-。-
R0权限只能让系统用,比较危险。R3权限为应用层用。大部分非驱动程序都是R3应用层的...
Hook也分为R0和R3两个层次。
R3应用层Hook又分为两种,一种是 API Hook,一种是系统钩子。
R0内核层Hook我只介绍一种,SSDT HookI
IP属地:浙江
2楼
2013-10-08 22:12
回复(7)
收起回复
pppploi8
易之神仙
13
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
系统钩子:
系统钩子实质上是系统提供的一个API函数,叫做 SetWindowsHookEx(),可以拦截指定的13种消息类型
全局钩子包含这样13种消息类型:具体参考百度百科:
http://baike.baidu.com/link?url=5-gmumJKhgDSvAZiYb018vhbevJ-kcfzkHxRPG2k8dClvJaFy473iL0FiixCA0waNeD16sosZQlWoMp9irvYoq
这个是系统提供的功能,百度百科也有详细的原理介绍。我也不太熟就不多说了...实在是用的太少
系统钩子应用:键盘鼠标监控/禁用等等I
IP属地:浙江
3楼
2013-10-08 22:14
回复(4)
收起回复
pppploi8
易之神仙
13
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
API Hook:
API Hook可以说是很简单很暴力的Hook方法。
要知道,程序调用一个API实质上调用的是那个API函数的入口地址。
也就是说,只要把API函数入口地址修改成我们自己的子程序的入口地址,那么程序就会调用API的时候调用到我们自己的子程序,从而实现Hook的效果
那么我们应该是这样做的:
寻找需要Hook的函数地址-修改地址改成自己的子程序地址-还原为原来的函数地址
举个例子,比如MessageBoxA()函数,它的地址是12345
我写了个子程序叫做MyMessageBoxA(),它的地址是56789
我们只要将MessageboxA()在内存里把存放函数地址的12345改成56789,
那么别人调用MessageBoxA()的时候就会调用到地址56789,也就是我们自己写的MyMessageBoxA()
至于我们是在自己的MyMessageBoxA()里怎么操作就随意了
是放行(Call调用原地址)
还是拦截(直接无视调用请求)
还是修改(修改参数后Call调用原地址)都可以
然而这时候我们会面临一个无法避免的问题:我们自己写的子程序在自己的进程空间内,和目标进程完全不在一起。事实上windows似乎无法跨进程访问
那么我们只能让子程序和目标进程在同一个进程空间内运行...这个就需要另外一项技术:dll注入
所以我们通常能看到封包助手,软件多开器之类的都会有个DLL...就是为了注入后Hook用的...
简单的说下API Hook的应用
封包拦截。hook send函数,这样发送封包(调用send函数)之前会先调用自己的函数,就可以获取甚至修改封包内容了
软件多开。已知道软件可以通过创建互斥体(一个api函数)来限制多开...也就是说我们只要Hook掉那个api...然后← ←你懂的
I
IP属地:浙江
4楼
2013-10-08 22:18
回复(11)
收起回复
pppploi8
易之神仙
13
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
SSDT Hook:
所谓R0级的Root,其实还有种称呼:内核钩子
是杀毒软件广泛采用的一项技术(SSDT Hook已经落后了...很多杀毒软件都能在SSDT之前就Hook到...我就不吐槽我SSDT都要靠百度改源码什么的了)
这里要介绍下SSDT。
SSDT(System Services Descriptor Table),系统服务描述符表。
这个表就是一个把ring3的Win32 API和ring0的内核API联系起来。
SSDT并不仅仅只包含一个庞大的地址索引表,它还包含着一些其它有用的信息,诸如地址索引的基地址、服务函数个数等。
知道这句话里包含着什么?我们从R3层调用的API函数实质上要通过查询SSDT获取R0层的真正地址...
这意味着如果我们可以把SSDT里的地址修改掉,就可以实现全局API Hook的效果。
不过权限问题← ←R3无驱进R0有多困难我就不吐槽了...你们可以自己试试...
驱动(Sys)加载后本身就是R0权限...所以R0层的Hook基本都会要写驱动...
具体实现方法不说了,我也不会← ←到了这个层次不会汇编真的没法玩...坑出翔....
有兴趣自己百度,我相信你们的智慧
说下SSDT Hook的具体应用吧
已知关闭进程需要用函数TerminateProcess()。
调用TerminateProcess之前需要调用OpenProcess()获取进程句柄。
那么我们如果Hook掉OpenProcess函数,检测到如果是某个指定进程就不调用OpenProcess而是去返回获取句柄失败。那么会怎样呢?
Windows任务管理器尝试关闭进程,会因为OpenProcess在SSDT被Hook,访问到你的子程序。然后你的子程序告诉了任务管理器:打开进程失败
于是任务管理器就会返回一个经典的提示:无法完成操作 拒绝访问(见1楼图片)
相信你们在不少杀毒软件都看过这个提示
I
IP属地:浙江
本楼含有高级字体
5楼
2013-10-08 22:21
回复(7)
收起回复
pppploi8
易之神仙
13
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
发完了← ←我真是无聊...
笑看沉帖...就像上次某验证码识别科普那样....
IP属地:浙江
6楼
2013-10-08 22:22
回复(6)
收起回复
登录百度账号
扫二维码下载贴吧客户端
下载贴吧APP
看高清直播、视频!
贴吧热议榜
1
老外学中文不看弱智吧等于白学
1997460
2
黑神话惊喜贺岁片隐藏彩蛋
1469111
3
如何评价OW2这波回归补偿?
1458352
4
来了中文软件就给我说中文
1179225
5
中美网友对账发现对不上
1023412
6
洛杉矶富人雇私人消防躲过山火
769000
7
海贼王1136话情报露出
736584
8
一月新番点评
525780
9
断电断网能否解决缅北电诈
459426
10
有没有发现空耳文化逐渐衰退了
355068
贴吧页面意见反馈
违规贴吧举报反馈通道
贴吧违规信息处理公示