CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  进程/线程/DLL

挂接API~ 高手请进~ 在线等

楼主Joe_Cai(超级小强)2006-01-17 10:37:11 在 VC/MFC / 进程/线程/DLL 提问

我写了一个可执行模块DataSpy.exe,   在这个可执行模块中我调用了API函数::TextOutA(),这样gdi32.dll就出现在了可执行模块的输入节中;并且,我用WriteProcessMemory函数成功的改写了可执行模块的IAT的中TextOutA项,实现了对API函数::TextOutA()的挂接。  
          现在我不直接调用API函数::TextOutA(),转而调用CDC::TextOut()进行输出。我们知道MFC42D.dll是通过调用API函数::TextOutA()来实现CDC::TextOut()的,当我想再用WriteProcessMemory函数修改MFC42D.dll的输入节来挂接::TextOutA()时,问题出现了!函数WriteProcessMemory没有成功的修改掉MFC42D.dll的IAT,返回FALSE,调用GetLastError()得到998   -   !我就纳闷了,难道MFC42d.dll的输入节不允许改写吗,MFC42d.dll在进程中的加载地址是0x5f400000啊?  
          我是这样调用的,  
          WriteProcessMemory(GetCurrentProcess(),  
                                                &(pThunk->u1.Function),//我已成功找到了::TextOutA对应的项  
                                                &pfnNew,  
                                                sizeof(pfnNew),  
                                                NULL);  
          高手请指点小第一二,不胜感激,先谢了~ 问题点数:20、回复次数:10Top

1 楼singlerace(独行者)回复于 2006-01-17 11:17:52 得分 20

1,看一下pThunk->u1.Function的值是多少,确定不是forward   funtion;  
  2,看一下pThunk->u1.Ordinal,确定是ordinal还是name   pointer。Top

2 楼Joe_Cai(超级小强)回复于 2006-01-17 11:21:17 得分 0

我看下Top

3 楼Joe_Cai(超级小强)回复于 2006-01-17 11:30:17 得分 0

Debug时的值如下:  
     
  pThunk                                       0x5f4ab008     __imp__TextOutA@20  
      |  
      -   u1                                       {...}  
          |  
          +   ForwarderString         0x77efbc0c   "(乱码)"    
          +   Function                       0x77efbc0c  
              Ordinal                         0x77efbc0c  
          +   AddressOfData             0x77efbc0cTop

4 楼Joe_Cai(超级小强)回复于 2006-01-17 11:31:54 得分 0

能看出什么吗?Top

5 楼singlerace(独行者)回复于 2006-01-17 12:00:36 得分 0

1,&(pThunk->u1.Function)--这个值是否在MFC42d.dll中?  
  2,你的thunk是指向OriginalFirstThunk还是FirstThunk?  
  Top

6 楼Joe_Cai(超级小强)回复于 2006-01-17 12:34:38 得分 0

1.MFC42D.dll的加载地址是             0x5f4ab000    
      pThunk->u1.Function的地址是   0x5f4ab008,   它应该是第3个  
  2.OriginalFirstThunk的值是         0x000c3b98  
      FirstThunk的值是                         0x000ab000Top

7 楼Joe_Cai(超级小强)回复于 2006-01-17 12:43:25 得分 0

说错了,MFC42d.dll的加载地址是   0x5f400000Top

8 楼Joe_Cai(超级小强)回复于 2006-01-17 12:56:15 得分 0

我知道怎么回事了!  
  &pThunk->u1.Function所在的页面的属性是PAGE_READONLY~  
  靠,MS为什么要把MFC库的IAT设成PAGE_READONLY啊!我看能不能把它改成PAGE_READWRITE   :)Top

9 楼amei2000go(浪子)回复于 2006-01-18 13:40:10 得分 0

Windows2000   的系统已经都是调用   W   函数了,调用   A   函数是早期的系统吧!Top

10 楼jwt3003()回复于 2006-01-21 13:38:03 得分 0

我做了基本跟你一样的东西不过我改写MFC42.DLL的IAT时非常成功,只是当我枚举所有加载模块逐个改写以后就出现了问题。Top

相关问题

  • 挂接API?
  • 怎么挂接API涵数?在线
  • 如何挂接API?? 例如我想挂接SOCKET API或file I/O API (分数不是问题)
  • 请问有什么简单方法挂接API吗?
  • 请问怎样挂接Windows API函数,最好有例子。
  • 高手请看 :关于插入dll和挂接api
  • 高手请看 :关于插入dll和挂接api
  • 在linux下挂接scsi硬盘,在线等待,急,高分!!!
  • ★做过api挂接的大侠们看过来,一个WriteProcessMemory错误
  • 请问高手们一个问题:关于挂接API函数的。

关键词

  • 函数
  • 模块
  • mfc
  • 执行
  • api
  • dll
  • u1
  • efbc0c
  • textouta
  • 挂接

得分解答快速导航

  • 帖主:Joe_Cai
  • singlerace

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo