首页
论坛
课程
招聘
[求助]关于Dll文件导出函数的逆向
2013-8-16 22:13 5989

[求助]关于Dll文件导出函数的逆向

2013-8-16 22:13
5989
用IDA加载一个Dll文件,导出表如下:
Name                                            Address  Ordinal
--------------------------------------------------------------------------
FH_ExitDLL                                  1000AC80 1   
FH_InitDLL                                  1000AC90 2   
...
FH_dumpGDSUserID                    100058E0 997
DDK_Flags                                   10018498 1000
DDK_Info                                     100184F8 1001
....
FRAME_Info                                 10019768 1302
FRAME_DSTInh                             100197E0 1303
M_EMPTY                                     10016568 1402
DllEntryPoint                               1000AC30     

序号1到997的导出函数,基本可以找到函数体,但1000至1402的部分导出函数无法直接到达函数体;
双击后,到达的地址如下:

.data:10019878 ; Exported entry 128. FH_STMeasUnit
.data:10019878                 public FH_STMeasUnit
.data:10019878 FH_STMeasUnit db    ? ;            ; DATA XREF: .rdata:off_100101C8o
.data:10019879                 db    ? ;
.data:1001987A                 db    ? ;
.data:1001987B                 db    ? ;
.data:1001987C ; Exported entry 129. FH_STMeasUnitSync
.data:1001987C                 public FH_STMeasUnitSync
.data:1001987C FH_STMeasUnitSync db    ? ;        ; DATA XREF: .rdata:off_100101C8o
.data:1001987D                 db    ? ;
.data:1001987E                 db    ? ;
.data:1001987F                 db    ? ;

到达.rdata:off_100101C8,也只看到一系列的导出函数名称!
请教一下,如何到达这类导出函数的函数体。

【公告】 [2022大礼包]《看雪论坛精华22期》发布!收录近1000余篇精华优秀文章!

收藏
点赞0
打赏
分享
最新回复 (5)
雪    币: 100
活跃值: 活跃值 (12)
能力值: ( LV12,RANK:200 )
在线值:
发帖
回帖
粉丝
SilentGamb 活跃值 1 2013-8-16 23:26
2
0
您方便上传这个DLL 的样本么?

写个测试程序, 调用1000~1042之后的导出函数.
用OD跟到那个函数内,就可以看见地址了。

然后在IDA中找到那个地址,观看代码.
雪    币: 127
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ddao 活跃值 2013-8-17 23:51
3
0
谢谢SilentGamb的回复!
用Peid查看了一下:导出函数的 “系列号”-“RVA”-“名称” 都正常;
无法查看函数体,其“ 偏移” 都为 0000 0000

用OD调试时,根据参考消息,查看,发现时一个DWORD值,反汇编跟踪,发现跳到另外一个dll中,可以查看具体函数体;
但不在原dll空间内。

未用OD加载,直接IDAc查看,发现DWORD值得地方为0x0000 0000
雪    币: 127
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ddao 活跃值 2013-8-19 00:45
4
0
测试了,发现一个怪现象:
函数体在另外一个Dll文件中,而且这个Dll文件导入了这个Dll的函数。

可能说的不清楚:
Dll A导入Dll B的导出函数,而实际上,Dll B的导出函数的函数体,实际上实在Dll A中;
Dll A加载Dll B时,修改了导入函数(即Dll B的导出函数地址)。
不知道我有没有说明白!

结贴了,这个问题已不重要了,关键已经找到函数体了。
雪    币: 100
活跃值: 活跃值 (12)
能力值: ( LV12,RANK:200 )
在线值:
发帖
回帖
粉丝
SilentGamb 活跃值 1 2013-8-19 03:32
5
0
"Dll B的导出函数的函数体,实际上实在Dll A中"
有以下疑问:

* 为啥DLLA 不调用自己的内部函数或自己的导出函数? 为啥非要多一道手续,调用DLLB的导出函数?

* DLLB的导出函数实现在DLLA中,在应用层DLL编写中,很难实现这样的吧?
如何编程实现DLLB的导出函数实现在DLLA中?

* 如果方便的化,放出那两个DLL给大家看看? 不太相信啊~

////
除非是这样的, DLLA导出函数调用DLLB的导出函数x,但是DLLB的导出函数x又调用DLLA的导出函数y.
但是, "序号1到997的导出函数,基本可以找到函数体,但1000至1402的部分导出函数无法直接到达函数体;"
这又不好理解了.

DLL中每个导出函数都是有函数体的, 除非这个函数是另外一个DLL的导入函数,才没有函数体.
如果是另外一个DLL B的导出函数, 不需要在DLL A中声明为导出函数.

不知道如何编程实现, 比如我们写一个 Win32 DLL.
雪    币: 499
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kangcin 活跃值 2013-8-19 07:22
6
0
这种很多的,自己搜DLL劫持,也叫DLL马甲
游客
登录 | 注册 方可回帖
返回