脱壳(中) 脱壳的方法

article/2025/9/17 6:13:27

那些年我们一起脱过的衣裳-脱壳(中)

0x01 我能在万花从中脱去壳的衣裳!(续)


3.3ESP定律法

3.3.1ESP定律介绍

ESP定律法是脱壳的利器,是国外友人发现的。有了ESP定律,可以方便我们脱掉大多数的压缩壳。可谓是本世纪破解界中最伟大的发现之一。这里只简单的看一下狭义ESP定律的原理。

当我们用OD载入之后开始就是 pushad 基本上就可以使用ESP定律脱壳了

3.3.2以老版菜刀为例:

首先查壳,还是UPX的壳

1.使用OD载入之后开头是pushad,那么我们可以初步判断可以使用ESP进行脱壳

那么,我们该怎么判断到底能不能用ESP定律脱壳呢?

按下F8(单步步过),既然叫做ESP定律,那么肯定跟右上角寄存器窗口,中的ESP有必然的联系的

2.可以看到到了这一步,只有ESP是红色的(不用管EIP),那就可以使用ESP定律。

选择ESP---||->右键---||->数据窗口中跟随

这时我们可以看到数据窗口,变成了下图所示

3.在HEX数据中选择任意一段(网上总有人说选一个字节,选两个字节,选四个字节),其实实际上选多少个都可以,但是只要从第一个开始选起。然后右键---||>断点---||>硬件访问---||>在Byte,Word,Dword选择任意一个都可以。

可以在调试中的硬件断点查看自己的断点

4.然后按下F9运行程序,程序会自己断下来。断下来之后就会很快到达OEP,然后单步跟踪法一步一步向下

遇到向上跳转则在它的下一行按F4(运行到此处)

下面看到一个大跳转,跳转过去就是OEP了

004AE9C4  - E9 DF6FFBFF jmp caidao.004659A8

5.到达OEP之后就可以开心的脱壳啦~(和单步跟踪法脱壳操作相同)

再介绍一种非常简单的方法,用插件下硬件断点

在ESP右键选择 HW break [ESP] 她会自动下下硬件断点,之后直接按下F9运行程序再F8就到达OEP了

3.4两次断点法

还是以菜刀为例吧,我保证是最后一次了%>.<%

1.选项---||>调试设置---||>异常 全部打上√,也就是忽略所有的异常

2.按键盘上的“ALT+M”组合键打开OD的内存窗口

3.如图,我们首先找到自己程序名的 .rsrc区段 按F2下断点 然后 Shift+F9 就会回到反汇编窗口

然后再按"ALT+M" 然后找到程序的第一个.rsrc.上面的.CODE(也 就是00401000处),按F2下断点。

然后按SHIFT+F9就到达OEP或者到达了OEP的附近了,然后再用单步跟踪法就可以到达OEP了

然后怎么脱壳我就不说了。我用了三种方法脱下UPX,只是想证明脱壳是可以用很多种方法脱壳的。而不是总是看到xxx壳用什么方法去脱啊?这些问题。。。。。。

3.5一步到达OEP

1.首先必备的就是查壳嘛~ ASPack的壳

2.首先将程序加载进OD 按F9开始执行

在堆栈窗口可以看到 拖到最下边

3.然后慢慢向上找,因为我们的程序名称就叫ASPack,所以我们在向上找的第一个程序名称中,选中它,然后右键---||-->反汇编窗口中跟随

在反汇编窗口中按Ctrl+A(分析代码)

然后呢就能在堆栈窗口中可以看到一个括号将程序名称括起来了,这是一个段.

4.然后需要在段中找到段首,也就是这个括号的开头.找到返回到xxx(代表程序名称)这一行,选择反汇编窗口中跟随.

5.然后我们在反汇编窗口中向上找,肯定就在这附近,找了一下发现了OEP

6.那么问题来了,我们程序都还没有开始调试,所以我们要怎么样才能将程序段在这里,然后进行脱壳呢?

选中OEP 的第一行,右键---||-->数据窗口中跟随---||-->选择

7.然后在数据窗口中可以看到前面两个HEX数据已经被选中了,然后

右键---||-->断点---||-->硬件执行

然后查看一下硬件断点下好了没有,ok

8.然后重新运行,按下F9执行程序,然后就直接在OEP断下来了,然后使用ollyDump脱壳进程进行脱壳.这个上面已经说了,现在我就不多说了

3.6最后一次异常法

在脱壳方法中,最后一次异常法,这是最基础的脱壳技术之一。

1.将待脱壳程序载入到OD中,单击OD的“选项”菜单,在弹出的菜单中单击“调试设置”命令,在随后弹出的“调试选项”对话框中切换到“异常”选项卡,清除该选项卡下所有复选框,也就是不忽略任何异常。

2.按Shift+F9让程序运行起来,记录按键的次数。记录为x。我这里是两次就让程序运行起来了,但是你有可能需要十次或者二十次才能运行起来。

3.然后回到OD中,按Ctrl+F2(重新载入程序),按1次Shift+F9。那么为什么按1次呢?上面让记录为x,所以这里需要按x-1次。例:如果让一个步骤按了10次运行起来了,我们在这里就要按9次Shift+F9。

4.在OD右下角窗口中找到“SE句柄”或是“SE处理程序”,右键---||-->反汇编窗口中跟随(如果没有反汇编窗口中跟随,可以在反汇编窗口按Ctrl+G 输入"SE处理程序"前面的地址)。

5.在OD的反汇编窗口中跟随到上一步记录下的内存地址,并在此内存地址处下一个断点。

6.按键盘上的“Shift+F9”组合键让程序运行到上一步下的断点处,按键盘上的“F2”键取消此处的断点。

7.使用单步跟踪法追踪(一直按F8,遇到向上的跳转在下面那行按F4(运行到此处))直到到达OEP

然后到了OEP怎么脱壳,在这里我就不说了

3.7模拟跟踪法

不管要怎样先查壳再说 nPack的壳

在讲到的众多脱壳方法中,我们首先讲了单步跟踪法脱壳,因为单步跟踪脱壳法是脱壳技术中最基础的方法,在后面其它的一些脱壳方法中总会或多或少的配合单步跟踪法才能顺利完成脱壳工作。便是始终是一次次的按“F8”键来单步跟踪程序,偶尔遇到回跳就跳过执行,这样机械性的操作很是烦人,那么能不能让机器来代替人力,让工具帮我们单步跟踪呢?答案是肯定的,这也就是这节讲的内容——模拟跟踪法。模拟脱壳法就是模拟单步跟踪来进行查找OEP。

网上的大部分模拟跟踪法的常见步骤是这样的:

1、将待脱壳程序载入OD中,先简单的跟踪一下程序,看看有没有SEH暗桩;

2、按键盘上的“ALT+F9”打开OD的内存窗口,找到“SFX,输入表,资源”的行,并记录此行的内存地址;

3、在OD的命令行窗口执行命令“tc eip<上一步中记录下的地址”,命令执行后就会跟踪到OEP。

然而这种方法可以是可以,但是可能从早上开始跟踪,一直跟踪到晚上都没有跟踪完成。网上那些人拿着文章转来转去,也没见得谁真的去试验过...效率实在太慢了,那不如我们来帮机器一把?

首先,需要用到的是上面所讲到的两次断点法,使用两次断点法,按照两次断点法的最后一次Shift+F9之后

然后ALT+M回到内存窗口,然后选中程序名称的SFX,输入表.

然后在OD的命令执行窗口执行命令"tc eip<SFX,输入表这一行的地址"然后回车,执行命令,然后OD就能迅速的到达OEP了。

当这里的跟踪变为暂停的时候,说明OEP已经到达了。

那么,这样就有人说了,如果这样我都能用两次断点法了,我为什么还要用模拟跟踪法,这样还有什么存在的意义?

如程序出错了,或者当你找不到OEP的时候就能使用此方法找到OEP。

到了OEP然后改怎样脱壳我就不说了,上面都写了好几次了~

3.8“SFX”法

查壳 0xpack的壳

在OD中,不但可以利用模拟跟踪来代替单步跟踪进行脱壳,从而节省劳动力,还有一种SFX自动脱壳的方法也可以节省劳动力,并能快速有效的将程序的壳脱掉。

使用SFX自动脱壳法脱壳的常见步骤:

1、将OD设置为忽略所有异常;

2、在OD的“调试选项”对话框的“SFX”选项卡中选择“字节模式跟踪实际入口”选项并确定;

3、将程序重新载入OD,然后左下角就会开始跟踪了,然后过一会儿就会自动断在OEP了!

3.9出口标志法

前面几个脱壳方法中有一个共同点,就是在单步跟踪到popad指令后面不远处的jmp指令的时候,就可以大胆的判断这个jmp指令的目的地址就是OEP。

原因很简单,popad指令用于将壳运行之前保存的环境恢复,使原程序能正常运行。有些壳的popad指令很少,我们就可以查看被这种壳加壳的程序的所有popad指令,找到后面存在jmp指令的popad指令,然后来到其后的jmp指令的目的地址,这很可能就是OEP,然后就可以进行脱壳了。

1.将待脱壳程序载入OD中,在OD的反汇编客人口中单击鼠标右键,在弹出的右键菜单中单击“查找”→“所有命令”,在弹出的输入框中输入“popad”并按“查找”按钮,记得去掉整个块前面的勾啊!!!!

