首页
社区
课程
招聘
[原创]hook类,支持inline hook,ita hook,输出 表hook,过滤等等功能,申请加精
发表于: 2012-8-15 15:03 37445

[原创]hook类,支持inline hook,ita hook,输出 表hook,过滤等等功能,申请加精

2012-8-15 15:03
37445
申请加精

放出一个自己写的hook类,我的个人库中的一个小类,C++的,
支持inline hook
支持ita hook
支持输出表hook,
还支持虚函数hook,
甚至你还可以给代码安装一个过滤函数等等功能。在过滤函数中,你可以读取堆栈内容和寄存器内容。

绝对让你用得爽歪歪

一般的inline hook
你得计算偏移地址
你得保存原来的函数头代码
你得申请一段可执行的内存来存放jmp代码
你得自己调整栈平衡
你得定义一个原函数指针类型,你才能方便调用原函数
你得写汇编来调用C++成员函数
另外,你也许还得写一堆汇编代码,如果hook少量函数还好说,但如果你想hook整套socket函数呢,十多个呀,那汇编代码量会烦死您的

其实这只需要一个类,就可以为您解决了以上烦恼;
您只需要一个类,调用其中的方法,便可以完成各种hook
您只需要一个类,调用CallFunction就可以调用原函数,

用了这个类,您不需要关心hook的具体过程,
用了这个类,您不需要关心被hook的函数的调用方式
用了这个类,您可以方便地调用C++成员函数,就像调用普通函数一样简单,类指针作为参数传入
用了这个类,您会发现,没有汇编基础也能做hook

是不是爽歪歪呀,
再次申请加精

具体代码实现请参见附件,就不贴上来了,只贴使用的代码。

注:XLIB为我自己的个人C++库
//使用的代码
#include "stdafx.h"

XLIB::CXHookAPI m_HookMessageBox;

//新的函数
int WINAPI myMessageBox(
  HWND hWnd, 
  LPCSTR lpText, 
  LPCSTR lpCaption, 
  UINT uType
)
{
	//调用源函数,方便吧,第一个参数为原函数参数的数量
	return m_HookMessageBox.CallFunction( 4,0,"hook后",lpCaption,uType );
}

//过虑函数
VOID __cdecl filter( XLIB::CStack_ESP* pStack )
{
	printf("0x%08x\n",pStack->GetReturnAddress());
	printf(" argu2 = %s\n",pStack->GetArgument(1));
}

int _tmain(int argc, _TCHAR* argv[])
{


	LPVOID lpAddr = XLIB::CXHookAPI::GetAddressByNameA( "user32.dll","MessageBoxA");
	
	//inline hook测试
	MessageBoxA( 0,"hook前",0,0);
	m_HookMessageBox.InlineHookFunction( lpAddr,myMessageBox );

	//你在这里,还可以hook输出表,或者输入表等
	//m_HookMessageBox.HookImportTable( GetModuleHandle(0),"user32.dll","MessageBoxA",myMessageBox);

	//过滤测试
	//m_HookMessageBox.InlineHookAddress( lpAddr,filter);

	MessageBoxA( 0,"hook前",0,0);

	system("pause");
	return 0;
}



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

上传的附件:
收藏
免费 6
支持
分享
最新回复 (71)
雪    币: 57
活跃值: (43)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
下载看看。
万一火了,就卖位置。
2012-8-15 15:26
0
雪    币: 64
活跃值: (75)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
好东西,赶紧下载。谢谢分享!
2012-8-15 15:35
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
支持一下。。。。。。
2012-8-15 15:36
0
雪    币: 165
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
已下载,学习下
2012-8-15 15:37
0
雪    币: 235
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
谢谢分享, 提几个建议
1  不支持x64, 也不是线程安全的。
2  HookVirtualFunction没有VirtualProtect, 而且有导出表和导入表的hook。
没有对VirtualProtect返回值进行判断

再次谢谢分享。
2012-8-15 15:38
0
雪    币: 142
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
这介绍看的流口水呀.
谢谢分析,下载研究
2012-8-15 15:48
0
雪    币: 122
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
支持下了,顶块木头
2012-8-15 15:49
0
雪    币: 239
活跃值: (190)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
9
1.至于x64吧,目前没有打算支持,现在的x64用得不多
2.至于线程安全,这个东西,目前我没有好的处理方式 ,但是跟据我目前来使用的情况来看,基本上没有什么大的问题,如果说要有问题,估计会出在hook的过程中,有可能在hook过程中,因为hook过程中,会写入五个字节,这个过程中有能出问题,其它线程来调用这里的代码,有可能会出错,但是这种概率很小,在个人计算机上面,能忍受。我目前没有遇到一次这样的错误。
3.VirtualProtect的确没有判段,的确有两处没有判断,其它地方是判读过的
4.虚函数表,调用WriteMemory来写函数表,此函数会先修改内存属性,再写。

谢谢建议,至于 线程安全,不知道谁能提出一个好的方案
2012-8-15 16:22
0
雪    币: 2177
活跃值: (2045)
能力值: (RANK:400 )
在线值:
发帖
回帖
粉丝
10
支持下,期待更多好的作品.
2012-8-15 16:39
0
雪    币: 114
活跃值: (180)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
下载来试试,谢谢分享。
2012-8-15 17:39
0
雪    币: 107
活跃值: (326)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
有点意思....收藏了..........辛苦..
2012-8-15 18:00
0
雪    币: 19
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
支持一下,感谢lz辛苦的劳动~
2012-8-15 18:13
0
雪    币: 878
活跃值: (496)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
14
这里也有一个hook类

http://rlib.googlecode.com/svn/RLib/RLib_Detour.h
2012-8-15 18:19
0
雪    币: 878
活跃值: (496)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
15
注:RLIB为我自己的个人C++库
2012-8-15 18:20
0
雪    币: 27
活跃值: (90)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
16
先占位置,万一火了怎么办
2012-8-15 19:37
0
雪    币: 22
活跃值: (423)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
MARK
2012-8-15 19:45
0
雪    币: 1149
活跃值: (833)
能力值: ( LV13,RANK:260 )
在线值:
发帖
回帖
粉丝
18
这代码风格.....霸气...顶顶
2012-8-15 19:46
0
雪    币: 297
活跃值: (235)
能力值: ( LV4,RANK:55 )
在线值:
发帖
回帖
粉丝
19
mark 支持
2012-8-15 19:56
0
雪    币: 34
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
不错.顶有源的
2012-8-15 21:48
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
第二排站位 期待楼主后续大作
2012-8-15 22:16
0
雪    币: 1015
活跃值: (235)
能力值: ( LV12,RANK:440 )
在线值:
发帖
回帖
粉丝
22
抢位置啊,谢谢楼主
2012-8-15 22:40
0
雪    币: 128
活跃值: (27)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
23
哥这里也写了一个,http://bbs.pediy.com/showthread.php?t=149609
支持x64呢,而且我自己也认为用起来爽歪歪的
欢迎交流
2012-8-15 22:42
0
雪    币: 71
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
再看看这个

谢谢啦
2012-8-15 23:20
0
雪    币: 7115
活跃值: (639)
能力值: (RANK:1290 )
在线值:
发帖
回帖
粉丝
25
不错。支持下。
2012-8-16 02:11
0
游客
登录 | 注册 方可回帖
返回
//