脱壳第一篇(基础知识)

什么是壳 的作用是什么h1>

简单举个例子:鸡蛋

“ 鸡蛋壳 ” 也是壳,其作用就是保护里面的蛋白和蛋黄。
“ 软件上的壳 ” 本质上就是代码,但是我们形象的称之为壳。其作用就是保护程序,确切的说是隐藏OEP( 原始入口点 )

在吃鸡蛋的时候,我们要做的第一件事,就是“ 脱壳 ”。
同样的,“ 软件上的壳 ”也是类似的,程序在运行的时候,首先就是运行壳的代码(程序自己给自己脱壳),当执行完壳代码后,再跳转到OEP(原始入口点)去执行程序本身的代码。

那么怎么辨别软件是否被加了壳h1>

上面我们简单明了的知道了什么是壳 (本质上就是代码 ),以及壳的作用是什么( 保护程序,隐藏OEP )。那么,如何区分程序有没有被加壳呢r> 以VS2017编写的一个控制台程序为例,简单输出一句话。

重要信息:
  1. EP区段:. text (即代码段)
  2. 连接器版本:14.16(VS2017)
  3. 结果信息栏:什么都没找到,说明没有壳。(仅针对这个程序而已)
  4. 重要信息:
    1. OEP:这个就是VS2017 Debug版 控制台版本的程序入口点(EP)
    补充:

    Debug版本:也是调试版本;不做任何优化,为开发人员提供强大的应用程序调试能力。
    Release版本:通常称为发布版本,是为用户使用的,不允许在发布版本上进行调试
    区别:Debug程序通常比Release程序要慢,尤其是处理视频方便Release要比Debug快很多;所以市面上的程序大多为Release版

    有壳程序

    刚才看了没有加壳的程序,现在我们对这个程序进行简单的加壳;看下加壳后的程序又是怎么样的有加壳的程序有什么区别。(对这个程序的加壳操作,请访问(简单的手工加壳篇)

    1、查壳:不要急着拖去OD,先了解下程序的基本信息。

    重要信息:
    1. EP区段:即入口点的区段,没有加壳程序的区段都是 . text(代码段)。
      这里的EP区段是 . Pack段,可以推测这个程序很大概率上有加壳。
    2. 区段数量:有10个区段,说面这个程序很大概率上是Debug版的程序;在真正逆向的时候,程序多为Release版。
    3. 链接器版本:14.1*,的为VS2017
    4. 结果信息栏:什么都没找到,结果只有两种。要么没有加壳,要么这个是未知的壳。
      由于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进行处理,非常感谢!

上一篇 2019年11月22日
下一篇 2019年11月22日

相关推荐