2.当遇到第一个popad的时候按下F4(运行到此处),在这里,我的示例程序已经运行起来了,这就是我上面所说的"跑飞了",然后重新载入重新按照步骤1.查找popad,因为我们的第一个popad已经跑飞了,所以我们不理它。哼!然后按Ctrl+L查找下一个。

然后第二个popad又跑飞了,哼!重新开始,第一个和第二个我都不理你们了!

然后开始第三个popad,依然是跑飞。重来,第一.二.三我都不理你们了,直接按查找4次popad,执行这里,没有"跑飞"其实如果经验丰富的已经看出来马上就到达OEP了。而我还在假装不知道,然后F8单步跟踪。

直到到达OEP

然后在这里说一下LordPE+ImpREC脱壳吧,其实我在实战中很少用OD自带的插件脱壳的,因为,不是特别好用。

1.首先记住不要关闭OD,然后打开LoadPE,在最下面选择程序右键---||-->修正镜像大小

2.然后选择程序右键---||-->完整转存

3.打开ImpRec在下拉框中选中程序

4.然后在OD中将下面箭头所指处复制下来

5.然后在下面OEP处填写刚才复制的---||-->点击自动查找TAT---||-->获取输入表---||-->点击无效函数,这里没有

(如果有,在输入表函数信息框内选中,然后删除指针!)

然后点击右下角的转储到文件!需要选中那个刚才使用LoadPE完整转存的文件名,然后就脱壳完成!!!

0x02 后续章节


以上很多注意的点是我刚学脱壳时遇到的一系列的问题,我希望大家不要再误入网上那些随意转载的文章的那些不明白的东西.下节教大家如何编写自动化脱壳插件.


http://chatgpt.dhexx.cn/article/5iMJFNhL.shtml

相关文章

脱壳简单总结

title: 脱壳 date: 2021-07-05 14:37:06 tags: RE 脱壳 1.概述&#xff1a; 1.壳&#xff1a; 一&#xff1a;加壳的目的&#xff1a;为了隐藏程序真正的OEP&#xff08;入口点&#xff09;&#xff0c;防止被破解。 二&#xff1a;加壳软件是一种在编译好可执行文件之后&…

最新乐加固脱壳详细教程(有图有真相)

一、前言声明&#xff1a; 本次破解是基于Xposed Installer框架&#xff0c;具体使用方法请上网查询。假设你已经安装好框架&#xff0c;按照下面的步骤&#xff0c;实现乐加固加固脱壳修复DEX&#xff0c;并且重打包运行。本次选择脱壳的APP是小猿搜题&#xff0c;特此声明&a…

脱壳之简单加密壳

一、简单分析与解密 脱壳最重要的三步&#xff1a;找原始OEP&#xff0c;转存文件&#xff0c;修复文件   压缩壳按照这三步就可以完成脱壳&#xff0c;而加密壳因为对PE文件的信息进行了加密处理&#xff0c;找到OEP只是刚开始&#xff0c;还需要将加密之后的代码、数据进行…

iOS完美脱壳

iOS端IPA脱壳 背景&#xff1a;在软件安全领域中&#xff0c;我们与黑产做对抗时&#xff0c;不是被动防守&#xff0c;自己也可以做攻击方&#xff0c;来验证我方软件是否安全。 关于iOS端逆向分析如&#xff1a;虚拟定位、虚拟设备、修改内存等&#xff0c;始终离不开脱壳。…

脱壳工具:Youpk的使用详解

一. Youpk概述 Youpk基于ART的主动调用的脱壳机&#xff0c;主要针对dex整体加固和各式各样的dex抽取加固。 目前 Youpk 只支持 pixel 1代。所以必须需要 pixel 1代手机&#xff0c;而且需要刷入对应的系统。 Youpk可以处理大部分的加固&#xff0c;一些企业版的加固也能处理…

使用upx脱壳工具脱壳

使用upx脱壳工具脱壳&#xff08;攻防世界新手第七题为例simple-unpack&#xff09; 查壳工具链接&#xff1a;https://www.52pojie.cn/thread-437586-1-1.html 脱壳工具链接&#xff1a;https://github.com/upx/upx/releases 先查壳 一般做到逆向的部分题的时候&#xff0c…

脱壳工具:反射大师的使用详解

一. 反射大师概述 一个脱壳插件工具&#xff0c;需要在 Xposed 环境中使用&#xff0c;支持市面上大多数加密壳。 反射大师简单容易使用&#xff0c;能脱掉大多数壳&#xff0c;很值得使用 二. 下载Xposed和反射大师 Xposed &#xff0c;一款可以在不修改 Android APK 的情…

逆向工具之脱壳神器反射大师(附脱壳环境搭建、脱壳实战)

