首页
社区
课程
招聘
[原创]告别硬编码-发个获取未导出函数地址的Dll及源码
发表于: 2013-7-2 15:45 43065

[原创]告别硬编码-发个获取未导出函数地址的Dll及源码

2013-7-2 15:45
43065
还在为找内核未导出函数地址而苦恼嘛?
还在为硬编码通用性差而不爽吗?
还在为暴搜内核老蓝屏而痛苦吗?
请看这里:

最近老要用到内核未导出的函数及一些结构,不想再找特征码了,准备到网上找点符号文件解析的代码抄抄,也玩玩符号文件解析获取未导出函数,可惜资料寥寥无几,下了一些代码,发觉编译后问题不断,有的编译通过了却取不到任何地址,弄了半天白弄了,于是静下心来看dbghelp的说明文件(中文的都木有),发觉dbghelp用起来很不爽,由于版本太多,又是32位和64位什么的,最要命的是dbghelp的说明文件里所有升级了的函数一律找不到旧函数的说明了,加之编译器里包含的相关文件版本不一,里面的函数用起来经常出现莫名其妙的问题,我估计也就是网上抄来的代码在自己机子上不能用的原因吧。于是自己写了个Dll,放几个接口,保证在其他电脑上也可用。

先说下思路:
1、InitSymHandler(进行一些初始化)
1.1、先创建一个目录 symsrv.yes文件,没这个symsrv.dll不会自动下载符号文件
1.2、取自己进程句柄,用GetCurrentProcess取的没用,原因不明,网上的代码很多用这个,但我用死活不行
1.3、设置符号文件目录,调用SymInitialize进行初始化

2、LoadSymModule(加载符号文件)
2.1、使用SymGetSymbolFile来取得符号文件,如果搜索路径没有这个文件,那么将从微软服务器下载,然后调用SymLoadModule64加载它
2.2、路径设置如:srv* xxxx *http://msdl.microsoft.com/download/symbols

3、GetSymByName(获取未导出函数或变量地址)
3.1、上面2步好了后第一次运行时会下载符号文件,要等一会(机子一定要保持联网- - 当我白说),下载好后以后运行就快了
3.2、GetSymByName会调用SymGetSymFromName根据函数名称获取其地址,我用网上说的EnumSyms怎么也不行,不是调用失败就是得到的数据是0,蛋疼不已,不得已从dbghelp翻了这个函数出来了

4、CloseSym
不需要符号文件了后调用这个函数把符号文件打开的一些句柄什么的关闭,退出,没什么好说的

调用形式在SymbolAnalyzeDll.inc里已经定义了,用汇编的话直接包含就行了,其他自行改改就好,暂时不支持64位,虽然里面用的都是64位的函数。折腾了1天多被莫名其妙的各种问题弄得筋疲力尽,结果弄了个这么个东西,离我的设想还好远,源码也附上,有兴趣的朋友可在此基础上增加更多功能,暂时不想写了,所以有更好的版本记得发给楼主我也用用。

测试程序和调用示例都包含在附件里了,注意里面的ModuleBase_win32k内核基址我硬编码的,这个要自己改,ring3下怎么获取内核文件基址还没实践过,内核下遍历下就可以了,所以就懒的写了,不过不传入内核基址也没关系,只不过返回的是相对基址的偏移,然后+下基址也没问题。

PS:如果网络不好可能会调用失败

源码-Dll-测试程序(更新了下,发现CloseSym有个错误,现在更新了调用LoadSymModule的ModuleBase为0也可以返回正确的地址,而不是偏移):
SymbolAnalyzeDll.zip

[课程]Android-CTF解题方法汇总!

上传的附件:
收藏
免费 5
支持
分享
最新回复 (49)
雪    币: 239
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
先mark,以备后用
2013-7-2 16:00
0
雪    币: 602
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
2013-7-2 16:23
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
thanks for share!
2013-7-2 16:58
0
雪    币: 89
活跃值: (53)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
mark   3q
2013-7-2 17:34
0
雪    币: 541
活跃值: (654)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
6
好东西啊好东西,正要找这方面的资料研究一下呢,谢谢分享~
2013-7-2 18:19
0
雪    币: 47
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
mark
2013-7-2 20:24
0
雪    币: 71
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
这个不错

