• 破解基础知识学习笔记


    0x01   问题引入

    程序是什么语言编写的?程序到底有没有加壳?程序加了什么壳?

    0X02   前言解释

    一个程序从编译出来的时候一般都是没有壳的,不同编译器编译出的无壳程序也是不相同的,认识了不同编译器编译出来的无壳的程序,再去看无壳程序被加壳程序加壳后的样子就轻松很多,经过对比从而了解不同语言无壳程序和加壳后程序的特征是什么,特征主要从“入口点代码”、“程序区段”和“加载模块”等信息来确定。

    0X03   加壳对象

    近两年从行业看已经很少有新的windows加壳软件出现了,大部分开发者都转战移动平台,由于windows加密商业需求逐渐降低,所以加壳程序的增长也是有限了,并不会增加太多。本文会提供绝大多数目前还在流行使用的windows加壳和对应例子,以供学习参考。

    0X04   语言编译

    从目前国内接触到程序看,比较流行的编译器有:VC系列、易语言、.NET、Delphi,一些曾经用的很多但渐渐少了有:VB、ASM、BC++,还有一些用的比较少的有:AutoIt、PB、QT等。

    0X05   实战理解

    (1) VC6编译无壳程序  吾爱破解论坛学习脱壳实例_VC6.rar 

    OllyDbg 查看入口点代码如下:

    PEID查看区段如下:

       

    VC6特点:入口点代码是固定的代码,入口调用的API也是相同的,其中有的push地址不同程序可能不同;区段有四个也是固定的.text、.rdata、.data和.rsrc。

    ##   VS2008和VS2013编译无壳程序 吾爱破解论坛学习脱壳实例_VS.rar

    OllyDbg查看入口点代码如下:

     PEID查看区段如下:

       

     VS特点:入口点只有两行代码,一个CALL后直接JMP,第一个CALL进去后调用的API也是相同的;区段相对于VC6多了一个.reloc。

    (2)易语言编译无壳程序(独立编译和非独立编译)  吾爱破解论坛学习脱壳实例_易语言.rar

        (注:由于易语言独立编译是调用VC的链接程序编译的,所以从区段和入口代码特征和VC相同,下图为非独立编译带运行库)

    查看模块:

     (但这里我自己运行就没有这个,why?)------》原因:需再次确认(按下F9让程序运行,查看加载到的模块)

    查看核心代码:

    易语言特点:可以从程序里找一些call的调用最终都会走到上面核心代码图位置,这个方法可以区分和VC的区别,非独立编译比较容易识别,入口特征和模块特征都有krnln.fnr。(如上图)

    (3)Delhpi编译无壳程序   吾爱破解论坛学习脱壳实例_Delphi.rar 

    通过PEID查看区段如下:

      

     将程序拖入 OllyDby程序后 在第一个call回车,看到GetModuleHandle

     第一个call后回车:

    (4).NET编译无壳程序特征

    #   .NET特征查找方法

       点击模块.NET会加载很多dll系统API

    0X06     加壳识别

    (1)通过PEiDExeinfo PE查壳工具内置各种壳的十六进制特征码进行对比查壳,以下为优缺点分析:

    PEiD、FFI、FastScanner、RDG Packer Detector这类程序都是通过目录下的userdb.txt(查壳程序不同可能数据库名有出入)数据库进行加壳程序特征对比的,由于userdb.txt文件都是好多年前的了,全球基本都在用fly在09年发布的UpKPEiDSign,即使有新的也都基于他制作的版本之上进行更新的,而且更新都没有太好效果,由于原理都是通过加壳程序的特征进行对应,而这些加壳特征都是个人总结而来,对加壳程序的模糊搜索对比造成可靠性不高,特别是对于VMProtect这类加密壳程序,经常被识别成一些算七八糟都没见过的加壳内容,特别是显示UPolyX,基本都是误报,对新手的误导很严重,但对于传统的一些压缩壳的识别效果还是很好的,当然了,有利有弊,正是由于它的开放性特征库,也方便给大家提供自己编写特征的方法,来识别一些新的壳,期待做出自己的加壳特征来。

    Exeinfo PE属于新一代查壳工具,作者目前还在更新,它和PEiD的区别可能就在于它的特征库是作者自己维护,不支持外部修改,新版好像也开始支持外部特征库了,这款查壳工具的加壳特征库比较准确而且范围很广,如ThemIDA、WinLicense、VMProtect、ZProtect、Shielden都可以轻松识别出来,但对于具体加壳程序的版本都是模糊的,其实个人认为加壳版本真的不重要,这个后面再具体说道,Exeinfo PE可以说是目前可以说最好的查壳工具了,推荐大家使用。

      

    (2)通过入口特征和区段特征来识别

     如果要问一个程序是什么壳,仅给出一个PEiD的封面截图,这么少的内容让大牛们看着都揪心不知如何回答,

     到底哪些地方是和壳的特征息息相关的,暂时看来有【程序的区段信息】和【程序的入口特征信息】。

    ★ 区段信息可以通过PEiD的EP处点击获取到,比如下图的区段信息中可以轻松看出,这是一款Themida或者WinLicense的加壳程序。

         

    (怎么看出Themida或者WinLicense的加壳程序?rqjyewvp吗?->没有百度到T_T)

    Themida和Winlicense的脱壳特征,似乎是比较不同版本OEP的一些小特征?(此处存疑)https://www.cnblogs.com/lbkjw/p/3937743.html

    ★ 入口特征可以通过OllyDBG载入获得,载入后可以按一下“Ctrl+A”,让OD分析一下代码,就可以把入口点一些特征字符串分析出来,从下图的入口信息可以轻松看出,这是一   款Safengine加壳的程序,对于Shielden、Safengine、VProtect这类加壳程序都可以使用这种方法判断出来。

     

    (3)   程序加的都是什么壳

    目前来看,windows程序状态大体可以分为以下几种类型:未加壳、压缩壳、传统加密壳、代码虚拟化保护、.Net程序加密

     

  • 相关阅读:
    Asp.NET调用有道翻译API
    JSON C# Class Generator ---由json字符串生成C#实体类的工具
    让jQuery的contains方法不区分大小写
    javascript parseUrl函数(来自国外的获取网址url参数)
    typescript
    webpack 第二部分
    express node 框架介绍
    webpack 最新版
    es6 字符串 对象 拓展 及 less 的语法
    es6 的数组的方法
  • 原文地址:https://www.cnblogs.com/blazarstar/p/12866633.html
Copyright © 2020-2023  润新知