首页
社区
课程
招聘
[旧帖] [求助]拦截函数 0.00雪花
发表于: 2010-9-26 20:21 6848

[旧帖] [求助]拦截函数 0.00雪花

2010-9-26 20:21
6848
晕~~
拦截某个函数时。。发现这个函数在DLL中以序号的方式引出。。。。我学了的是以函数名的方式引出的。。
我没办法找到那个函数。。。求高手指导下。。提供下思路,或者给点源码指导下,谢谢

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (16)
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
那是因为你还没学PE格式。
2010-9-26 21:58
0
雪    币: 90
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
感谢2楼的回复。
下面我讲下我是怎么利用我会的PE格式找要拦截的函数的,错了的地方望高手提点下。

这个要被拦截的函数,位于一个没加壳的.exe中。

PE结构式由DOS头,PE文件头,块表,块,调试信息组成。
dwBaseImage为基地址
PIMAGE_THUNK_DATA  pIAT;

如果想要找到某个函数(这个函数不是动态注入的),通过PE文件头的数据目录表的第二个IMAGE_DIRECTORY_ENTRY_IMPORT结构找到pIID(如果不是的话pIID++),
然后通过判断pIID->OriginalFirstThunk 是否为0来确定用
pIAT = (PIMAGE_THUNK_DATA)( dwBaseImage + pIID->FirstThunk ) 还是
pIAT =(PIMAGE_THUNK_DATA)( dwBaseImage + pIID->OriginalFirstThunk )

然后要判断该DLL是否以序号的方式引出函数的。。。(是的话,我也不知道怎么做了,不是的话就接着下面)
然后通过dwBaseImage+*((DWORD*)pIAT)+2来判断是否要被拦截的函数的,通过改变函数的名字就能作一个简单的拦截。

现在我能取得DLL,但去到上面的判断该DLL是否以序号的方式引出函数那里。。发现。。。是以序号引出。。。不知道怎么办了。。。求高手指教下,感激感激。。。
2010-9-27 19:04
0
雪    币: 90
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
求高手指导下
2010-9-29 07:10
0
雪    币: 2105
活跃值: (424)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
GetProcAddress(hdll, (LPSCTR)22222)
2010-9-29 17:11
0
雪    币: 90
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
谢谢。。。5楼的回复。。
但是我试过你讲的方法。。。不行。。。。返回NULL喔。。。。
DLL的模块能正确获得。。。
2010-9-29 21:56
0
雪    币: 251
活跃值: (301)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
有这么麻烦么?直接下载一个拦截摸块不就OK了?
我记得有一篇叫“apihook实例剖析”的文章很合适你。
2010-9-29 22:08
0
雪    币: 90
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
感谢7楼的回复。。
我不想用这个模块来拦截。因为这个拦截的学习,如果通过修改IAT,将更有利于我对PE结构的理解和分析,
在<<加密与解密 第三版>>中只是略略带过这个序号的问题,并没有详细介绍,所以。。。想高手解答解答,感谢
2010-9-30 00:03
0
雪    币: 2105
活跃值: (424)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
序号跟函数名本质是一样的  最终都是通过序号来查找的
第二个参数直接传序号即可
2010-9-30 11:08
0
雪    币: 90
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
小弟笨。。不知道那个函数的序号。。。望指导。。感激感激
2010-9-30 17:43
0
雪    币: 2105
活跃值: (424)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
11
你连函数名、序号都不知道  那你钩什么 你怎么知道他是函数的????。。。。。
2010-9-30 20:40
0
雪    币: 90
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
我钩的是WS2_32.DLL的WSASend..(这个是DLL被加载于酷我音乐盒中)
我用查看PE结构的工具区查看这个程序(酷我音乐盒)的输入函数,有些是有名字的,如果把上面WS2_32.DLL和WSASend换成那些有名字的,就成功了。。
2010-9-30 22:39
0
雪    币: 90
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
补充下。。我只知道那个酷我音乐盒中有WS2_32.DLL(用VC带的工具或PE工具都能看到),但不知道他用了哪些函数(因为它是用序号输入的,不是用函数名),所以正如你所讲的,我也不知道它是否有用到WSASend,但是它是一个基于网络通信的程序(应该是TCP通信),所以我猜想它应该用到WSASend或者Send。。。
2010-9-30 22:47
0
雪    币: 90
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
。。自己顶个。。无奈中。。没现金。。没人答。。。
2010-10-2 16:35
0
雪    币: 88
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
你的目的是拦截函数,所以可以通过修改pe文件,使按序号导入的为名称导入,此时就可以提供一个名称,如果拦截函数中还要使用替换了的函数,同样可以按序号导入即可。
2010-10-3 09:56
0
雪    币: 90
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
你的目的是拦截函数,所以可以通过修改pe文件,使按序号导入的为名称导入,此时就可以提供一个名称,如果拦截函数中还要使用替换了的函数,同样可以按序号导入即可。


请问如何 使按序号导入的为名称导入,我不知道那个函数对应着哪个序号。。。所以不知道该改哪个。。
2010-10-4 11:01
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
友情顶贴一下
2010-10-5 16:58
0
游客
登录 | 注册 方可回帖
返回
//