相信点击进入这篇博客的小伙伴都知道并且搞过App逆向&#xff0c;不过有时候会遇到各种加壳的App&#xff0c;不让你反编译。但是道高一尺&#xff0c;魔高一丈&#xff0c;有正向加密&#xff0c;就有逆向解密。此篇博客博主带大家搭建脱壳环境&#xff0c;并且手动脱一个加了…

手动脱壳教程

一、什么是壳&#xff1f; 壳是指在一个程序的外面再包裹上另一段代码&#xff0c;保护里面的代码不被非法修改或反编译的的程序。它们一般先于程序运行&#xff0c;拿到控制权&#xff0c;然后完成它们保护软件的任务。 二、壳的加载过程 1、保存程序入口参数 …

简单脱壳教程笔记

文章目录 1、手脱UPX壳简介&#xff1a;脱壳&#xff1a;笔记&#xff1a;方法1&#xff1a;单步跟踪&#xff08;需要有耐心&#xff09;一、使用ODE插件二、tools按钮选择LordPE进行脱壳&#xff08;提前在SETUP PATHS里添加好&#xff09; 方法2&#xff1a;ESP定律法方法3&…

常用编程语言开发工具

编程语言开发工具可分为文本开发工具 和 集成开发工具。 文本开发工具的特点是 体积小&#xff0c;功能也不弱。 集成开发工具的特点是 体积大&#xff0c;功能强大。 1.文本编辑器 widows 下的 notepad&#xff08;记事本&#xff09; Unix下的 vim &#xff0c;这两个工具系…

开发工具:2022个人开发工具清单

目录 ​编辑 1、谷歌浏览器 2、腾讯文档 3、Notepad 4、IntelliJ IDEA 5、VisualStudio 6、VSCode 7、微信开发者工具 8、Navicat 9、PDManer 10、Git/Tortoise Git 11、Axure 12、NxShell 13、ApiPost 14、Xmind 15、Everything 16、WizTree 17、猿如意 …

开发工具推荐

1.前言 俗话说&#xff1a;“工欲善其事&#xff0c;必先利其器”。 为了助力大家的学习和进阶&#xff0c;本小节介绍几个对 Java 学习非常有帮助的 IDEA 插件&#xff0c;代码反编译和反汇编工具&#xff0c;以及非常不错的网站等。 2. IDEA 插件 首先不必多说&#xff0c…

【高效开发工具系列】开发工具

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…

Linux--开发工具

前言&#xff1a; 是不是看见10月24日有种莫名的亲戚&#xff0c;在信息技术行业&#xff0c;由于2101024&#xff0c;所以1GB 1024MB&#xff0c;1MB 1024KB&#xff0c;1KB 1024B。于是1024是程序员们最为敏感的数字&#xff0c;那么今天祝所有铁子们节日快乐&#xff01;…

开发工具入门

配置SublimeText的编译 工具->编译系统->新建编译系统 修改如下代码到新建文件内&#xff0c;CtrlS保存内容到 “SublimeText安装目录下的\Data\Packages\User” # 配置文档 { "cmd": ["软件名如&#xff1a;php", "$file"], &qu…

开发工具的使用

git git管理你的项目 进入项目----》右键----》git bash here--->输入git init---->该文件夹和子文件夹都会被git管理 写项目.,...... 头部完成 头部完成想形成一个版本号(形成一个版本号目的是后期可以切换回来)&#xff0c; 有以下几个步骤 git add . git commit -m …

【开发工具系列】猿创征文|有了这8个开发工具,程序员可以早点下班了

&#x1f4e3;&#x1f4e3;&#x1f4e3;&#x1f4e3;&#x1f4e3;&#x1f4e3;&#x1f4e3; &#x1f38d;大家好&#xff0c;我是慕枫 &#x1f38d;前阿里巴巴高级工程师&#xff0c;InfoQ签约作者、阿里云专家博主&#xff0c;一直致力于用大白话讲解技术知识 &#x…

开发工具使用

一、markdown 1、MarkDown语法 Markdown 语法手册 &#xff08;完整整理版&#xff09;【Markdown语法】字体颜色大小及文字底色设置 二、IDEA工具 1.1 IDEA相关插件 idea插件下载地址&#xff1a;https://plugins.jetbrains.com/ 开发必装插件&#xff1a; &#xff08;1…

程序员常用开发工具盘点

优秀的程序员优秀的原因不一定是他敲代码比别人快&#xff0c;但他解决事情的效率一定比别人都要高&#xff0c;往往都会利用工具提升自己的效率&#xff0c;下面给大家分享几个程序员常用的开发工具。 1.浏览器插件FeHelper FeHelper插件支持Chrome、Firefox、MS-Edge浏览器…