脱壳入门(一)之分析Aspack壳
文章目录
- 脱壳
- 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结构
- 导入表结构
- PE文件的Magic Code是什么
- 熟悉汇编指令
1 .壳的基础知识
1.1壳的加载过程
壳和病毒类似,都需要比原程序代码更早获得控制权.壳修改了原程序执行文件的组织结构,从而能够比原代码早获得控制权,而且不会影响原代码的运行.常见的壳的加载过程
- 保存入口参数
- 获取壳本身需要的API地址
- 解密原程序各个区块的数据
- IAT初始化
- 重定位项的处理
- HookAPI
- 跳转到程序原入口点(OEP)
示例:分析一个简单的aspack壳
1.保存寄存器环境
一般是pushad
2.加载一些必要的API
获取VirtualAlloc / VirtualFree / VirtualProtect API函数地址
3.解密解压缩代码
根据堆栈可以看出参数的作用,0x1800是申请空间大小
申请了两块内存空间,一块大小0x1800,没分析出保存的是什么,应该是和加密算法有关,另一块大小是(区段大小+0x10E),保存的是解密后的区段代码。
循环修复call,jmp跳转的地址(根据分析是修改所有首字节是05的地址)
4.修复重定位
修复重定位的公式:
重定位表中存储两个有用字段:
需要重定位的分页地址
需要重定位的分页偏移
重定位分为两步:
计算出 重定位地址,要重定位的地址=模块基地址+分页地址+分页偏移
修复要重定位的地址中数据,[要重定位的地址] 默认模块基地址 + 当前模块基地址
5.填充IAT
原理:
① 从导入表中获取dll名称
② 从导入表中的INT,获取函数名称或者序号
③ 通过GetModuleHandleA或者LoadLibraryA获取模块基地址 通过GetProcAddress获取函数地址
④ 将函数地址填充到对应IAT数组中
根据第四个字段可以找到导入模块名字
双层循环
- 外层遍历导入模块
- 内层遍历DLL模块导入函数,填充IAT表
5.修改属性,跳转原始OEP
脱壳入门(一)之分析Aspack壳相关推荐
- 脱壳入门(三)之UPX压缩壳
脱壳入门(三)之UPX压缩壳 一.找OEP 查壳:UPX壳.链接器版本2.25(可能是Delphi程序).区段信息 根据ESP定律寻找OEP OEP定律原理:壳代码就像一个函数,进入时会开辟堆栈.保存 ...
- 基础006 宏基因组入门理论以及分析环境的部署
本文"植物微生物组"公众号原创,ID: plantmicrobiome 作者:zhiwen 原文链接:基础006 宏基因组入门理论以及分析环境的部署 一.宏基因组核心思想 鉴定菌群 ...
- 【Android 逆向】整体加固脱壳 ( DEX 优化流程分析 | dvmDexFileOpenPartial | dexFileParse | 脱壳点 | 获取 dex 文件在内存中的首地址 )
文章目录 前言 一.DexPrepare.cpp 中 rewriteDex() 方法分析 二.DvmDex.cpp 中 dvmDexFileOpenPartial() 方法分析 ( 脱壳点 ) 三.D ...
- 【Android 逆向】整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 dvmContinueOptimizati() 函数分析 )
文章目录 前言 一.DexPrepare.cpp 中 dvmContinueOptimizati() 方法分析 前言 上一篇博客 [Android 逆向]整体加固脱壳 ( DEX 优化流程分析 | D ...
- Java-Map从入门到性能分析3【LinkedHashMap(性能耗时对比、模拟LRU缓存)、TreeMap(排序、性能对比)】
[视频网址]:慕课网--Map从入门到性能分析 简介:Map是开发中,使用频率最高的知识点之一,Map家族也有很多成员,例如HashMap,LinkedMap等, 怎样更好地使用Map家族的这些成员, ...
- Java-Map从入门到性能分析2【HashMap的底层原理、构造方法优化、常用方法】
[视频网址]:慕课网--Map从入门到性能分析 简介:Map是开发中,使用频率最高的知识点之一,Map家族也有很多成员,例如HashMap,LinkedMap等, 怎样更好地使用Map家族的这些成员, ...
- Java-Map从入门到性能分析1【Map初识、Map通用方法、HashMap的使用(遍历方法、性能分析)】
[视频网址]:慕课网--Map从入门到性能分析 简介:Map是开发中,使用频率最高的知识点之一,Map家族也有很多成员,例如HashMap,LinkedMap等, 怎样更好地使用Map家族的这些成员, ...
- 机器学习入门-肝病预测分析
机器学习入门-肝病预测分析 导入函数和支持包 1.数据描述 2.载入数据 3.查看Type类型的数量 4.检查是否存在空值 5.查看描述性统计量 6.画出热力图并分析特征相关性 7.对数据进行标准化 ...
- 竞赛入门-数据探索性分析(EDA)
竞赛入门-数据探索性分析 总览 数据科学库 Numpy Scipy Pandas 可视化库 matplotlib seaborn missingno库 载入数据 数据总揽 数据检测 缺失值检测 异常值 ...
- 工具脱ASPack壳
工具脱ASPack壳 教程下载地址:http://pan.baidu.com/netdisk/singlepublic?fid=833416_101656743 本文转自 zhangguangyi 5 ...
最新文章
- 如何在DataGrid里面产生滚动条而不滚动题头
- 全球第三的晶圆代工厂 也要被卖了?
- 树莓派_FTP服务器的搭建
- 奥特曼系列ol光元在哪个服务器,奥特曼系列ol光元怎么合理使用
- 腾讯云发布专有云TCE矩阵,让企业用上金融级合规专有云
- 通过路由远程计算机重启,华为无线路由器三种常用重启的方法
- actionscript 3 mysql driver_在ActionScript 3 MySql Driver连接MYSQL数据库经验分享
- js判断字符串中某个字母出现次数最多
- 二叉搜索树的第k个节点
- 对*.ini文件的增删改查
- C++中rapidxml用法及例子
- 工业级Pass云平台SpringCloudAlibaba综合项目实战(二):解决方案和工作效率
- 通识2——“视频编码”的相关概念
- 国外苹果id_爆料者称苹果仍在继续研发iPhone屏下Touch ID
- 美丽汤的请求 - 小甜饼豆瓣爬虫
- 几道经典逻辑推理题,提高你的逻辑思考能力
- 漫步数理统计二十三——泊松分布
- Windows--从dos下进入D盘,切换盘符
- APPium简介及安装
- 国防科技大学计算机学院徐凯,国防科技大学徐凯教授学术报告
热门文章
- Codeforces Round #531 (Div. 3) F.Elongated Matrix(状压dp)
- html 实现动态在线预览word、excel、pdf等文件(方便快捷)
- 存储容量byte 流量单位byte
- java 银行账户类
- linux mv文件个数,关于linux:mv一个文件,其中包含Shell脚本中的空格
- sqlserver加载驱动失败的问题
- PHP没有工作经验简历怎么写,没有工作经验应届生如何写简历呢?
- sha1校验工具 linux,Linux怎么校验SHA1和MD5
- UOJ#449. 【集训队作业2018】喂鸽子(期望dp)
- 如何快速辨别工业级POE交换机和普通交换机的不同?