首页
社区
课程
招聘
如何调用EXE文件中已知地址的函数过程?
2006-6-29 15:03 6347

如何调用EXE文件中已知地址的函数过程?

2006-6-29 15:03
6347
如何调用EXE文件中已知地址的函数过程?
我目前是用LOADLIBRARY载入,然后如果计算偏移实现,但是这样做有个问题就是,如果目标函数中没有API函数还可以,若出现API函数,就会出差,请问有人有做过类似的操作码?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
打赏
分享
最新回复 (9)
雪    币: 392
活跃值: (909)
能力值: ( LV9,RANK:690 )
在线值:
发帖
回帖
粉丝
cyclotron 17 2006-6-29 15:43
2
0
因为EXE没有重定位表
你可以尝试为目标函数涉及到的绝对地址手工添加重定位表
雪    币: 217
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
leahart 2006-6-29 16:29
3
0
能说的具体点码,我只是知道若函数内出现全局变量,我倒是可以根据偏移计算出来,但是API地址即使我地址计算正确调试的时候也会发现EIP不正确而产生错误
雪    币: 392
活跃值: (909)
能力值: ( LV9,RANK:690 )
在线值:
发帖
回帖
粉丝
cyclotron 17 2006-6-29 16:38
4
0
不是简单地计算偏移,要添加重定位表,PE结构的一部分,具体看这里关于重定位表的说明:
http://bbs.pediy.com/showthread.php?threadid=21932&highlight=%D6%D8%B6%A8%CE%BB%B1%ED
雪    币: 217
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
drgnmvpn 2006-6-29 16:55
5
0
可以将此EXE的导入表复制一份,放到相对0x400000的位置.然后在其中填入API的位置.当然,首先你的EXE不能加载在0x400000处了.
雪    币: 217
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
drgnmvpn 2006-6-29 17:04
6
0
但是全局变量,字符串常量之类的还是要重定位.对EXE用LoadLibrary多半是不能用的.除非你要用的函数没用这些要重定位的东东
雪    币: 3246
活跃值: (339)
能力值: (RANK:20 )
在线值:
发帖
回帖
粉丝
blowfish 2006-6-29 17:06
7
0
把那个EXE作为一个进程加载,而不是作为一个资源文件加载。然后在EXE的进程中插入一个远程线程来调用EXE里面的函数。当然前提是被调用的函数所引用到的数据都初始化过了,否则会出错。

如果函数比较简单,直接rip出该函数相关的汇编代码,以嵌入汇编的形式放到自己的源码里面。
雪    币: 217
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
leahart 2006-6-29 17:16
8
0
最初由 blowfish 发布
把那个EXE作为一个进程加载,而不是作为一个资源文件加载。然后在EXE的进程中插入一个远程线程来调用EXE里面的函数。当然前提是被调用的函数所引用到的数据都初始化过了,否则会出错。

如果函数比较简单,直接rip出该函数相关的汇编代码,以嵌入汇编的形式放到自己的源码里面。


我的目的就是不让这个EXE运行起来,因为里面要用的核心函数很复杂,所以很难直接模拟出来,里面的子CALL非常多,你说的方法很有意思,能否说说实现的方式,是不是用CREATEPROCESS加暂停的参数?如何利用远程线程来处理?我只会用DLL插入来执行,有没有不需要DLL的方式的方法?
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
nbw 24 2006-6-29 18:46
9
0
http://bbs.pediy.com/showthread.php?s=&threadid=12041
雪    币: 217
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
leahart 2006-6-30 11:14
10
0
通过CREATEPROCESS的方式加载,CREATE_SUSPENDED,但是这样加载的进程貌似代码段没有完全加载,我调试发现我调用的函数地址还没有解码
游客
登录 | 注册 方可回帖
返回