什么是壳 的作用是什么h1>
简单举个例子:鸡蛋
“ 鸡蛋壳 ” 也是壳,其作用就是保护里面的蛋白和蛋黄。
“ 软件上的壳 ” 本质上就是代码,但是我们形象的称之为壳。其作用就是保护程序,确切的说是隐藏OEP( 原始入口点 )
在吃鸡蛋的时候,我们要做的第一件事,就是“ 脱壳 ”。
同样的,“ 软件上的壳 ”也是类似的,程序在运行的时候,首先就是运行壳的代码(程序自己给自己脱壳),当执行完壳代码后,再跳转到OEP(原始入口点)去执行程序本身的代码。
那么怎么辨别软件是否被加了壳h1>
上面我们简单明了的知道了什么是壳 (本质上就是代码 ),以及壳的作用是什么( 保护程序,隐藏OEP )。那么,如何区分程序有没有被加壳呢r> 以VS2017编写的一个控制台程序为例,简单输出一句话。
重要信息:
- EP区段:. text (即代码段)
- 连接器版本:14.16(VS2017)
- 结果信息栏:什么都没找到,说明没有壳。(仅针对这个程序而已)
-
重要信息:
- OEP:这个就是VS2017 Debug版 控制台版本的程序入口点(EP)
补充:
Debug版本:也是调试版本;不做任何优化,为开发人员提供强大的应用程序调试能力。
Release版本:通常称为发布版本,是为用户使用的,不允许在发布版本上进行调试
区别:Debug程序通常比Release程序要慢,尤其是处理视频方便Release要比Debug快很多;所以市面上的程序大多为Release版有壳程序
刚才看了没有加壳的程序,现在我们对这个程序进行简单的加壳;看下加壳后的程序又是怎么样的有加壳的程序有什么区别。(对这个程序的加壳操作,请访问(简单的手工加壳篇))
1、查壳:不要急着拖去OD,先了解下程序的基本信息。
重要信息:
-
EP区段:即入口点的区段,没有加壳程序的区段都是 . text(代码段)。
这里的EP区段是 . Pack段,可以推测这个程序很大概率上有加壳。 - 区段数量:有10个区段,说面这个程序很大概率上是Debug版的程序;在真正逆向的时候,程序多为Release版。
- 链接器版本:14.1*,的为VS2017
-
结果信息栏:什么都没找到,结果只有两种。要么没有加壳,要么这个是未知的壳。
由于EP区段并不是. text段(代码段),所以这个很有可能是未知的壳
2、导入表:
5、双击程序,这个是控制台程序。所以有三种可能,VS的Debug、Release、汇编写的。
首先,不可能是汇编写的,因为只是简单的输出一句话,就用了38.2KB。完全不符合汇编的特点。
再比较Debug 和 Release 的入口特征(查特征请访问 不同语言程序的特征),发现都匹配不上,所以可以断定这个程序就是被加了壳。对于加了壳的程序来说,用户执行的实际上是外壳程序,外壳程序负责把用户原来的程序在内存中解压缩,并把控制权交还给解密后的真正程序,这一整个都是在内存中运行的,对于用户来说是透明的。
补充:什么是OEP 是EP h6>
EP:程序入口点
OEP:原始入口点
先说EP(EntryPoint)入口点的意思,所谓的EP就是拖到OD后,在主模块入口点断下的位置(因为程序从入口点开始执行)。
至于OEP(Original EntryPoint),对于没有加壳的程序来说,EP和OEP都是一样的;而对于加了壳的程序来说,EP就是壳代码的开始执行的位置,而OEP则是加壳前的程序入口点(原程序的入口点)。
所以,脱壳就是找OEP;只有找到原始的入口点才能开始真正的逆向分析程序。至此,壳的基础知识就到此为止了。
写博客纯属就是记笔记,加深对知识的理解;所以还大家多多指教,要是发现错误的地方,还请大家指正。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!