我用的方法是修改应用程序的导入表hook到StartDoc但WritePrinter却不行?为什么啊?
谁能帮帮我啊,谢谢各位啦!

解决方案 »

  1.   

    1。确定输入表里成功找到WritePrinter?
    2。如果使用loadlibrary方式调用的WritePrinter,那输入表里是找不到的
      

  2.   


    楼主要说明白,WritePrinter怎样不行
    是导入表没有WritePrinter函数,还是你Hook了也没有效果?程序既然导入了StartDoc,应该不会用LoadLibrary方式来调用WritePrinter吧
      

  3.   

    WritePrinter也能成功替换导入表函数地址,但运行时却不起作用我确实是用loadlibrary方式调用的我的DLL,然后在DLL中改写导入表的,同时会枚举所有进程,然后通过CreateRemoteThread的方法把我的DLL加载到其它程序中,加载后也立即改那个进程的导入表我先把LoadLibraryA和LoadLibraryW的导入表地址给改成我自己的函数了,在程序做LoadLibrary时我就改这个library的导入表我试着在WORD中打印,当只改写StartDocW时可以看到效果,但只改写WritePrinter时却没有效果,程序照常打印,我的效果很简单直接返回FALSE,就是告诉调用者失败了
      

  4.   

    没有效果,显然是入口修改的不对,使用od等debug看看对应入口是否修改成功
      

  5.   

    是否目标程序根本没有调用WritePrinter函数?
      

  6.   

    用Ollydbg在那几个API处下断点看看目标程序是否调用了这些函数
      

  7.   

    StartDocA或StartDocW之分关于打印的API还有很多应用层中
    CreateDCA\W
    StartDocPrinterA\W
    ...驱动中也有他们是一层层往下调用的很多软件中用到的API都不一样,要全部都HOOK到,不是一件很容易的事情