首页
社区
课程
招聘
[旧帖] [求助]PE格式,ImageBase问题 0.00雪花
发表于: 2014-6-5 20:00 1907

[旧帖] [求助]PE格式,ImageBase问题 0.00雪花

2014-6-5 20:00
1907
先给出一张图,这张图是我用stud_PE以及OllyDBG观察同一个执行档在磁碟上和记忆体中的样子


结果发现,stud_PE中显示的栏位ImageBase中告诉我该程序载入时会在0X400000,但是OllyDBG却告诉我该程序真实的载入地址是0X13C0000(也就是PE_Header的位置),就本人所知, . exe是没有重定位表的,因此这两个应该有一个是错的,是哪一个呢?   

第二个问题

在WIN732bit下,应用程序能读的位址应该是0~0x7FFFFFFF,但是本人在写了一个应用程序,在这个程序执行时注入一段读取0X00000000位址资料的程式码,竟然导致这个程序崩溃,为什么呢?

(我用OllyDBG看过了,在0X00000000这个位址有资料而且是可读的,为何会失败呢? )

看有没有高手来帮我解答
                                                                                           
                                                                                        BY 困惑的菜鸟

[课程]Linux pwn 探索篇!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 2120
活跃值: (73)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
1. 为了支持ASLR, 2010编译出来的exe默认带有重定位表
2. 呵呵
2014-6-5 20:19
0
雪    币: 40
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
好像ImageBase的地址是优先装入地址,就是说如果ImageBase里指定的地址被其他占用,就另选地址
2014-6-5 20:26
0
雪    币: 10
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
感谢wmbol的回答,第一个问题我明白了

但是关于第2个问题的呵呵,我还不是很懂.................................

能讲详细点吗?? 还是其他人有答案也行
2014-6-5 20:40
0
雪    币: 10
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
感谢WMBOL的回答,第一个问题我明白了

但是关于第2个问题的呵呵,我还不是很懂.................................

能讲详细点吗??
                                    
                                                                                                                     BY 成长中的菜鸟
2014-6-5 20:43
0
雪    币: 7130
活跃值: (3778)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
第二个问题,没记错的话用户空间的0X00000000-0X00010000是属于空指针分配区,禁止访问读写,0X00010000-0X7FFEFFFF才可以访问,0X7FFEFFFF-0X7FFFFFFF的64KB的区域也是禁止访问读写的。
2014-6-17 08:38
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
顶!!!!!!!我回帖了!!!!!
2014-6-17 14:40
0
雪    币: 77
活跃值: (48)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
不要认为应用层的地址是0x00000000-0x7fffffff一样的有些地址是不能的读的,自己找一本有关内核书籍看看就明白了
2014-6-21 14:44
0
雪    币: 10
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
感谢htpidk 的回答,小弟大致上了解了,,但还有个小问题,我用olldbg看从0x00000000开始的资料断,ollydbg却可以读出资料,他是怎么做到的? 是某种RING0级的方法吗?
(会这样问的原因是因为我写的程序有先提权过,所以一般应用程序应该无法更高了(就我所知))
下面放我用的提权代码

void UPPRI()
{
HANDLE hToken;
LUID luidTmp;
TOKEN_PRIVILEGES tkp;       
OpenProcessToken(GetCurrentProcess(),TOKEN_ALL_ACCESS,&hToken);
LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luidTmp);
tkp.PrivilegeCount = 1;
    tkp.Privileges[0].Luid = luidTmp;
    tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    AdjustTokenPrivileges(hToken, FALSE, &tkp, sizeof(tkp), NULL, NULL);
}
2014-8-12 15:54
0
雪    币: 23
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
1,0X00000000在普通程序结构下不可读。指向空指针,方便程序异常使用
2,OD可读的原因你去看ReadProcessMemory,我记得那段是引用一个空指针地址,
3,如果你想做一个Ring3可读0X00000000地址,需要改写虚拟地址映射表。把0X00000000映到一个有意义的物理地址上。
2014-8-12 17:32
0
雪    币: 23
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
0X7FFEFFFF应该是PEB 可读不可写,要是PEB不可读,那麻烦可大了,哈哈。各种死进程
2014-8-12 17:34
0
游客
登录 | 注册 方可回帖
返回
//