hookapi如何检测自己程序的api被hook了

hookapi  时间:2021-07-18  阅读:()

急需一个HOOK API的例子

#include #include "APIHook.h" extern CAPIHook g_OpenProcess; // 自定义OpenProcess函数 #pragma data_seg("YCIShared") HHOOK g_hHook = NULL; DWORD dwCurrentProcessId=0; #pragma data_seg() HANDLE WINAPI Hook_OpenProcess(DWORD ess, BOOL bInheritHandle, DWORD dwProcessId) { typedef HANDLE (WINAPI *PFNTERMINATEPROCESS)(DWORD, BOOL,DWORD); if(dwProcessId != dwCurrentProcessId) { return ((PFNTERMINATEPROCESS)(PROC)g_OpenProcess)(ess,bInheritHandle,dwProcessId); } return 0; } // 挂钩OpenProcess函数 CAPIHook g_OpenProcess("kernel32.dll", "OpenProcess", (PROC)Hook_OpenProcess); //// static HMODULE ModuleFromAddress(PVOID pv) { MEMORY_BASIC_INFORMATION mbi; if(::VirtualQuery(pv, &mbi, sizeof(mbi)) != 0) { return (HMODULE)mbi.AllocationBase; } else { return NULL; } } static LRESULT WINAPI GetMsgProc(int code, WPARAM wParam, LPARAM lParam) { return ::CallNextHookEx(g_hHook, code, wParam, lParam); } BOOL WINAPI SetSysHook(BOOL bInstall, DWORD dwThreadId) { BOOL bOk; dwCurrentProcessId=dwThreadId; if(bInstall) { g_hHook = ::SetWindowsHookEx(WH_GETMESSAGE, GetMsgProc, ModuleFromAddress(GetMsgProc), 0); bOk = (g_hHook != NULL); } else { bOk = ::UnhookWindowsHookEx(g_hHook); g_hHook = NULL; } return bOk; } API 通过HOOK OpenProcess() 实现进程防杀2007-07-04 14:41在WINDOWS操作系统下,当我们无法结束或者不知道怎样结束一个程序的时候,或者是懒得去找“退出”按钮的时候,通常会按“CTRL+ALT+DEL”呼出任务管理器,找到想结束的程序,点一下“结束任务”就了事了,呵呵,虽然有点粗鲁,但大多数情况下都很有效,不是吗? 设想一下,如果有这么一种软件,它所要做的工作就是对某个使用者在某台电脑上的活动作一定的限制,而又不能被使用者通过“结束任务”这种方式轻易地解除限制,那该怎么做?无非有这么三种方法:1.屏蔽“CTRL+ALT+DEL”这个热键的组合;2.让程序不出现在任务管理器的列表之中;3.让任务管理器无法杀掉这个任务。

对于第一种方法,这样未免也太残酷了,用惯了“结束任务”这种方法的人会很不习惯的;对于第二种方法,在WINDOWS 9X下可以很轻易地使用注册服务进程的方法实现,但是对于WINDOWS NT架构的操作系统没有这个方法了,进程很难藏身,虽然仍然可以实现隐藏,但实现机制较为复杂;对于第三种方法,实现起来比较简单,我的作品:IPGate网址过滤器 就是采用的这种方式防杀的,接下来我就来介绍这种方法。

