文章目录

  • 脱壳
    • 0.前置知识
    • 1 .壳的基础知识
      • 1.1壳的加载过程
      • 示例:分析一个简单的aspack壳

脱壳

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壳相关推荐

  1. 脱壳入门(三)之UPX压缩壳

    脱壳入门(三)之UPX压缩壳 一.找OEP 查壳:UPX壳.链接器版本2.25(可能是Delphi程序).区段信息 根据ESP定律寻找OEP OEP定律原理:壳代码就像一个函数,进入时会开辟堆栈.保存 ...

  2. 基础006 宏基因组入门理论以及分析环境的部署

    本文"植物微生物组"公众号原创,ID: plantmicrobiome 作者:zhiwen 原文链接:基础006 宏基因组入门理论以及分析环境的部署 一.宏基因组核心思想 鉴定菌群 ...

  3. 【Android 逆向】整体加固脱壳 ( DEX 优化流程分析 | dvmDexFileOpenPartial | dexFileParse | 脱壳点 | 获取 dex 文件在内存中的首地址 )

    文章目录 前言 一.DexPrepare.cpp 中 rewriteDex() 方法分析 二.DvmDex.cpp 中 dvmDexFileOpenPartial() 方法分析 ( 脱壳点 ) 三.D ...

  4. 【Android 逆向】整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 dvmContinueOptimizati() 函数分析 )

    文章目录 前言 一.DexPrepare.cpp 中 dvmContinueOptimizati() 方法分析 前言 上一篇博客 [Android 逆向]整体加固脱壳 ( DEX 优化流程分析 | D ...

  5. Java-Map从入门到性能分析3【LinkedHashMap(性能耗时对比、模拟LRU缓存)、TreeMap(排序、性能对比)】

    [视频网址]:慕课网--Map从入门到性能分析 简介:Map是开发中,使用频率最高的知识点之一,Map家族也有很多成员,例如HashMap,LinkedMap等, 怎样更好地使用Map家族的这些成员, ...

  6. Java-Map从入门到性能分析2【HashMap的底层原理、构造方法优化、常用方法】

    [视频网址]:慕课网--Map从入门到性能分析 简介:Map是开发中,使用频率最高的知识点之一,Map家族也有很多成员,例如HashMap,LinkedMap等, 怎样更好地使用Map家族的这些成员, ...

  7. Java-Map从入门到性能分析1【Map初识、Map通用方法、HashMap的使用(遍历方法、性能分析)】

    [视频网址]:慕课网--Map从入门到性能分析 简介:Map是开发中,使用频率最高的知识点之一,Map家族也有很多成员,例如HashMap,LinkedMap等, 怎样更好地使用Map家族的这些成员, ...

  8. 机器学习入门-肝病预测分析

    机器学习入门-肝病预测分析 导入函数和支持包 1.数据描述 2.载入数据 3.查看Type类型的数量 4.检查是否存在空值 5.查看描述性统计量 6.画出热力图并分析特征相关性 7.对数据进行标准化 ...

  9. 竞赛入门-数据探索性分析(EDA)

    竞赛入门-数据探索性分析 总览 数据科学库 Numpy Scipy Pandas 可视化库 matplotlib seaborn missingno库 载入数据 数据总揽 数据检测 缺失值检测 异常值 ...

  10. 工具脱ASPack壳

    工具脱ASPack壳 教程下载地址:http://pan.baidu.com/netdisk/singlepublic?fid=833416_101656743 本文转自 zhangguangyi 5 ...

最新文章

  1. 如何在DataGrid里面产生滚动条而不滚动题头
  2. 全球第三的晶圆代工厂 也要被卖了?
  3. 树莓派_FTP服务器的搭建
  4. 奥特曼系列ol光元在哪个服务器,奥特曼系列ol光元怎么合理使用
  5. 腾讯云发布专有云TCE矩阵,让企业用上金融级合规专有云
  6. 通过路由远程计算机重启,华为无线路由器三种常用重启的方法
  7. actionscript 3 mysql driver_在ActionScript 3 MySql Driver连接MYSQL数据库经验分享
  8. js判断字符串中某个字母出现次数最多
  9. 二叉搜索树的第k个节点
  10. 对*.ini文件的增删改查
  11. C++中rapidxml用法及例子
  12. 工业级Pass云平台SpringCloudAlibaba综合项目实战(二):解决方案和工作效率
  13. 通识2——“视频编码”的相关概念
  14. 国外苹果id_爆料者称苹果仍在继续研发iPhone屏下Touch ID
  15. 美丽汤的请求 - 小甜饼豆瓣爬虫
  16. 几道经典逻辑推理题,提高你的逻辑思考能力
  17. 漫步数理统计二十三——泊松分布
  18. Windows--从dos下进入D盘,切换盘符
  19. APPium简介及安装
  20. 国防科技大学计算机学院徐凯,国防科技大学徐凯教授学术报告

热门文章

  1. Codeforces Round #531 (Div. 3) F.Elongated Matrix(状压dp)
  2. html 实现动态在线预览word、excel、pdf等文件(方便快捷)
  3. 存储容量byte 流量单位byte
  4. java 银行账户类
  5. linux mv文件个数,关于linux:mv一个文件,其中包含Shell脚本中的空格
  6. sqlserver加载驱动失败的问题
  7. PHP没有工作经验简历怎么写,没有工作经验应届生如何写简历呢?
  8. sha1校验工具 linux,Linux怎么校验SHA1和MD5
  9. UOJ#449. 【集训队作业2018】喂鸽子(期望dp)
  10. 如何快速辨别工业级POE交换机和普通交换机的不同?