脱壳入门(一)之分析Aspack壳

脱壳入门(一)之分析Aspack壳文章目录脱壳0.前置知识1.壳的基础知识1.1壳的加载过程示例:分析一个简单的aspack壳脱壳0.前置知识熟悉PE文件结构PE文件的MagicCode是什么MZ头,PE头PE文件头的信息有哪些?运行平台、时间戳、PE文件属性、区段数量、扩展头的大小PE文件的扩展头的信息有哪些?EP的RVA、ImageBase(400000)、代码段起始地址、数据段起始地址…

脱壳

0.前置知识

  • 熟悉PE文件结构
    • PE文件的Magic Code是什么
      • MZ头,PE头
    • PE文件头的信息有哪些?
      • 运行平台、时间戳、PE文件属性、区段数量、扩展头的大小
    • PE文件的扩展头的信息有哪些?
      • EP的RVA、ImageBase(400000)、代码段起始地址、数据段起始地址 数据目录表、数据目录表项数量、文件对齐、内存对齐、映像总大小
    • PE文件中区段信息有哪些?
      • 区段名称、虚拟地址、虚拟大小、文件偏移、文件大小(对齐后)、区段属性(C0000020、60000020)
    • PE文件中数据目录表有哪些?
      • 导出表、导入表、异常表、tls表、资源表、IAT、重定位表
    • 一个进程,3环有哪些数据结构
      • 进程环境块(PEB)、线程环境块(TEB)、tls结构
    • 导入表结构
      导入表结构
  • 熟悉汇编指令

1 .壳的基础知识

1.1壳的加载过程

​ 壳和病毒类似,都需要比原程序代码更早获得控制权.壳修改了原程序执行文件的组织结构,从而能够比原代码早获得控制权,而且不会影响原代码的运行.常见的壳的加载过程

  1. 保存入口参数
  2. 获取壳本身需要的API地址
  3. 解密原程序各个区块的数据
  4. IAT初始化
  5. 重定位项的处理
  6. HookAPI
  7. 跳转到程序原入口点(OEP)

示例:分析一个简单的aspack壳

1.保存寄存器环境

一般是pushad

。。。

2.加载一些必要的API

获取VirtualAlloc / VirtualFree / VirtualProtect API函数地址
在这里插入图片描述

3.解密解压缩代码

在这里插入图片描述

根据堆栈可以看出参数的作用,0x1800是申请空间大小

在这里插入图片描述
申请了两块内存空间,一块大小0x1800,没分析出保存的是什么,应该是和加密算法有关,另一块大小是(区段大小+0x10E),保存的是解密后的区段代码。
在这里插入图片描述

在这里插入图片描述
循环修复call,jmp跳转的地址(根据分析是修改所有首字节是05的地址)
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4.修复重定位

修复重定位的公式:

重定位表中存储两个有用字段:

  1. 需要重定位的分页地址

  2. 需要重定位的分页偏移

重定位分为两步:

  1. 计算出 重定位地址,要重定位的地址=模块基地址+分页地址+分页偏移

  2. 修复要重定位的地址中数据,[要重定位的地址] ­ 默认模块基地址 + 当前模块基地址

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

5.填充IAT

原理:

① 从导入表中获取dll名称

② 从导入表中的INT,获取函数名称或者序号

③ 通过GetModuleHandleA或者LoadLibraryA获取模块基地址 通过GetProcAddress获取函数地址

④ 将函数地址填充到对应IAT数组中

在这里插入图片描述
根据第四个字段可以找到导入模块名字
在这里插入图片描述

双层循环

  • 外层遍历导入模块
  • 内层遍历DLL模块导入函数,填充IAT表

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

5.修改属性,跳转原始OEP

在这里插入图片描述

今天的文章脱壳入门(一)之分析Aspack壳分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/24136.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注