首页
课程
问答
CTF
社区
招聘
看雪峰会
发现
排行榜
知识库
工具下载
看雪20年
看雪商城
证书查询
登录
注册
首页
社区
课程
招聘
发现
问答
CTF
排行榜
知识库
工具下载
看雪峰会
看雪商城
证书查询
看雪社区
《0day:软件漏洞分析技术》
发新帖
0
0
[求助]第二章求助
2012-3-9 04:47
4701
[求助]第二章求助
ccqmpux
2012-3-9 04:47
4701
我用的Win7+VS2010。使用/GS-(无缓冲去安全检查)/DYNAMICBASE:NO(固定基址)/NXCOMPAT:NO(无数据执行保护)后生成类似于随书文件中的exe。我的问题在于按照书中的方法得出来的messageboxa地址不对。通过depends.exe,读出user32.dll的Preferred Base为0x77d10000,其中messageboxa的相对偏移为0x0005ea11,这样计算实际地址应为0x77d6ea11。但这个地址是不对的。
我尝试直接在源程序中调用messageboxa,反编译得到实际地址为0x760fea11。我尝试过这个地址能达到书中的目的。
我想问下这个怎么解释。我知道depends.exe读出的是preferred base。
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法
收藏
・
0
点赞
・
0
打赏
分享
分享到微信
分享到QQ
分享到微博
赞赏
×
1 雪花
5 雪花
10 雪花
20 雪花
50 雪花
80 雪花
100 雪花
150 雪花
200 雪花
支付方式:
微信支付
赞赏留言:
快捷留言
感谢分享~
精品文章~
原创内容~
精彩转帖~
助人为乐~
最新回复
(
4
)
kenikehan
雪 币:
83
活跃值:
(10)
能力值:
( LV2,RANK:10 )
在线值:
发帖
2
回帖
18
粉丝
0
关注
私信
kenikehan
2012-3-9 10:12
2
楼
0
depends.exe读出的是preferred base,早先win平台将按照preferred base加载dll,但后来为了部分的提升安全性
,dll往往不会按照preferred base加载(既然用到了那些编译选项,你应该明白啊
),你得自己获得dll实际加载地址再加上函数的RVA偏移才能获得函数真实的地址。即preferred base+RVA是参考情况,actural base+RVA才是实际情况
ccqmpux
雪 币:
202
活跃值:
(10)
能力值:
( LV2,RANK:10 )
在线值:
发帖
2
回帖
8
粉丝
0
关注
私信
ccqmpux
2012-3-9 13:23
3
楼
0
谢谢了!
补充下,我又实验了下,发现同一个程序运行时其dll加载位置始终相同,不同程序的确是不同的。是说dll加载位置在链接是就已经决定了吗?
kenikehan
雪 币:
83
活跃值:
(10)
能力值:
( LV2,RANK:10 )
在线值:
发帖
2
回帖
18
粉丝
0
关注
私信
kenikehan
2012-3-9 14:57
4
楼
0
从编写动态链接库代码到生成dll的过程中,仅仅是其编译过程与dll加载顺序稍带联系(编译过程影响到prefetch base),连接过程只是将该dll的不同obj实现文件和def文件组合成完整pe文件,这些都不能直接决定dll加载位置,而应该由windows加载dll的算法来决定。
"同一个程序运行时其dll加载位置始终相同,不同程序的确是不同的"我估计是因为dll加载算法受其加载的各个dll影响(各个dll大小不同 ,不同dll见可能又有相互依赖性,子dll先于主dll加载等等,未曾深入研究这些
)时并不引入随机数,否则同一个程序运行时其dll加载位置也会不同。这样,因为是同一个程序,同一个dll加载算法,那么程序运行时其dll加载位置始终相同,不同程序是不同的
ccqmpux
雪 币:
202
活跃值:
(10)
能力值:
( LV2,RANK:10 )
在线值:
发帖
2
回帖
8
粉丝
0
关注
私信
ccqmpux
2012-3-10 15:56
5
楼
0
多谢了~
游客
登录
|
注册
方可回帖
回帖
表情
雪币赚取及消费
高级回复
返回
ccqmpux
2
发帖
8
回帖
10
RANK
关注
私信
他的文章
[求助]3.4节求助
7843
[求助]第二章求助
4702
关于我们
联系我们
企业服务
看雪公众号
专注于PC、移动、智能设备安全研究及逆向工程的开发者社区
看原图
返回
顶部