当前位置:鱼C工作室 >解密系列 >系统篇 > 查看文章

PE格式详细讲解10 – 系统篇10|解密系列

PE格式详细讲解10 – 系统篇10

 

让编程改变世界

Change the world by program


 

今天有一个朋友发短消息问我说“老师,为什么PE的格式要讲的这么这么细,这可不是一般的细哦”。

其实之所以将PE结构放在解密系列继基础篇之后讲并且尽可能细致的讲,不是因为小甲鱼没事找事做。

主要原因是因为PE结构非常重要,再说做这个课件的确是很费神的事哈。

在这里再次强调一下,只要是windows操作程序,其就要遵循PE格式,再说人家看雪的网址就是www.pediy.com。

 

简单的讲是可以,但是怕就怕有些朋友知识点遗漏了或者错误理解意思、不能深刻体会等,这样的效果是不好的~

所以,小甲鱼尽管这系列视频可能出得比较慢,但质量一定保证大家都能够接受。

建议:如果认为PE不重要,没关系,可以先学其他。

小甲鱼的文章永远放在这里,等你需要的时候再回过头来看就行。

 

小甲鱼PE详解之基址重定位详解(PE详解10)

这一节对于讲来研究病毒原理的研究影响比较大,大家务必要深入理解~

但是吧,咱的权威教材看雪的《加密与解密》在这一节的讲解上实在不给力,很多初学者看得云里雾里的。大家意见一致啵 ?!

为了让大家能够更容易的接受,小甲鱼决定通过自问 – 自答循环渐进的模式给大家讲解基址重定位的原理和应用。

 

问题一:什么是基址重定位?

 

答:

重定位就是你本来这个程序理论上要占据这个地址,但是由于某种原因,这个地址现在不能让你霸占,你必须转移到别的地址,这就需要基址重定位。

打个比方:例如你现在计划在某某地方建一栋楼,但是有一天你收到上边的通知,这个地方政府临时要征用建公厕,所以这时候你就没辙,得去别的地方建啦~

 

问题二:为什么需要基址重定位?

 

答:

其实这个问题看起来跟前边的有点重复不是?

但是有些朋友可能会这么说,小甲鱼老湿你的言论是可以,但是放在程序中,小甲鱼你上节课不是还说每个程序都让Windows 欺骗了吗 —— 每个程序觉得自己都完全占有 4GB的内存空间,何来地址被别的程序占据了呢?!

 

首先,能够提出问题的朋友都是值得表扬和鼓励的

但是,上节课我们谈了什么内容呢 ? 谈了导出表,为什么会出现导出表呢 ? 正是因为有DLL 这类破坏别人家庭幸福的“小三”的存在~

我们之前谈过,动态链接库它自己是没有占据任何似有空间的,都是寄生在应用程序的私有空间里边。那寄生在别人家里,睡在哪里就肯定不是

小三说了算啦,肯定要由主人决定不是?

所以,在小三的眼里,不用说,肯定永远都睡在大房,但客观事实告诉我们,经常只能住卧室~(有点扯远了,其实小甲鱼想说的是,基址重定位就是这么被需求的^_^)

 

问题三:我们需要对程序中的哪些语句(指令)进行基址重定位呢?

 

答:请先看下图

 

这是上节课我们用到的动态链接库 Counter.dll 文件,对其用W32Dasm 进行反汇编的截图。

我们分析下,有哪些语句是需要我们来进行基址重定位的呢 ?

(温馨提示:以下内容涉及一些汇编基础和windows基础,不懂的朋友可以参照视频教程。因为一般说话比打字容易,信息量也比较大~)

 

答案是 —— 但凡涉及到直接寻址的指令都需要进行重定位处理!(那什么是直接寻址? 咱在零基础入门学习汇编里边讲得很清楚啦,只要在机器码中看到有地址的,那就叫直接寻址……那有没有间接的? 肯定哈,间接的就是地址被间接的保存起来,例如存放在寄存器eax, 然后通过访问寄存器来获取地址,那就叫间接~)

 

那么我们再过头来看下图片,一眼就能扫出以下指令需要对其进行重定位:

:10001026 FF0500300010 inc dword ptr [10003000]

:1000102C FF3500300010 push dword ptr [10003000]

:1000103D A100300010 mov eax, dword ptr [10003000]

:10001049 FF0D00300010 dec dword ptr [10003000]

:1000104F FF3500300010 push dword ptr [10003000]

:10001060 A100300010 mov eax, dword ptr [10003000]

:1000106A FF2500200010 Jmp dword ptr [10002000]

 

 

分页阅读: 1 2 下一页
为您推荐

报歉!评论已关闭.