如何检测自己程序的API被HOOK了
2018-07-06 · 知道合伙人软件行家
关注
展开全部
对于程序员来讲,API拦截技术是一种重要的基础技术。这项技能为编写某些工具软件提供了可能,并可以大大提高我们对第三方应用程序的控制能力。不过,目前 API 拦截的技术资料往往局限于原理方面的论述,对于如何具体地编译一个 API 拦截程序却守口如瓶。毕竟,对于程序员来讲,当初学习这项技能花费了不少心血,如果让他们无偿地奉献出来,恐怕不太现实;另外的一个因素就是竞争,多一个人学会这项技能,就多一份竞争。我在掌握这项技能的时候,就走了不少弯路,如果当初有一份详细的资料,这些不必要的弯路是完全可以避免。而这正是我编写这份技术资料的目的。 本程序是一个示例程序,用以演示如何拦截 API 调用。开始拦截 CreateProcess之后,当用户通过资源管理器运行程序时,就会弹出一个对话框提示用户运行了什么程序。停止拦截之后,用户运行程序时则不会弹出对话框。 随本程序附带的教程是未注册版本,如果您需要详细的资料,请通过网上商城进行注册。注册费用为 320 元人民币。最终价格请以网上商城的价格为准。 这就引起了我的好奇,难道这个软件用了什么牛x的新技术?居然这么值钱!那得看看,于是就把该软件下载下来研究了研究。谁知道,他所用的技术不但一点创新都没有,还有着很大的局限性。于是就有了这篇文章,还希望高手不要见笑。 这个程序的原版大家自己找,名字就叫做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的按钮,断下以后,一步一步跟踪。转载仅供参考,版权属于原作者。祝你愉快,满意请采纳哦
上海华然企业咨询
2024-10-21 广告
2024-10-21 广告
上海华然企业咨询有限公司专注于AI与数据合规咨询服务。我们的核心团队来自头部互联网企业、红圈律所和专业安全服务机构。凭借深刻的AI产品理解、上百个AI产品的合规咨询和算法备案经验,为客户提供专业的算法备案、AI安全评估、数据出境等合规服务,...
点击进入详情页
本回答由上海华然企业咨询提供
推荐于2017-12-16
展开全部
对于程序员来讲,API拦截技术是一种重要的基础技术。这项技能为编写某些工具软件提供了可能,并可以大大提高我们对第三方应用程序的控制能力。不过,目前API拦截的技术资料往往局限于原理方面的论述,对于如何具体地编译一个API拦截程序却守口如瓶。毕竟,对于程序员来讲,当初学习这项技能花费了不少心血,如果让他们无偿地奉献出来,恐怕不太现实;另外的一个因素就是竞争,多一个人学会这项技能,就多一份竞争。我在掌握这项技能的时候,就走了不少弯路,如果当初有一份详细的资料,这些不必要的弯路是完全可以避免。而这正是我编写这份技术资料的目的。本程序是一个示例程序,用以演示如何拦截API调用。开始拦截CreateProcess之后,当用户通过资源管理器运行程序时,就会弹出一个对话框提示用户运行了什么程序。停止拦截之后,用户运行程序时则不会弹出对话框。随本程序附带的教程是未注册版本,如果您需要详细的资料,请通过网上商城进行注册。注册费用为320元人民币。最终价格请以网上商城的价格为准。这就引起了我的好奇,难道这个软件用了什么牛x的新技术?居然这么值钱!那得看看,于是就把该软件下载下来研究了研究。谁知道,他所用的技术不但一点创新都没有,还有着很大的局限性。于是就有了这篇文章,还希望高手不要见笑。这个程序的原版大家自己找,名字就叫做API拦截教程。启动该程序后,按下拦截createprocess的按钮后,运行任何程序都会弹出运行程序的路径。稍微了解apihook的都了解,通常ring3下hookapi的法有三种,一是修改程序的iat表,使api调用跳向自己的函数而不是转向api入口。二是修改api入口的机器码。三是用创建远线程CreateRemoteThread的法来完成。那么这个教程究竟用了什么先进手法呢?先运行一次,按下按钮后,果然explorer弹出了程序的路径。此时,你如果使用icesword类的可以查看程序模块的程序查看explorer的模块,你就会发现explorer里面多了个InterceptDll.dll的模块,当我们卸载了这个dll后,这个拦截的效果就没有了。看来这个程序的核心不是那个启动的程序,而是这个dll。现在让我们看看这个InterceptDll.dll到底做了什么。先使用VC++的工具DUMPBIN将DLL中的导出函数表导出到一定义(.DEF)文件DUMPBINInterceptDll.dll/EXPROTS/OUT:InterceptDll.defordinalhintRVAname1000001230InstallHook2100001270UninstallHook只有两个导出函数,看名字就知道,一个是安装钩子,一个卸载钩子。我们调用看看,结果连参数都不用,只要调用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的按钮,断下以后,一步一步跟踪。转载仅供参考,版权属于原作者。祝你愉快,满意请采纳哦
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询