飘云阁安全网

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 5768|回复: 21

[原创] 脱壳入门基础

  [复制链接]
  • TA的每日心情
    开心
    2022-7-25 09:32
  • 签到天数: 259 天

    [LV.8]以坛为家I

    发表于 2011-11-10 08:00:14 | 显示全部楼层 |阅读模式
    偶也是一个刚入门不久的人,特写一点东西献给比我跑慢一步的刚进门的朋友,高手老鸟请漂过呵。。。。。
    本贴是原创,用我自己的语言来通俗的描述,绝不摘抄其它任何难懂的教程。

    1,基础知识
         讲壳之前,先简单说几个基础概念:
        PE文件:其实大多数EXE文件,都是一个PE格式的文件,这个格式会规定好哪些数据存放在哪个位置的,也因为多数的EXE文件存放数据有规则的,
                      所以给操作系统带好许多方便,也给破解者和加密者带来许多惊喜和烦恼。这个PE文件格式我在这里不讲了,对初学者来说,知道有这个东西,
                     有这么一个规律就行了。

       OEP入口点:操作系统运行一个EXE时,第一步是把PE格式的文件,按一定的规律找到每部分数据,然后复制到内存里,其实有一部分叫代码段。
                    全部复制完后,就开始这个EXE,这时,控制权就交给代码段第一行。可别小看这个入口点,这是兵家必争之地啊,因为这入口点指向谁,谁就第一个获取
                    最先的控制权,所以说,对于加壳的EXE来说,这个入口点并不是程序本身的代码段,而是壳的汇编代码。


    2,什么叫壳
         通俗一点讲,其实就是给你的EXE文件,添加一段特殊的汇编代码,我们叫壳代码吧。这段壳代码抢了执行优先权,也就是OEP指向这段代码第一行,这样子,
         EXE运行时,就先运行壳的代码,然后再跑回来运行原程序的代码段,如此,这段优先于原程序代码段执行的程序,就叫壳了。

    3,壳是如何加密的
        有人会问,壳就是这么简单吗,只改了OEP而已吗?呵呵,肯定不只这些,下面给大家说说加壳时都做了些什么,每种壳不一样,
        a)有的把PE文件里的代码和数据转换格式,俗称压缩,破解者来说,这样一压缩就很难一下子轻易猜到是怎么转换更不知怎么还原了,
        而且压缩后可能原EXE文件大小变小几倍了,是个不错的思路;
       b) 还有可能是修改了输入表,这个内容如果展开来讲,可能几千字也说不完,这里我用简单的描述给大家有个概念先:因为每个程序都会调用windows的API,
        而调用哪个API呢,API地址是什么呢,这些都写在PE文件里一个叫输入表的数组里,如此,加壳器去修改这个输入表的数据,那么破解者如果不还原这个输入表,
        EXE文件肯定运行不成功,如此,又给脱壳解密者带来更大的困难了;
       c)还有可能把原PE文件里一些代码搬到壳代码里面,这样的话,如果脱壳者破生生把脱的代码删除,EXE也会运行失败,等于破解失败。
       以上说了三种比较常见的方式让大家有个初步理解后,终于明白什么是壳了吧,接下来,就有问题了:

    4,加密后的PE文件如何让windows运行的
       先想象你自己就是一个加密者,也就是一个加壳的人,你按前面的方式给EXE加壳加密了,可是,PE文件被你这么一改,windows肯定认不出来了,直接拿去给操作系统运行,一定失败,因为操作系统只能运行那一份没有被你改过的PE文件。那怎么办呢?加壳者思路来了:还记得前面说过有一段壳代码,抢了OEP,抢了运行的优先权吗,嗯,没错,这段代码就是还原给操作系统运行机制的。当壳代码拿到运行优先权后,接下来把之前加密的信息还原到内存里,然后再把控制权交给原来的EXE程序,如此就神不知鬼不觉了。
        有人可能会问,干嘛又加密又解密的,这样不是白搭了吗?呵呵,肯定不是了,你要知道,这时候,保存在硬盘里的是加壳后的加密PE文件,而运行后,再悄悄地还原到内存里给操作系统,这样的话,大大增加了破解者的难度了,很好地保护了你的软件。
        有人更可能问,难道加壳就只做这些,那别人到内存里把解密后的数据保存到文件里,不就得到原来没加壳的EXE了吗,理论上是这样,早期的壳就是这么简单的,但是这个问题连你这些初学者想得到,加密和解密的高手们更想得到了,既然加壳的代码拿到运行的优先权,就可以为所欲为了,大家会各出奇谋,让你取不到内存的数据,或者取到内存的数据是错的。,,,至少有什么奇谋,等偶成为真正的高手后,回头给大家连载几篇文章共享经验给大家。

    5,壳是如何解密的
        到这里,我们对壳的理解是,加壳后的程序,PE文件内容是乱的,只有加壳者才看得明白,但是加壳者留下一段代码在OEP处,解密告诉操作系统。
        如此,我们这些要脱壳的人,就牢牢抓住解密者留下那段OEP处的代码,跟踪它,你可能会得到全部的解密脱壳过程。
        没错,这是个好办法,也是一个通用的办法,我想将来我成为高手了,我也会这么做。
        但是这个办法是不是太累了呢,看这些OEP处的壳代码,是汇编代码啊,能不看尽量不看,好累人的。于是,前人留给我们一些快捷的经验:
        1,先找真正的OEP点:壳代码不会一直抢着控制权,它解密完后,会把控制权交给原程序的第一代码行,这就是OEP,当运行到真正的OEP时,
             说明内存里已经全部还原为加壳前的EXE文件内容了,这里,把内存里所有数据保存为PE文件,一般能拿到脱壳后的原EXE文件内容。
             (把内存数据保存为文件,OD能做到,其它一些PE工具也行,大家网上找找)
        2,修复输入表:有时找真正OEP点保存后的PE文件,运行出错,是因为输入表被加壳者修改了,这时也要用一些工具帮你修复。
        简单的脱壳,上面两点就够了,这里是给大家一些概念和思路,但是一些猛壳,可能做的事情不只这些,比如还有资源表要修复,等等。
        论坛里好多高手也因此在各出奇谋,怎么对付各种加密壳,这是一个非常艰苦的过程,偶目前只能带大家走到这里,接下来,大家多努力和高手们学习,
        相信你们会有更好的解密方法的。

    6,怎么知道程序加了壳
        加壳前和加壳后,都是一个PE文件,一样能运行,我们是怎么知道一个EXE被加壳呢,这是我学加壳后的第一个问题,相信也是许多人想问的:
        一般来说,加壳后的文件有以下特征:
       1,用PEiD这个工具一般能直接查到是否加了什么壳。
       2,有些壳做了驱动保护用OD加载失败,程序退出
       3,有些壳让某些原程序的汇编代码出现许多混乱,让你读起来困难重重,可是不影响操作系统运行。
       4,加壳后用静态反编译后,你会得到一份不知所云的汇编代码。

        等等,当然特征许多了,所以说,你想破解一个程序,最好先用PEiD来查查它是什么语言开发的,加了什么壳
  • TA的每日心情
    开心
    2022-5-25 06:08
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    发表于 2011-12-2 12:46:05 | 显示全部楼层
    新手学习,不错
  • TA的每日心情
    开心
    昨天 07:33
  • 签到天数: 1570 天

    [LV.Master]伴坛终老

    发表于 2014-12-8 19:10:28 | 显示全部楼层
    学习了,谢谢详细介绍。
  • TA的每日心情
    开心
    昨天 09:43
  • 签到天数: 939 天

    [LV.10]以坛为家III

    发表于 2018-10-17 06:07:53 | 显示全部楼层
    初学者的引路石。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-6-25 10:26
  • 签到天数: 32 天

    [LV.5]常住居民I

    发表于 2019-1-19 14:02:47 | 显示全部楼层

    学习了,谢谢详细介绍。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2019-3-9 13:12
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2019-1-31 15:13:41 | 显示全部楼层
    新手学习一下,不错哦~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    3 天前
  • 签到天数: 74 天

    [LV.6]常住居民II

    发表于 2019-4-24 09:39:21 | 显示全部楼层
    新手上路必看,peid真的是个很棒的工具,开工第一步就是看看有没有壳
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2019-7-16 10:15
  • 签到天数: 10 天

    [LV.3]偶尔看看II

    发表于 2019-7-5 16:57:19 | 显示全部楼层
    好文章,还有后续吗
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2020-7-2 13:06
  • 签到天数: 95 天

    [LV.6]常住居民II

    发表于 2019-7-5 18:28:54 | 显示全部楼层
    新手上路,谢谢分享
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2022-4-12 20:43
  • 签到天数: 378 天

    [LV.9]以坛为家II

    发表于 2019-12-2 19:19:46 | 显示全部楼层
    不错,先学习下
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    小黑屋|手机版|Archiver|粤公网安备 44010602010026号|飘云阁安全网 ( 粤ICP备15107817号-2 )

    Powered by Discuz! Copyright © 2001-2022, Tencent Cloud.

    快速回复 返回顶部 返回列表