外壳初始化的现场环境(各寄存器值)与原程序的现场环境是相同的。加壳程序初始化时保存各寄存器的值,外壳执行完毕,会恢复各寄存器内容。其代码形式一般如下:
PUSHFD ;将标志寄存器入栈保存
PUSHAD ;pusheax,ecx,edx,ebx,esp,ebp,esi,edi
…… ;外壳代码部分
POPAD ;popedi,esi,ebp,esp,ebx,edx,ecx,eax
POPFD ;恢复标志寄存器
JMPOEP ; 跨段转移指令到OEP
OEP:…… ;解压后的程序原代码
1、常见脱壳知识:
pushfd╲
(入栈)代表程序的入口点的数据
pushad╱
popad╲
(出栈)代表程序的出口点的数据或者是PUSH PUSHAD这样
popfd╱
或者
PUSHAD (压栈) 代表程序入口点
POPAD (出栈) 代表程序出口点
出现出栈后一般经过RETN或者JMP等指令,发生跨断跳跃一般就到了OEP了(*^__^*) 嘻嘻……
2、找OEP:
程序的入口点,软件加壳就是隐藏了OEP(或者用了假的OEP),只要我们找到程序真正的OEP,就可以立刻脱壳。当然也有其他的,如 je OEP等等,一般都是段之间的大跳转,OD的反汇编窗口里都是同一个段的内容,所以更好区别是否是段间跳转。 找OEP时注意两点。
1单步往前走,不要回头。
2观察。注意poshad、poshfd,popad、popfd等,和外壳代码处对应,注意地址发生大的变化。单步跟踪什 么时候F8走,F7,F4步过?这里我说说关于F8(Step Over)和F7(Step in)的一般方法,粗跟的时候一般都是常用F8走,但是有些call是变形的Jmp,此时就需要F7代过,区别是否是变形Jmp的一个简单方法是比较call的目标地址和当前地址,如果两者离的很近,一般就是变形Jmp了,用F7走。对于Call的距离很远,可以放心用F8步过,如果你再用F7步过,只是浪费时间而已。F8步过对压缩壳用的很多,F7步过加密壳用的很多,如果用F8一不小心就跑飞(程序运行),跟踪失败。
(PS:OEP是OriginalEntryPoint缩写,即程序加壳前的真正的入口点)
3、加密壳VS压缩壳:
加壳软件按照其加壳目的和作用,可分为两类:
1、是压缩(Packers);
2、是保护(Protectors);
压缩这类壳主要目的是减小程序体积,如ASPacK、UPX和PECompact等。另一类是保护程序,用上了各种反跟踪技术保护程序不被调试、脱壳等,其加壳后的体积大小不是其考虑的主要因素,如ASProtect、Armadillo、EXECryptor等。随着加壳技术的发展,这两类软件之间的界线越来越模糊,很多加壳软件除具有较强的压缩性能,同时也有了较强的保护性能。
如何分辨加密壳压缩缩壳,通用特点,Od载入时有入口警告或询问是压缩程序吗?普通压缩壳Od调试时候没有异常加密壳全部有反跟踪代码,会有许多SEH陷阱使OD调试时产生异常。所以调试的时候需要注意!
4、加密壳找OEP
对于加密壳,我的方法一般是用最后一次异常法~
OD载入,钩掉所有异常(不忽略任何异常,除了忽略在KERNEL32 中的内存访问异常打勾。有时由于异常过多可以适当忽略一些异常),运行,数着用了多少次Shift+F9程序运行,显然最后一次异常后,程序会从壳跳到OEP开始执行,这就是我们寻找OEP的一个关键,如果程序Shift+F9后直接退出,很明显加密壳检测调试器,最简单的应付方法就是用插件隐藏。
单步异常是防止我们一步步跟踪程序,即F8,F7,F4等,Int3中断是检测调试器用的,仅在Win9x系统中有效,2000/XP就会出现断点异常,其它的异常主要是干扰调试。这一系列的异常虽然干扰我们调试,但也给我们指明了一条通路,就是Shift+F9略过所有异常,然后找到最后一处异常,再它的恢复异常处下断点,跟踪到脱壳入口点。确定从所有SEH异常中走出来,如果前面有大量循环,逐段解压。
当然你也可以用另一个好东西--Trace,在Command里来个tc eip<42b000 (42b000是当前段的起始位置,滚动条拖到最上面就能看到了,一般程序编译的基地址为400000),42b000只是例子,如果你的下模拟跟踪时机很准,确定没有Seh异常,稍等一会我们就会停在OEP处(对特别加密壳需要大量时间跟踪,因为它的循环极多,但比手动跟踪快,大部分时候是的。)详细跟踪情况可以点运行跟踪看OD跟踪记录。
分享到:
相关推荐
本课程"脱壳基础第一课"旨在教授初学者如何理解和执行这个过程。 首先,我们需要了解什么是壳。壳通常是指在原始可执行代码(payload)周围添加的一层额外代码,用于保护恶意代码免受分析和检测。这些壳可以是简单...
《脱壳基础知识入门》电子书主要探讨的是计算机安全领域中的一个重要话题——脱壳技术。脱壳,简单来说,就是从程序的外壳中提取出原始代码的过程,通常用于对抗恶意软件的反逆向工程策略。在本电子书中,作者将为...
#### 二、基础知识 在深入讨论具体脱壳方法之前,我们先来了解一下脱壳的基本概念和技术背景: 1. **OEP(Original Entry Point)**:原入口点,即程序的真实入口点。 2. **PE Header**:可移植执行体(Portable ...
总的来说,"手动脱壳第二课 UPX 1.08"是一个针对UPX 1.08版本的脱壳教程,涵盖了从理论到实践的全过程,适合有一定逆向工程基础的学习者深入研究。通过这个课程,你将能够独立完成对UPX壳的分析和脱壳,提升自己的...
零基础脱壳破解第一课,大家一起学习脱壳,不再被骗子欺骗。。
#### 二、VMP脱壳脚本功能概述 根据所提供的部分内容,“VMP脱壳脚本”具备以下主要功能: 1. **OEP Finder**:即原始入口点(Original Entry Point)查找器。它可以帮助分析者定位被保护程序的真实入口点,这对于...
一、脱壳基础 脱壳,顾名思义,就是移除程序表面的保护层,这层保护层通常被称为"壳"。壳可能包含混淆代码、反调试机制甚至自解压逻辑,旨在防止恶意软件被轻易分析。常见的壳有UPX、PEpack、Themida等。RL!...
2. **PE文件结构**:理解Portable Executable(PE)文件格式是脱壳的基础,包括节区、导入表、导出表、资源等关键部分。 3. **反调试技术**:壳通常包含反调试机制,如检查调试器的存在,这需要学习如何绕过这些...
#### 二、壳的检测与识别 **PEID v0.92**是一款非常强大的壳检测工具,能够识别超过450种不同的壳,并且具备一定的病毒扫描能力。此外,PEID还可以识别出EXE文件是用哪种编程语言编写的(例如VC++、Delphi、VB等)...
6. **运行脚本**:运行脚本后,程序应该能够无壳执行,露出原始的二进制代码。 标签中的"汇编"表明了逆向工程中汇编语言的重要性。理解汇编是逆向工程的基础,因为它是与机器最接近的语言,直接对应于计算机的指令...
8. **逆向工程基础**:脱壳脚本的编写需要深厚的逆向工程知识,包括理解汇编语言、分析控制流程图、识别函数等。 9. **自动化分析**:一些高级的脱壳脚本可能包含自动化分析组件,可以自动识别和处理多种类型的壳,...
#### 二、脱壳的基础知识 在深入探讨具体的脱壳技巧之前,有必要了解一些基础知识: 1. **签名校验**:这是确保应用程序完整性和合法性的第一步。系统会验证应用的数字签名是否有效,以此来判断其来源是否可靠。 ...
#### 一、脱壳基础知识要点 在逆向工程领域,脱壳是一项重要的技能,尤其是针对那些被加壳保护的软件。了解基础概念是开始学习脱壳的第一步。 - **PUSHAD**: 这条指令通常用于保存程序的所有寄存器状态至堆栈中,...
#### 二、脱壳基础知识 脱壳通常包括以下几个步骤:查壳、寻找原入口点(OEP)、Dump(备份)与修复。本文将重点介绍查壳与寻找OEP的技巧。 ##### 1. 查壳 查壳是指识别出软件是否被加壳及其类型。常见的查壳工具包括...
在这个文集中,我们可以期待找到关于如何对这三种类型的二进制文件进行脱壳的详细教程和指导。 EXE(可执行文件)是Windows操作系统中的程序文件,包含了运行应用程序所需的全部指令。DLL(动态链接库)是共享代码...
2. **机械设计基础**:包括力学、材料科学、工程制图等方面的知识,用于设计和分析机械结构。 3. **CAD应用技巧**:如何使用CAD软件绘制精确的二维工程图和三维模型,以及使用工具进行测量、标注、装配等操作。 4. *...
在使用易语言通用脱壳机时,用户需要具备一定的编程和逆向工程基础,理解软件保护机制,并且知道如何分析脱壳后的程序。同时,脱壳行为可能涉及法律问题,必须确保在合法范围内操作,避免侵犯他人的知识产权。 总的...
- **重要性**:理解PE格式对于进行脱壳操作至关重要,因为这是分析可执行文件的基础。 - **组成**:PE文件由多个部分构成,包括DOS头、PE签名、文件头、可选头、节表等。 - **DOS头**:位于文件开头,包含一个小的...