能力值:
( LV9,RANK:140 )
|
-
-
2 楼
看了下,没怎么看懂。感觉是很好,很强大!呵呵!
GetOpCodeSize()
这个函数很有创意呀。以前也想写一个,根本不知道如何下手```呵呵
|
能力值:
( LV9,RANK:250 )
|
-
-
3 楼
支持更新,源码备用。
|
能力值:
( LV9,RANK:250 )
|
-
-
4 楼
支持更新,源码备用。
|
能力值:
( LV7,RANK:100 )
|
-
-
5 楼
顶...可以XXOO了.哈哈
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
各位朋友好!这东东怎么用的啊?谁能分享一下示例程序,老菜将万分感激。
|
能力值:
( LV9,RANK:210 )
|
-
-
7 楼
什么时间出delphi版哦
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
下来看看啦....
|
能力值:
(RANK:1130 )
|
-
-
9 楼
HookApi.cpp里面有个例子
|
能力值:
( LV9,RANK:250 )
|
-
-
10 楼
西裤写有delphi版
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
學習研究~~~~
|
能力值:
( LV6,RANK:90 )
|
-
-
12 楼
这个好,谢谢分享.
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
我也看到有个WriteProcessMemory的例子,可用VC6编译通不过,有大量错误,我想应该使用方法不对,请高手指点谢谢。
|
能力值:
( LV7,RANK:100 )
|
-
-
14 楼
fengyue很好很强大的说
|
能力值:
(RANK:1130 )
|
-
-
15 楼
附件里面有个hook的例子,可以看一看
前面也有函数定义的方法
还有问题,可以把你代码发上来,大家帮忙找找错误
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
在哪呀?那是什么
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
请问你这个hook如何卸载?
能详细解释一下你的例子里的main函数里面的几条语句的含义嘛?
另外那两个stub的含义能一并解释一下嘛?
|
能力值:
(RANK:1130 )
|
-
-
18 楼
1,不能卸载,不考虑那个功能,因为可以重入(目前不是线程安全的,以后改进)
2,
//Hook WriteProcessMemory,在调用完WriteProcessMemory时候执行我们的函数My_WriteProcessMemory
SetOnAfter("Kernel32.dll","WriteProcessMemory",My_WriteProcessMemory);
//hook ReadProcessMemory,在调用ReadProcessMemory前执行我们的函数My_WriteProcessMemory_1
SetOnBefore("Kernel32.dll","ReadProcessMemory",My_WriteProcessMemory_1);
//下面是正常调用API
WriteProcessMemory(GetCurrentProcess(), (LPVOID)0x40108f, JMPGate, sizeof(JMPGate), (DWORD*)RetSize);
MessageBoxA(NULL,"Safe Here!!!","Very Good!!",NULL);
|
能力值:
(RANK:1060 )
|
-
-
19 楼
还是用z0mbie的hooklib吧,强大多了
|
能力值:
( LV2,RANK:10 )
|
-
-
20 楼
1.不能卸载的话,那我退出程序,不是HOOK的函数就要出错了嘛?
2.forgot组长,z0mbie的hooklib在何处下载?
|
能力值:
(RANK:1060 )
|
-
-
21 楼
29A#8 or 29A#7
|
能力值:
(RANK:1130 )
|
-
-
22 楼
程序都退出了,还要Hook干嘛呢?
个人认为,一般来说卸载都是为了反检测,我这个HookLib没有反检测功能,自己随便用用的而已,不要见笑
|
能力值:
( LV5,RANK:60 )
|
-
-
23 楼
谢谢了
很好,很强大~
|
能力值:
( LV2,RANK:10 )
|
-
-
24 楼
我的意思是,假设一个软件A.exe调用了createfile这个函数,我想拦截这个程序对此函数的调用,
那么按照你的写法,我写了一个B.exeexe,里面的主要内容是下面:
SetOnAfter("Kernel32.dll","CreateFileA",My_CreateFileA_After);
SetOnBefore("Kernel32.dll","CreateFileA",My_CreateFileA_Before);
DWORD __stdcall My_CreateFileA_After(........)
{
记录参数到文件C.txt
}
DWORD __stdcall My_CreateFileA_Before(........)
{
记录参数到文件C.txt
}
运行这个B.exe后,那么系统里所有调用CreateFileA函数的进程或者模块(不仅仅是A.exe)都会被拦截,都会执行我们定义的那2个函数,对吧?
我的问题是:
1.B.exe运行起来后,任何系统中调用createfile的时候都会被记录到c.txt中,即使B.exe退出,也不能终止这种情况,是这样的嘛?
2.这个时候我再重新运行B.exe.会不会再次重复增加我们的代码在上次被HOOK了函数上?
另外,你的代码有两个警告,不知道有问题没?
D:\work\HOOKAPI\HOOKAPI.cpp(343) : warning C4102: 'check_modrm' : unreferenced label
D:\work\HOOKAPI\HOOKAPI.cpp(292) : warning C4101: 'tempopcode' : unreferenced local variable
|
能力值:
( LV2,RANK:10 )
|
-
-
25 楼
经过测试,发现几个问题.
1.不能针对同一个函数调用前后HOOK,譬如
int main()
{
if(!SetOnBefore("Kernel3.dll","DeviceIoControl",DeviceIoControl_Before))
::MessageBox(0,"Before","error",0);;
if(!SetOnAfter("Kernel32.dll","DeviceIoControl",DeviceIoControl_After))
::MessageBox(0,"After","error",0);
DeviceIoControl(0,0,0,0,0,0,0,0);
return 0;
}
这样会出错,具体看附件的程序,用OD跟踪一下就明白,不知道是否有前后顺序没? 2.HOOK的函数只对本exe的进程空间有效,可以测试的是,开两个OD,一个跟踪这个exe,直到确认已经成功更改要HOOK的函数,然后此时打开另外一个OD,随便调试一个别的程序,会发觉前面HOOK的函数根本没有变化....
3.关于多次调用SetOnBefore或者SetOnAfter函数,此情况跟第一种情况类似,会跑飞代码~~
int main()
{
if(!SetOnBefore("Kernel3.dll","DeviceIoControl",DeviceIoControl_Before))
::MessageBox(0,"Before","error",0);;
if(!SetOnBefore("Kernel3.dll","DeviceIoControl",DeviceIoControl_Before))
::MessageBox(0,"Before","error",0);;
DeviceIoControl(0,0,0,0,0,0,0,0);
return 0;
} 以上情况不知道是否跟我机器有关?
我的系统是XPsp2中文版,装有Returnil Virtual System Premium Edition Beta V2.1.0.5829,并且系统(C盘)处于保护模式.
此外没有安装任何别的主动防疫或者杀毒软件.
请作者多多改进~~
|
|
|