谢谢
2013-7-2 21:31
0
雪    币: 773
活跃值: (442)
能力值: ( LV9,RANK:200 )
在线值:
发帖
回帖
粉丝
9
擦 吓我一大跳,原来符号
2013-7-2 23:45
0
雪    币: 563
活跃值: (95)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
收藏  !
2013-7-3 00:33
0
雪    币: 496
活跃值: (286)
能力值: ( LV13,RANK:400 )
在线值:
发帖
回帖
粉丝
11
作为学习调试技术来说还是不错的。
2013-7-3 08:52
0
雪    币: 3836
活跃值: (4142)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
同感同感
2013-7-3 09:30
0
雪    币: 1042
活跃值: (470)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
makemake~~
2013-7-3 10:10
0
雪    币: 328
活跃值: (154)
能力值: ( LV12,RANK:310 )
在线值:
发帖
回帖
粉丝
14
mark,mark~
2013-7-3 11:13
0
雪    币: 228
活跃值: (115)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
15
我草,居然精了!!我还以为大家都知道这方法,我跟我的小伙伴们都惊呆了!!

dbghelp.dll 加一个回调就可以搞定,目测代码数不超过20行.
windbg其实也只是调用dbghelp而已.用dbghelp下载符号文件,再用dbghelp去解析.20行代码足够鸟.M$标准,而且M$还提供了调用范例.

我在想这种跟M$做重复功的东西可加精么?而且论坛上早有这样的东西鸟,
2013-7-3 11:36
0
雪    币: 773
活跃值: (442)
能力值: ( LV9,RANK:200 )
在线值:
发帖
回帖
粉丝
16
看来发帖的多写几个字,我早就发源码,没写几个字优秀,多写几个精华
2013-7-3 11:53
0
雪    币: 22
活跃值: (423)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
mark.mark..
2013-7-3 12:02
0
雪    币: 328
活跃值: (154)
能力值: ( LV12,RANK:310 )
在线值:
发帖
回帖
粉丝
18
大神飘过,膜拜一下~
2013-7-3 12:09
0
雪    币: 29
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
加载符号文件... 不错的方法~
2013-7-3 12:33
0
雪    币: 153
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
占坑,招租,备用
2013-7-3 13:16
0
雪    币: 19
活跃值: (4624)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
mark
2013-7-3 14:08
0
雪    币: 659
活跃值: (484)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
22
高手都知道,一般的都是用硬编码或者暴搜吧,估计版主不是因为方法加精,主要是由于自己写符号文件查找很繁琐,我给个Dll给大家直接调用就方便多了,源码我也给了,主要想有更多的人再增加些功能,能像windbg的符号显示一样就完美了
2013-7-3 14:12
0
雪    币: 659
活跃值: (484)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
23
还有就是高手握着技术不肯发,网上这方面的资料真的很少,写这个前我百度了半天大概只搜到3、4份源码,而且没一份能在我机子上编译成功的,或者编译成功了导出的结果老是为0,还有就是一些必须的文件基本没人提供,真正完善的资料还只有微软的dbghelp的说明文件,可惜是英文的,可能一般人也不愿意去看。
2013-7-3 14:24
0
雪    币: 228
活跃值: (115)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
24
dbghelp.dll 加一个回调就可以搞定,目测代码数不超过20行.

windbg其实也只是调用dbghelp而已.用dbghelp下载符号文件,再用dbghelp去解析.20行代码足够鸟.M$标准,而且M$还提供了调用范例.
2013-7-3 14:42
0
雪    币: 773
活跃值: (442)
能力值: ( LV9,RANK:200 )
在线值:
发帖
回帖
粉丝
25
http://bbs.pediy.com/showthread.php?t=161246 导出所有未导出函数变量,本论坛就有啊
2013-7-3 14:57
0
游客
登录 | 注册 方可回帖
返回
//