首页
社区
课程
招聘
[求助]问个程序调用模块很菜的问题
发表于: 2007-2-9 23:34 3978

[求助]问个程序调用模块很菜的问题

2007-2-9 23:34
3978
在代码的开始地方写了所调用函数的地址,在程序里不是就可以
CALL DWORD PTR [01001000]来执行77DA6FC8的函数,这已经足够了,为什么代码段最后还带了个输入表?

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 95
活跃值: (419)
能力值: ( LV9,RANK:310 )
在线值:
发帖
回帖
粉丝
2
这个输入表有什么作用,其中的值是什么意思啊,比如图上的7CA2,上面的
RegQueryValueExA已经由77DA6FC8定位了,这个7CA2究竟是干什么用的??


2007-2-9 23:42
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
3
自己看看PE的结构吧
2007-2-10 09:24
0
雪    币: 95
活跃值: (419)
能力值: ( LV9,RANK:310 )
在线值:
发帖
回帖
粉丝
4
看了一下午pe的结构,总算有点了解
首先通过文件头的信息里可以得到输入表的RVA
(在这里还碰到了奇怪的事,c:\windows\notepad.exe 得到的RVA为13022,IMAGE_IMPORT_DESCRIPTOR放在.silvana区段里,而c:\windows\system32\notepad.exe得到的RVA为7604,是在.text区段里,当然执行结果好象一样..........)
第二步将映像基址+RVA来到IMAGE_IMPORT_DESCRIPTOR,
(oiginalFirstThunk,TimeDateStamp,ForwarderChain,Name,FirstThunk)
name那里放的是存放dll文件名称的RVA,
originalFirstThunk和FirstThunk指向两个数组起始地址,一个数组里存的是实际调用函数的地址(自己亲眼目睹的),另一个数组里存的是所调用函数的名字的RVA),这里有个问题,原文里说"每个IMAGE_THUNK_DATA(换长数据)都是一个RVA,指向一个描述输入函数的IMAGE_IMPORT_BY_NAME(输入名字)项。
现在,有趣的是两个数组并行运行,也就是说:它们指向同一组IMAGE_IMPORT_BY_NAME(输入名字)。
http://bbs.pediy.com/showthread.php?threadid=21932
为什么我看到的却不是这样,一组指向名字,一组指向实际调用地址,当时我还怀疑是OD加载时自动置换了,但我用winhex打开文件还是这样的..........
2007-2-10 15:35
0
雪    币: 95
活跃值: (419)
能力值: ( LV9,RANK:310 )
在线值:
发帖
回帖
粉丝
5
另外发现OD的一个bug,加载某些程序时,他直接把IMAGE_IMPORT_DESCRIPTOR的东东当成代码给反汇编了,什么情况会造成这样,还不清楚.....
2007-2-10 15:52
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
6
在了解基本知识的同时,也别受知识限制在一个框架里,并不是代码段就一定得放代码的

只要系统能正常运行程序就足够了。

所以一些反调试手段就是通过修改PE里的一些数据来欺骗反汇编工具的
2007-2-10 17:24
0
游客
登录 | 注册 方可回帖
返回
//