hook api 反OD调试的一种思路

本文介绍了如何通过hook OD(OllyDbg)的WriteProcessMemory函数来防止OD进行调试。通过在程序启动时hook该API,判断父进程是否为OD,如果是则改变WriteProcessMemory的跳转地址,使其在被调用时不执行实际功能,从而达到反调试的效果。文中详细阐述了实现过程,包括获取父进程ID、分配内存、插入返回指令等步骤。
摘要由CSDN通过智能技术生成

hook api 反OD调试的一种思路
by蓝云

本程序在backer的耐心指导下完成,非常感谢backer的帮助!!!
关于OD怎样在程序中下断点相信大家都知道,就是用WriteProcessMemory函数在要下断点的地方写入0xCC,也就是int 3的中断,
如果我们挂钩OD的WriteProcessMemory函数不让它下断点是不是就可以让OD不能正常跟踪了呢?有了这个思路,下面就是实践了。

首先得解决几个问题:
1.我们的目标是最好在OD正常加载本程序后就已经被hook,怎么解决?

这个问题其实很简单,我们知道全局类的初始化工作在main函数之前,OD正常加载后会停在WinMain函数处,如果把hook api 代
码放在一个全局类的构造函数中就可以了,呵呵,就这么简单。


2.要得到OD的输入表中的WriteProcessMemory函数的跳转地址

呵呵,用OD来调试OD不就很容易得到了么?
用OD调试OD后我们得到WriteProcessMemory函数的跳转地址放在0x0050D450这个地方。

3.如果前面的两个问题解决,现在剩下的就是程序在运行期间要判断自己的父进程是否是OD,如果是OD那么就可以肯定被OD加载,
问题是怎么方便的取得父进程?如果用列取进程列表的方式来获的父进程,这比较麻烦,但是的确是一种思路。我们不采取这种
思路,其实在ntdll.dll中有一个函数可以得到父进程,下面用代码来说话吧:

NTDLL.DLL中有一个函数叫NtQueryInformationProcess,用它可以将指定类型的进程信息拷贝到某个缓冲。其原型如下:
NT

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值