首页
社区
课程
招聘
[原创]一个hooklib源码 for ring0 ring3 x86 amd64
发表于: 2012-4-19 20:31 21406

[原创]一个hooklib源码 for ring0 ring3 x86 amd64

2012-4-19 20:31
21406

自己折腾的一个hooklib,使用distorm解析指令
支持 ring0 & ring3 以及 x86 & amd64
先贴点代码体现以下这个lib的使用特点

先看,这部分是经典的inline hook的代码,这风格觉得算经典吧

//去msdn或xxx.h抄一个来定义原型
typedef VOID (WINAPI *T_OutputDebugStringW)( LPCWSTR lpOutputString );
//申明一个变量直接调用原函数
T_OutputDebugStringW old_OutputDebugStringW;

//申明自己的handler
int WINAPI my_OutputDebugStringW( LPCWSTR lpOutputString )
{
	//调用原函数功能
	return old_OutputDebugStringW(lpOutputString);
}

//安装hook
old_OutputDebugStringW = OutputDebugStringW;
install_hook(&old_OutputDebugStringW, my_OutputDebugStringW);

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 6
支持
分享
最新回复 (18)
雪    币: 142
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
sf,这个感脚好流逼啊
2012-4-19 23:45
0
雪    币: 309
活跃值: (88)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
这年头板凳没人占,我来占了,详细,感谢,收藏了
2012-4-19 23:57
0
雪    币: 66
活跃值: (1880)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
多谢, 我也写了一个, 但是64位的跳转方法我这里一直有问题没有处理掉。
2012-4-20 08:50
0
雪    币: 243
活跃值: (209)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
不错,有用,收藏了。64位将是主战场
2012-4-20 09:11
0
雪    币: 128
活跃值: (27)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
6
两个月前的帖子居然被通知变精华了,
实在是非常的鼓舞啊~~
终于射&精了
2012-6-9 23:18
0
雪    币: 773
活跃值: (442)
能力值: ( LV9,RANK:200 )
在线值:
发帖
回帖
粉丝
7
2012-6-10 10:20
0
雪    币: 73
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
for ring0 ring3 x86 amd64,这一句吓了我一跳。
2012-6-12 18:53
0
雪    币: 564
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
正求个通用的hook类库呢、
2012-9-20 01:31
0
雪    币: 51
活跃值: (61)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
10
sounds great
2012-9-20 09:00
0
雪    币: 216
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
不错,支持。。。。。
2012-11-28 09:07
0
雪    币: 347
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
感谢分享~
看看
2012-11-28 09:25
0
雪    币: 199
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
这么好的东西难得找到。
2013-3-16 11:25
0
雪    币: 213
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
正准备学习HOOK技术,谢谢。
2013-3-21 19:56
0
雪    币: 357
活跃值: (3443)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
16
不错.....
2013-3-21 20:41
0
雪    币: 215
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
看懂是啥的顺便留个言
2013-3-22 15:49
0
雪    币: 4560
活跃值: (1002)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
18
好东西正需要了,收藏了
2013-11-4 02:03
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
19
Hook库在x64下备份指令做解析的时候有问题,导致解析x64下的JMP时候必然出错导致挂掉:

比如原始指令形如:
notepad!WinMainCRTStartup:
00000000`ff233570 4883ec28 sub rsp,28h
00000000`ff233574 e807feffff call notepad!_security_init_cookie (00000000`ff233380)
00000000`ff233579 4883c428 add rsp,28h
00000000`ff23357d eb11 jmp notepad!DisplayNonGenuineDlgWorker+0x14c (00000000`ff233590)


使用楼主的HOOK库后,中转跳板的指令是错误的:

sudami64!Trampoline_myfunc:
00000001`80001e80 4883ec28 sub rsp,28h
00000001`80001e84ff1543000000 call qword ptr [sudami64!Trampoline_myfunc+0x4d (00000001`80001ecd)]
// 这个跳转解析错误,一执行就会崩溃

00000001`80001e8a 4883c428 add rsp,28h
00000001`80001e8e eb11 jmp sudami64!Trampoline_myfunc+0x21 (00000001`80001ea1)
// 这个短跳楼主干脆没有解析,于是跳错了


看来对x64的支持不行啊。
2013-11-22 18:33
0
雪    币: 11
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
x64下确实不行。
2014-3-16 17:35
0
游客
登录 | 注册 方可回帖
返回
//