我想HOOK一个DLL中的导出函数。不是HOOK API函数,而且这个DLL是在程序自己的目录下不在系统目录下。这样就不能通过劫持DLL来实现。应该怎么做呢?

解决方案 »

  1.   

    创建一个Proxy的DLL , 实现相同的接口, 然后替换掉这个。
    这种方式要模拟所有的接口,很麻烦。还有种方式,你创建的Proxy DLL只到处要HOOK的, 创建一个新的PE Section,将原来的 Import Table等复制过去进行修改,将需要HOOK的 THUNK指向你自己的Proxy DLL
      

  2.   

    还有种方式,你创建的Proxy DLL只需要实现被HOOK的, 创建一个新的PE Section,将原来的 Import Table等复制过去进行修改,将需要HOOK的 THUNK指向你自己的Proxy DLL 
    或者你可以试试 运行期的HOOK
      

  3.   

    你这个太难了,还要修改Import Table。看着就晕。有没有像HOOK API或HOOK COM的那种方法。
      

  4.   

    可不可以HOOK GetProcAddress然后取出参数与目标函数进行比较如果相等就把函数指针保存起来。然后调用替换的函数,执行完后再决定是不是继续执行函数指针指向的真实函数?
      

  5.   

    LoadLibaryEx/GetProcAddress动态加载的dll的话,你的想法应该是正确的。