• 脱壳学习之加壳的概念


    加壳
    加壳的主要目的是压缩大小和阻碍分析。加壳以后的可执行文件会将原来的可执行文件作为数据存储。
    通过加密和一些反逆向技术(对抗反汇编?,反调试,反虚拟化等等)来让程序难以分析。

    脱壳存根
    被加壳程序中的脱壳存根由操作系统加载,然后它负责加载原始程序。
    固可执行程序的入口点指向脱壳存根。
    对程序进行静态分析需要先脱壳。
    将原始程序脱壳到内存中
    解析原始可执行文件的所有导入函数
    将可执行程序转型到原始的程序入口点处 OEP

    解析导入函数表
    对于加壳的可执行文件,Windows加载器无法读取其真正的导入函数表。需要脱壳存根负责解析导入函数表。
    最常使用方法是仅导入LoadLibrary GerProcessAddress
    另一种是保留原始导入函数表
    第三种为原始导入表的每一个DLL留一个导入函数。
    最后一种 不需要任何导入函数,利用shellcode获得LoadLibrary GerProcessAddress

    加壳前的原可执行文件

    头部
    导入函数表
    导出函数表
    .text
    .data
    .rsrc



    加壳后的原可执行文件

    头部
    脱壳存根
    加壳的原先代码

    加载到内存的程序,入口点在脱壳存根

    头部
    导出函数表
    .text
    .data
    .rsrc
    脱壳存根


    导入表重构 现在指向OEP

    头部
    导出函数表
    .text
    .data
    .rsrc
    脱壳存根
    导入函数表

    但值得注意的是,此时依然包含者脱壳存根。说明脱壳以后的PE文件和原始PE文件不完全一样。

  • 相关阅读:
    20189222 《网络攻防技术》第一周作业
    apue.h 运行UNIX环境高编程序
    fflush()函数
    线性链表如何选择二级指针还是一级指针
    scanf()gets()fgets()区别
    淺談Coach思考模式
    Hello World
    C语言I博客作业04
    python模块:logging
    python模块:subprocess
  • 原文地址:https://www.cnblogs.com/Crisczy/p/8245605.html
Copyright © 2020-2023  润新知