自己编写的小程序实现简单的加壳脱壳
2020-02-10 15:52:44 Author: bbs.pediy.com(查看原文) 阅读量:104 收藏

[原创]自己编写的小程序实现简单的加壳脱壳

2020-1-21 14:05 1102

首先自己编写一个 “Hello World!” 小程序,对它进行加壳
图片描述
步骤:

  1. 使用 LoadPE 打开程序,添加一个区段,默认名为 .NewSec
    图片描述
    图片描述
    添加完成后发现无法打开程序,是因为添加的虚拟大小、文件大小都是空的,还未填写任何内容
    图片描述
    接下来使用 LoadPE 编辑区段信息,添加虚拟大小和文件大小都为 0x200
    图片描述
    然后使用 010Editor 添加文件数据,新加的区段的起始地址是 0x9800,大小是 0x200,保存后再次打开程序,发现能够运行
    图片描述

    图片描述

  2. 修改 OEP,增加 OEP 代码
    将程序的入口点改为新添加区段的 RVA,原程序区段入口点为 0x11343
    图片描述
    转到原 OEP 处执行代码

  1. 加密代码段
    代码段信息
    图片描述
    在 010Editor 中操作,选中代码段
    图片描述
    异或加密代码段
    图片描述

    图片描述

  2. 增加解密代码段
    由于代码本身有重定位信息,加密之后重定位会出现问题,故应去掉随机基址
    在 010Editor 中将 40 81 改为 00 81
    将 .text 段的标志设为可写入
    图片描述
    在程序入口点编辑代码进行异或解密
    图片描述

脱壳目的:

  1. Cracker 脱壳、解密、破解
  2. 杀毒引擎解密、查杀病毒、扫描特征

脱壳步骤:

  1. 找到原始 OEP
    一般来说,找到原始 OEP 或跟踪到原始 OEP 时,程序都会完成解密操作
  2. dump 内存到文件
    当可执行文件在内存中完成解密后,将内存中代码数据转储(dump)到文件,就可以进一步分析
  3. 修复文件(常见于修复 IAT,重建导入表)
    从内存中转储的内存数据代码有一些与原文件中的内容不一致,比如 IAT 表,内存中 IAT 表会被初始化为函数地址表,而文件中 IAT 表与 INT 表内容一致,所以想要程序正常运行,一般都要修复 IAT,加壳后程序一般会自己处理导入表、IAT 及重定位等

脱自己写的壳:

  1. 找到原始 OEP
    单步跟踪,在 POPAD 附近寻找
  2. dump 内存到文件
    在原始 OEP 处进行 dump 内存,因为这时内存未做太多的初始化,右击,选择 用OllyDump脱壳调试进程
    图片描述
    填入当前模块的起始地址和原来的 OEP,取消选择 重建输入表,脱壳
  3. 修复 IAT 或修复导入表
    使用 ImportREC 15pb专用版
    图片描述
    打开该工具,选择脱壳进程,设置 OEP,方便查找 IAT,点击 自动查找IAT,获取 IAT 信息,点击 获取输入表,获取输入表信息,若输入表函数有无效的,就需要修复,最后将输入表信息转储到文件,完成修复

2020安全开发者峰会(2020 SDC)议题征集 中国.北京 7月!


文章来源: https://bbs.pediy.com/thread-257341.htm
如有侵权请联系:admin#unsafe.sh