任务管理器的“结束任务”实际上就是强制终止进程,它所使用的杀手锏是一个叫做TerminateProcess()的Win32 API函数,我们来看看它的定义: BOOL TerminateProcess( HANDLE hProcess; // 将被结束进程的句柄 UINT uExitCode; // 指定进程的退出码 ); 看到这里,是不是觉得不必往下看都知道接下来要做什么:Hook TerminateProcess()函数,每次TerminateProcess()被调用的时候先判断企图结束的进程是否是我的进程,如果是的话就简单地返回一个错误码就可以了。

真的是这么简单吗?先提出一个问题,如何根据hProcess判断它是否是我的进程的句柄?答案是:在我的进程当中先获得我的进程的句柄,然后通过进程间通讯机制传递给钩子函数,与hProcess进行比较不就行了?错!因为句柄是一个进程相关的值,不同进程中得到的我的进程的句柄的值在进程间进行比较是无意义的。

怎么办?我们来考察一下我的hProcess它是如何得到的。

一个进程只有它的进程ID是独一无二的,操作系统通过进程ID来标识一个进程,当某个程序要对这个进程进行访问的话,它首先得用OpenProcess这个函数并传入要访问的进程ID来获得进程的句柄,来看看它的参数: HANDLE OpenProcess( DWORD ess, // 希望获得的访问权限 BOOL bInheritHandle, // 指明是否希望所获得的句柄可以继承 DWORD dwProcessId // 要访问的进程ID ); 脉络渐渐显现:在调用TerminateProcess()之前,必先调用OpenProcess(),而OpenProcess()的参数表中的dwProcessId是在系统范围内唯一确定的。

得出结论:要Hook的函数不是TerminateProcess()而是OpenProcess(),在每次调用OpenProcess()的时候,我们先检查dwProcessId是否为我的进程的ID(利用进程间通讯机制),如果是的话就简单地返回一个错误码就可以了,任务管理器拿不到我的进程的句柄,它如何结束我的进程呢? 至此,疑团全部揭开了。

由Hook TerminateProcess()到Hook OpenProcess()的这个过程,体现了一个逆向思维的思想。

其实我当初钻进了TerminateProcess()的死胡同里半天出也不来,但最终还是蹦出了灵感的火花,注意力转移到了OpenProcess()上面,实现了进程防杀。

喜悦之余,将这心得体会拿出来与大家分享。

参考资料: /wlw7758/blog/item/9d109322816032f1d7cae2d7.html

请问易语言Hook Api吗? 可以写Win7 64位变速吗? 变速齿轮就是Hook Api。 请

不可以 易语言是不支持编译64位程序的,这很重要 注入的核心是把dll文件放到目标进程的内存空间里运行,使其成为目标进程的一部分。

然而你并不能把32位的程序放在64位环境下运行 即便64位系统可以运行32位程序,那也是windows为之提供了32位虚拟机而已,本质运行环境依然是32 建议学学C语言,配合易语言使用还是可以的

API HOOK 与 rootkit的区别和联系?

区别很大。

API HOOK是指对系统API进行拦截,一般API HOOK的方法是修改程序的导入表,重定向要HOOK的函数到你自己的函数位置。

Rootkit 用内核驱动的方式修改SSDT表一般都是重定向 NtQuerySystemInformation 这个函数(隐藏进程是这个),然后对相关信息进行过滤从而达到隐藏文件等目的。

区别就是APIHOOK一般都是一个程序和一个或几个DLL来实现的,ROOTKIT都是用驱动实现的,而且实现原理也不一样。

作用也不一样。

当然APIHOOK也可以用来隐藏进程等信息不过效果不是很好。

要说联系就是APIHOOK和ROOTKIT的原理有点类似而已。

如何Hook 系统 API CreateFile

D3D9->CreateDevice是thiscall的函数,我一般采用jmp的方式自己hook,替换函数注意保存ecx(this指针),其他的和stdcall的函数是一样的,不知道detuor对thiscall的支持怎么样。

如何检测自己程序的api被hook了

这个程序的原版大家自己找,名字就叫做API拦截教程。

启动该程序后,按下拦截createprocess的按钮后,运行任何程序都会弹出运行程序的路径。

稍微了解apihook的都了解,通常ring3下hookapi的办法有三种,一是修改程序的iat表,使api调用跳向自己的函数而不是转向api入口。

二是修改api入口的机器码。

三是用创建远线程CreateRemoteThread的办法来完成。

那么这个教程究竟用了什么先进手法呢? 先运行一次,按下按钮后,果然explorer弹出了程序的路径。

此时,你如果使用icesword类的可以查看程序模块的程序查看explorer的模块,你就会发现explorer里面多了个InterceptDll.dll的模块,当我们卸载了这个dll后,这个拦截的效果就没有了。

看来这个程序的核心不是那个启动的程序,而是这个dll。

现在让我们看看这个InterceptDll.dll到底做了什么。

先使用VC++的工具DUMPBIN将DLL中的导出函数表导出到一定义(.DEF)文件 DUMPBIN InterceptDll.dll /EXPROTS /OUT:InterceptDll.def ordinal hint RVA name 1 0 00001230 InstallHook 2 1 00001270 UninstallHook 只有两个导出函数,看名字就知道,一个是安装钩子,一个卸载钩子。

我们调用看看 ,结果连参数都不用,只要调用InstallHook就可以把InterceptDll.dll插入explorer,用UninstallHook就可以卸载钩子。

看来我们不用分析他的exe文件了,因为有用的东西就在这个dll里。

那么如何分析这个dll这么工作的呢?直接用ida看静态代码,可以看见dll里有vivirtualalloc,setwindowshookexa等钩子函数。

但是,里面乜嘢CreateRemoteThread这个函数,那么基本可以排除了第三种方法了。

修改iat或者字节数的可能性比较大一些。

那么具体究竟是用了什么手段,又是怎么实现的呢?光静态看源代码看出来,我可没那种本事。

如果说要实时调试explorer又非常的麻烦,那么怎么办呢?其实办法很简单啦,只要自己修改一个exe文件名让他跟explorer同名就可以了。

这家伙可不管你是真李逵还是假李鬼,统统都插!我先写了个很简单的exe程序,只有一个按钮直接掉用createprocess启动notepad的小程序,然后改名为explorer。

运行后让程序拦截,果然再用icesword看模块,那个InterceptDll.dll偷偷的钻进了我写的这个程序。

好,现在动手钻进InterceptDll.dll的内部,看看他到底干了什么!我用的是olldbg,其实windbg也可以,我用od习惯了。

先附加到我自己写的这个小explorer程序,然后在createprocess下断点,按下启动notepad的按钮,断下以后,一步一步跟踪。

转载仅供参考,版权属于原作者。

祝你愉快,满意请采纳哦

Gcorelabs:美国GPU服务器,8路RTX2080Ti;2*Silver-4214/256G内存/1T SSD,1815欧/月

gcorelabs怎么样?gcorelabs是创建于2011年的俄罗斯一家IDC服务商,Gcorelabs提供优质的托管服务和VPS主机服务,Gcorelabs有一支强大的技术队伍,对主机的性能和稳定性要求非常高。Gcorelabs在 2017年收购了SkyparkCDN并提供全球CDN服务,目标是进入全球前五的网络服务商。G-Core Labs总部位于卢森堡,在莫斯科,明斯克和彼尔姆设有办事处。...

香港服务器多少钱一个月?香港云服务器最便宜价格

香港服务器多少钱一个月?香港服务器租用配置价格一个月多少,现在很多中小型企业在建站时都会租用香港服务器,租用香港服务器可以使网站访问更流畅、稳定性更好,安全性会更高等等。香港服务器的租用和其他地区的服务器租用配置元素都是一样的,那么为什么香港服务器那么受欢迎呢,香港云服务器最便宜价格多少钱一个月呢?阿里云轻量应用服务器最便宜的是1核1G峰值带宽30Mbps,24元/月,288元/年。不过我们一般选...

Vultr新用户省钱福利,最新可用优惠码/优惠券更新

如今我们无论线上还是线下选择商品的时候是不是习惯问问是不是有优惠活动,如果有的话会加速购买欲望。同样的,如果我们有准备选择Vultr商家云服务器的时候,也会问问是不是有Vultr优惠码或者优惠券这类。确实,目前Vultr商家有一些时候会有针对新注册用户赠送一定的优惠券活动。那就定期抽点时间在这篇文章中专门整理最新可用Vultr优惠码和商家促销活动。不过需要令我们老用户失望的,至少近五年我们看到Vu...

hookapi为你推荐
office软件包我下载了一个office软件包,然后在百度文库里下载东西,可是打开后全是乱码,怎么回事啊大蟒蛇平台什么是NG游戏,什么是NG游戏平台,什么是PY平台,PY平台的作用?要怎样破解手机?我的手机是水货N85?怎样恢复系统手机刷机后怎么恢复原来的系统发博客怎样在博客上发文章?goalgoalgoal哆啦小子和哆啦A梦是一个型号的吗?人脸检测综述人脸检测技术的来源催收软件哪个好靠谱的催收方式除了正规要账公司,还有哪些渠道的?智能公共广播系统四川成都智能公共广播云图好看吗电影云图好看吗?oa源码小猪cms微信oa源码好用不?
虚拟主机试用30天 欧洲免费vps 中国万网域名 电信测速器 zpanel hawkhost namecheap 国外bt 名片模板psd 申请个人网页 777te 刀片服务器是什么 gspeed 亚马逊香港官网 酷番云 支付宝扫码领红包 免费邮件服务器 便宜空间 什么是web服务器 攻击服务器 更多