Android逆向——脱壳解析

“壳”是一种对程序进行加密的程序,“壳”形象地表现了这个功能。我们可以把被加壳的程序当成食物,而加壳程序就是在外面加上一层坚硬的外壳,防止别人去窃取其中的程序。加壳后的程序依然可以被直接运行。在程序运行时壳的代码先运行,然后再运行原来的程序。主要目的是为了隐藏程序的OEP(入口点),防止外部软件对程序的反汇编分析或动态分析。许多病毒通过加壳来达到免杀的目的,但壳也用在保护正版软件不被破解。

脱壳的基础知识

壳是怎么装载的?

壳自从加到程序上以后就连在一起了,即对程序进行保护,防止被修改,也就是壳把程序给包裹起来了,而且原程序的数据也被压缩了。

装载的时候通常是先执行壳后再跳到真正的原程序OEP(程序入口点),这时开始运行原先没加壳的程序。运行顺序:执行带壳文件——执行壳——执行到程序入口点——运行未加壳的程序。

壳的分类

壳出于程序作者想对程序资源压缩、注册保护的目的,壳一般分为压缩壳和加密壳两类。

压缩壳:一般只对文件进行压缩处理,既压缩区段和一些资源压缩,以减少文件体积为目的如:ASPack、UPX、PECompact等

加密壳:跟压缩壳正好相反,一般是牺牲减少体积为代价,对文件进行加密处理,用上各种反跟踪技术保护程序不被调试、脱壳,如:ASProtect、Armadillo、EXECryptor等

但随着加壳技术的发展,这两类壳之间的界限越来越模糊,很多加壳软件既有压缩功能也有保护性能,而且现在很多加密壳达到壳中带肉,肉中带壳的地步了。

OEP (程序入口点)

OEP:Original Entry Point ,程序加壳前真正的入口点。

脱壳的基本步骤

查壳(PEID、FI、PE-SCAN)—>寻找OEP(OD)—>脱壳/Dump(LordPE、PeDumper、OD自带的脱壳插件、PETools)—>修复(Import REConstructor)

脱壳的演示

对于不同的壳,网上有很多对应的脱壳工具。在脱壳前一般先用查壳工具,查加的是什么壳,然后找到对应的脱壳工具进行脱壳。以之前的UPX壳压缩的upx_test.exe为例,进行脱壳演示。图是PEiD查壳结果,通过查壳我们知道这是UPX的壳,然后用对应的脱壳工具进行脱壳。

这里用的是UPXshell进行演示。将程序拖入到UPXshell中单击“GO”即可得到脱壳之后的程序。脱壳之后会覆盖原来的带壳的程序,所以在脱壳前要做好备份,如图所示:

脱壳是逆向分析的必备技能之一。虽然用软件脱壳十分方便,但还是会存在许多限制,如要找对应的脱壳软件,较新、较强的壳一般无法用软件脱壳等。所以还是有必要了解一些脱壳的基本知识。

(1)OEP

脱壳的第一步是找到源程序的OEP(Original Entry Point)。OEP标志是否已经运行到源程序。对于一些简单的压缩壳,找到OEP就意味着已经脱壳成功。

单步调试法:加壳程序开始运行时,栈的情况与解压后主程序的栈情况完全相同。所以很多加壳程序载入 OD 后都会停留在 pushad/pushfd 处,将原来的栈先保存下来,所以,pushad/pushfd肯定就有对应的popad/popfd。只要找到popad/popfd就可以快速地找到OEP。将upx_test.exe载入OllyDbg,一直按F8,如果遇到向上跳转就按F4运行到下一行。直到遇到popad,下面会有一个比较大的jmp跳转。跳转之后的地方就是程序的OEP,如图所示:

这里只介绍了比较简单而且比较通用的一种脱壳方法。实际中还有很多巧妙的方法,如ESP定律、利用编辑语言的特点等。

(2)内存映像转存

找到OEP之后,程序已经在内存中,这时内存中的程序最接近加壳前的程序。只需要将内存中的映像转存出来,一般的壳就结束了。内存映像转存(dump)工具有好多,如LordPE、PETools。而且OllyDbg中也有OllyDump插件可以使用。

下面就可以进行脱壳了。右键单击“push ebp”选择dump process,单击“dump”按钮脱壳。会生成一个脱壳后的程序,默认文件名会在原文件名后面加上“_dump”。最后进行查壳,显示已经无壳,并且成功运行,表示脱壳成功,如图所示:

(3)重建导出表

很多加密壳会对导入表做手脚。这时,就算成功脱壳,程序也是无法运行的。在导入表中起关键作用的是IAT,所以很多时候修复导出表也叫修复IAT。可以使用importREC重建导出表,如图所示:

以上为Android逆向的简单脱壳理解,Android逆向作为安全板块的应用还需要学习很多技术,如下路线图所示:摘要《Android逆向开发》

常用脱壳方法

  1. 单步跟踪法
  2. ESP定律法
  3. 内存镜像法(二次断点法)
  4. 一步到达OEP
  5. 最后一次异常法
  6. 模拟跟踪法
  7. “SFX”法

这些都是一些常用的脱壳方法,更详细的逆向内容记载在上面资料当中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/106730.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker部署jenkins

目录 一、jenkins原理二、Docker部署jenkins1.下载jenkins镜像文件2.查看下载的jenkins镜像3.创建Jenkins挂载目录并授权权限4.创建并启动Jenkins容器5.查看jenkins是否启动成功6.查看docker容器日志7.配置镜像加速8.访问Jenkins页面,输入ip地址加上9000端口9.获取管…

MySQL表空间

MySQL表空间 文章目录 MySQL表空间1. MySQL中的表1.1 IOT表1.2 InnoDB逻辑存储结构2. 独立表空间2.1 段 segment2.1.1 段的概念2.1.2 段的分类2.1.2.1 叶子节点段主要结构2.1.2.2 非叶子节点段2.1.3 碎片区2.2 区2.2.1 区的概念2.2.2 区的结构2.2.2.1 XDES Entry结构2.3 页2.3.…

WorldCoin 运营数据,业务安全分析

WorldCoin 运营数据,业务安全分析 Worldcoin 的白皮书中声明,Worldcoin 旨在构建一个连接全球人类的新型数字经济系统,由 OpenAI 创始人 Sam Altman 于 2020 年发起。通过区块链技术在 Web3 世界中实现更加公平、开放和包容的经济体系&#…

HNU小学期工训-STC15单片机模型大作业实验报告

STC15单片机模型大作业实验报告 全称:基于STC15单片机与OLED显示模块&PC端演示的多功能声光温振时钟智能手表模型 计科210X 甘晴void 202108010XXX 【请注意:本作业入选优秀范例,直接照抄源码有很大风险】 【建议理解原理之后作改动】 …

NeRF项目LLFF 解决新场景pose生成的问题

​​​​​​最近一直在做NeRF相关的项目,其中LLFF前向数据集,是NeRF常用数据集,本文讲下怎么对NeRF数据进行处理 几个重要的链接地址 github-llff : GitHub - Fyusion/LLFF: Code release for Local Light Field Fusion at SIGGRAPH 2019g…

地下管网实时水位监测用什么设备好?

地下排水管网是城市重要基础设施生命线之一,主要用于排放雨水、地表水和废水,以维护城市的安全运行。然而,在极端天气事件发生时,排水系统可能会面临压力巨大,导致排水不畅引发城市内涝。通过对管网水位实时监测&#…

【校招VIP】java语言考点之异常

考点介绍: 导致程序的正常流程被中断的事件,叫做异常。异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。异常发生的原因有很多,通常包含以下几大类: 1.用户输入了非法数据。2.要打开的…

Diffusion-VITS:VITS与Grad-TTS的融合

Grad-TTS的核心思想:把diffusion当做一个postnet(或者Plug-In)用于特征增强。因此,它可以是一种通用模块应用于任何网络中,典型的作为FastSpeech2的后处理模块。这里,作者以VITS的SVC场景为例,提…

ipad手写笔什么牌子好?apple pencil二代平替笔推荐

近年来,电容笔越来越受到大家的青睐,已然成为人们提高生产效率的数码产品之一。然而,市面上的电容笔大多质量都参差不齐,很多人也不知道哪个品牌的电容笔比较好。针对这个问题,我来给大家分享几款电容笔,都…

穷举深搜暴搜回溯剪枝(4)

一)单词搜索: 直接在矩阵中依次找到特定字符串 79. 单词搜索 - 力扣(LeetCode) 画出决策树,只需要做一个深度优先遍历: 1)设计dfs函数:只需要关心每一层在做什么即可,从这个节点开始,开始去尝试匹配字符串的下一个字符…

轻松搭建本地知识库的ChatGLM2-6B

近期发现了一个项目,它的前身是ChatGLM,在我之前的博客中有关于ChatGLM的部署过程,本项目在前者基础上进行了优化,可以基于当前主流的LLM模型和庞大的知识库,实现本地部署自己的ChatGPT,并可结合自己的知识…

华为云云耀云服务器L实例评测|教你如何使用云服务器L实例

目录 一、为什么选择华为云云耀云服务器L实例1、智能不卡顿2、价优随心用3、上手更简单4、管理特省心 二、服务器快速上手1、注册账号2、查看华为云耀云服务器L实例产品信息3、购买4、查看服务器详情5、远程登录6、通过第三方终端连接 三、宝塔面板管理服务器 本篇文章给大家分…