关于API Hook的又一个新想法
:
2008/08/16 .. by 风の雪
2008/08/16 .. by 风の雪
在之前的日志中,我提到过,我发现每个API的代码之间,都有5个字接的空白。所以,我忽然想到,我可以利用这5个字节进行新的API Hook,进而实现API被Hook以后还能执行原来的指令。
其实,我觉得很多时候Hook一个API后,我们就没有必要去执行原来的代码了,因为我们要用新的过程来取代原来的API。可是,有的时候我们需要的仅仅是监视一下这个API的执行,或者只修改一下它的返回值而已,不希望它的过程被覆盖掉。这样,就产生了我这样的一个想法。
这个方法,原理就是在API过程的最后,函数返回之前,跳转到我构造的指令中。在我的指令里,先保存了一下API的返回值,以便我们可以自己选择返回API原来的值或者自己定制的值。然后把传递进来的参数重新压栈,接着再用call指令调用我们自己的过程,然后返回。
只是这个方法,有一个缺点,就是每个API的后面必须要有5字节的空白和只有一处返回指令。
其实,我觉得很多时候Hook一个API后,我们就没有必要去执行原来的代码了,因为我们要用新的过程来取代原来的API。可是,有的时候我们需要的仅仅是监视一下这个API的执行,或者只修改一下它的返回值而已,不希望它的过程被覆盖掉。这样,就产生了我这样的一个想法。
这个方法,原理就是在API过程的最后,函数返回之前,跳转到我构造的指令中。在我的指令里,先保存了一下API的返回值,以便我们可以自己选择返回API原来的值或者自己定制的值。然后把传递进来的参数重新压栈,接着再用call指令调用我们自己的过程,然后返回。
只是这个方法,有一个缺点,就是每个API的后面必须要有5字节的空白和只有一处返回指令。








