ESP定理如何判断找出OEP 【OEP脱壳的5种方法】

脱壳(一) —— ESP定律 1.PUSHAD (压栈) 代表程序的入口点, 2.POPAD (出栈) 代表程序的出口点,与PUSHAD想对应,一般找到这个OEP就在附近 3.OEP:程序的入口点,软件加壳就是隐藏了OEP(或者用了假的OEP/FOEP),只要我们找到程序真正的OEP,就可以立刻脱壳。 一、ESP定理脱壳 (通过下ESP硬件访问断点找到OEP) 1.开始就点F8,注意观察OD右上角的寄存器中ESP有没突现变成红色。(这只是一般情况下,更确切的说我们选择的ESP值是关键句之后的第一个ESP值) 2.选中ESP,进行数据访问 阅读详情

ESP定理如何判断找出OEP 【OEP脱壳的5种方法】


OEP

  OEP:程序的入口点,软件加壳就是隐藏了OEP(或者用了假的OEP), 只要我们找到程序真正的OEP,就可以立刻脱壳。 PUSHAD (压栈) 代表程序的入口点
  POPAD (出栈) 代表程序的出口点,与PUSHAD相对应,一般找到这个OEP就在附近拉
  
常见寻找OEP脱壳的方法 
方法一: 
1.用OD载入,不分析代码! 
2.单步向下跟踪F8,是向下跳的让它实现 
3.遇到程序往回跳的(包括循环),我们在下一句代码处按F4(或者右健单击代码,选择断点——运行到所选) 
4.绿色线条表示跳转没实现,不用理会,红色线条表示跳转已经实现! 
5.如果刚载入程序,在附近就有一个CALL的,我们就F7跟进去,这样很快就能到程序的OEP 
6.在跟踪的时候,如果运行到某个CALL程序就运行的,就在这个CALL中F7进入 
7.一般有很大的跳转,比如 jmp XXXXXX 或者 JE XXXXXX 或者有RETE的一般很快就会到程序的OEP。 
方法二: 
ESP定理脱壳(ESP在OD的寄存器中,我们只要在命令行下ESP的硬件访问断点,就会一下来到程序的OEP了!) 
1.开始就点F8,注意观察OD右上角的寄存器中ESP有没出现。 
2.在命令行下:dd 0012FFA4(指在当前代码中的ESP地址),按回车! 
3.选种下断的地址,下硬件访问WORD断点。 
4.按一下F9运行程序,直接来到了跳转处,按下F8,到达程序OEP,脱壳 
方法三: 
内存跟踪: 
1:用OD打开软件! 
2:点击选项——调试选项——异常,把里面的忽略全部√上!CTRL+F2重载下程序! 
3:按ALT+M,DA 打开内存镜象,找到第一个。rsrc.按F2下断点, 
然后按SHIFT+F9运行到断点,接着再按ALT+M,DA 打开内存镜象,找到。RSRC上面的CODE,按 
F2下断点!然后按SHIFT+F9,直接到达程序OEP,脱壳! 
方法四: 
一步到达OEP(前辈们总结的经验) 
1.开始按Ctrl+F,输入:popad(只适合少数壳,包括ASPACK壳),然后按下F2,F9运行到此处 
2.来到大跳转处,点下F8,脱壳之! 
方法五: 
1:用OD打开软件! 
2:点击选项——调试选项——异常,把里面的√全部去掉!CTRL+F2重载下程序! 
3:一开是程序就是一个跳转,在这里我们按SHIFT+F9,直到程序运行,记下从开始按F9到程序 
运行的次数! 
4:CTRL+F2重载程序,按SHIFT+F9(次数为程序运行的次数-1次 
5:在OD的右下角我们看见有一个SE 句柄,这时我们按CTRL+G,输入SE 句柄前的地址! 
6:按F2下断点!然后按SHIFT+F9来到断点处! 
7:去掉断点,按F8慢慢向下走! 
8:到达程序的OEP,脱壳!

ESP定理

ESP定律 
一.准备知识 
在我们开始讨论ESP定律之前,我先给你讲解一下一些简单的汇编知识。 
1.call 
这个命令是访问子程序的一个汇编基本指令。也许你说,这个我早就知道了!别急请继续看完。call真正的意义是什么呢?我们可以这样来理解: 

1.向堆栈中压入下一行程序的地址; 
2.JMP到call的子程序地址处。 
例如: 
00401029.E8 DA240A00 call 004A3508 
0040102E.5A          pop edx 
在执行了00401029以后,程序会将0040102E压入堆栈,然后JMP到004A3508地址处! 

2.RETN 
与call对应的就是RETN了。对于RETN我们可以这样来理解: 
1.将当前的ESP中指向的地址出栈; 
2.JMP到这个地址。 
这个就完成了一次调用子程序的过程。在这里关键的地方是:如果我们要返回父程序,则当我们在堆栈中进行堆栈的操作的时候,一定要保证在RETN这条指令之前,ESP指向的是我们压入栈中的地址。这也就是著名的“堆栈平衡”原理! 

3.狭义ESP定律 
ESP定律的原理就是“堆栈平衡”原理。 
让我们来到程序的入口处看看吧! 
1.这个是加了ASPACK壳的入口时各个寄存器的值! 
EAX 00000000 
ECX 0012FFB0 
EDX 7FFE0304  //堆栈值 
EBX 7FFDF000  //堆栈值 
ESP 0012FFC4 
EBP 0012FFF0 
ESI 77F57D70 ntdll.77F57D70 
EDI 77F944A8 ntdll.77F944A8 
EIP 0040D000 ASPACK.<ModuleEntryPoint> 
2.这个是ASPACK壳JMP到OEP后的寄存器的值! 
EAX 004010CC ASPACK.004010CC 
ECX 0012FFB0 
EDX 7FFE0304  //堆栈值 
EBX 7FFDF000  //堆栈值 
ESP 0012FFC4 
EBP 0012FFF0 
ESI 77F57D70 ntdll.77F57D70 
EDI 77F944A8 ntdll.77F944A8 
EIP 004010CC ASPACK.004010CC 
呵呵~是不是除了EIP不同以外,eax保存当前OEP值,其他都一模一样啊! 
为什么会这样呢?我们来看看 

0040D000 A>  60               pushad  //注意这里ESP=0012FFC4 
0040D001     E8 00000000      call ASPACK.0040D006  //ESP=0012FFA4 

PUSHAD就是把所有寄存器压栈!我们在到壳的最后看看: 

0040D558     61               popad  //ESP=0012FFA4 
0040D559     75 08            jnz short ASPACK.0040D563 //注意这里ESP=0012FFC4 

也就是说当我们对ESP的0012FFA4下硬件访问断点之后。当程序要通过堆栈访问这些值 
,从而恢复原来寄存器的值,准备跳向苦苦寻觅的OEP的时候,OD帮助我们中断下来。 

小结:我们可以把壳假设为一个子程序,当壳把代码解压前和解压后,他必须要做的是遵循堆栈平衡的原理。 

因为大家对ESP理解各有异同,但是,大同小异!一般理解可以为: 
1、在命令行下断hr esp-4(此时的ESP就是OD载入后当前显示的值) 
2、hr ESP(关键标志下一行代码所指示的ESP值(单步通过)) 

5.总结 

现在我们可以轻松的回答一些问题了。

 


1.ESP定律的原理是什么? 
堆栈平衡原理。 

2.ESP定律的适用范围是什么? 
几乎全部的压缩壳,部分加密壳。只要是在JMP到OEP后,ESP=0012FFC4的壳,理论上我们都可以使用。但是在何时下断点避开校验,何时下断OD才能断下来,这还需要多多总结和多多积累。 

3.是不是只能下断12FFA4的访问断点? 

当然不是,那只是ESP定律的一个体现,我们运用的是ESP定律的原理,而不应该是他的具体数值,不能说12FFA4,或者12FFC0就是ESP定律,他们只是ESP定律的一个应用罢了! 

内存断点 
   1、要解决的问题是: 
   1.什么是内存断点? 
   2.如何在寻找OEP时使用内存断点。 
   
2、内存断点寻找OEP的原理 

i. 首先,在OD中内存断点和普通断点(F2下断)是有本质区别的。 

内存断点等效于命令bpm,他的中断要用到DR0-DR7的调试寄存器,也就是说OD通过这些DR0-DR7的调试寄存器来判断是否断下普通断点(F2下断)等效于bpx,他是在所执行的代码的当前地址的一个字节修改为CC(int3)。当程序运行到int3的时候就会产生一个异常,而这个异常将交给OD处理,把这个异常给EIP-1以后,就正好停在了需要的中断的地方(这个根据系统不同会不一样),同时OD在把上面的int3修改回原来的代码。 
内存断点分为:内存访问断点,内存写入断点。 
我们知道,在程序运行的时候会有3种基本的状态产生:读取-->写入-->执行。 

004AE242   A1 00104000  mov eax,dword ptr ds:[004AE24C]  //004AE24C处的内存读取 
004AE247   A3 00104000  mov dword ptr ds:[004AE24C],eax  //004AE24C处的内存写入 
004AE24C   83C0 01      add eax,1                       //004AE24C处的内存执行 
  
  1.当对004AE24C下内存访问断点的时候,可以中断在004AE242也可以中断在004AE247。 
  2.当对004AE24C下内存写入断点的时候,只能中断在004AE247。 
3.当执行004AE24C的时候,只能中断在004AE24C 

到这里你可能不明白了,为什么内存访问断点能中断在004AE247这一句对004AE24C的写入,而且还能中断在004AE24C的执行呢?其实很简单,我们只要仔细体会一下“内存访问”这四个字的含义遍可以知道,当我们对004AE24C进行读取的时候需要“访问”他吧,当我对004AE24C进行写入的时候也需要“访问”他吧!!当然我们要执行内存地址004AE24C的代码的时候也是还是要“访问”他的! 

  所以我们不难得出下面的结论: 
  1.内存写入中断的地方,一定是也可以用内存访问中断。 
  2.内存执行的地方,也可以用内存访问中断。 
  
如果这时你认为,那么内存写入岂不是没用了。呵呵~那我要告诉你当然不是,如果你想快速的准确的定位到004AE247这一行的时候,那么他就大有作用了! 

 总结一下:内存断点不修改原代码,不会像普通断点那样因为修改代码被程序校验而导致中断失败;对于区段的访问只是区域大了一点,其原理和上面分析的三行代码是一样的。 

  ii.如何使用内存断点来寻找OEP呢? 
  要回答这个问题首先要回答这一个问题:壳是如何解压代码的? 

正如我们知道的,壳如果要把原来加密或压缩的代码运行起来就必须要解压和解密原来的代码。而这一个过程我们难道不能将他看做是对代码段(code段)的写入吗?好了,解压完毕了。我们要从壳代码的区段JMP到原来的代码段的时候,难道不正是对代码段(code段)的执行吗? 

理清了上面的关系就好办了,那么如果载入OD后,我们直接对code段下内存访问断点的时候,一定会中断在壳对code段的写入的代码的上面,就像上面的004AE247的这一行。而如果当他把code段的代码全部解压解密完毕了以后,JMP到OEP的时候,我们是不是还可以停在OEP的代码上面呢?而且每按下F9都会中断,因为这时code段在执行中哦! 

而如果你还要继续问我为什么一定要到那个地方才可以下断呢?我难道不可以一开始就下断吗? 

正入我上面所说的,如果你在前面下断很可能壳对code段还没解压完毕呢,这时如果你不停的按F9,你将会看到OD的下方不断的在提示你,“对401000写入中断”“对401002写入中断”“对401004写入中断”.......如果你不介意按F9到他把正个code段写完的话,我除了同情你的“F9”以外,没什么其他的意见! 
  
  那么我们就没有别更快一点的办法了吗? 
  有的!那就是我们呼之欲出的两次内存断点办法。 
  怎么理解两次内存断点呢? 

让我来做一个假设吧,假设我是一个壳的作者。一个EXE文件的有code段,data段,rsrc段.....依次排列在你的内存空间中,那么我会怎么解码呢?呵呵~我比较笨一点,我会先将code段解码,然后再将data段解压,接着是rsrc段......那么你不难发现,只要你在data断或者rsrc段下内存访问断点,那么中断的时候code段就已经解压完毕了。这时我们再对code段下内存访问断点,不就可以到达OEP了吗? 

  这里注意上面虽然下了两次内存访问断点,但是本质是不一样的,目的也是不一样的。 

 1.对data段下内存访问断点而中断是因为内存写入中断,目的是断在对对data段的解压时,这时壳要对data段写数据,但是code段已经解压 完毕。 
 2.对code段下内存访问断点而中断是因为内存执行中断,目的当然就是寻找OEP了。 

 总结一下:如果我们知道壳在什么地方对code段解压完毕我们就可以使用内存断点,找到OEP。如果不知道,那么我们就依靠2次内存断点去找,如果还不行就用多次内存断点。总之明白了原理在多次的内存断点其实都一样。从这个过程中我们了解的是壳在对区段解码的顺序!   

手动脱壳ESP定律:定位OEP的核心动态断点技巧 ESP定律是Windows二进制逆向中用于精准定位原始入口点(OEP)的关键经验法则,其本质源于x86/x64栈机制的硬件行为——ESP作为栈顶指针,在壳代码完成解密并清栈移交执行权时,必然出现显著、可识别的增量突变。该原理不依赖壳算法细节,而依托PE结构、栈生长规律与寄存器行为指纹,具备强通用性与低工具耦合性。技术价值在于突破无符号、反调试、混淆IAT等限制,支撑CTF逆向、商业软件分析及驱动模块审计等实战场景。本文聚焦ESP突变识别、动态跟踪实操与OEP验证闭环,详解如何从寄存器变化曲线中稳定捕获脱壳临 阅读详情

相关推荐

逆向入门--何为OEP

OEP:程序的入口点,软件加壳就是隐藏了OEP(或者用了假的OEP), 只要我们找到程序真正的OEP,就可以立刻脱壳。再用一个最幼稚的比喻来形容加壳的软件,那个带壳的软件,就是穿了衣服的人,要看它到底是男是女,就把衣服脱掉,不可能哪个生出来就穿了衣服吧,就像软件一样,写出来不可能就带壳的,都是后面加上去的。以上方法,针对不同的壳,至于OEP是什么样子,这个就不好说了,不同的语言写出来的样子就不一样,有高手能总结下OEP的样子吗?基础东西,老鸟绕过,新手要学破解的,必须掌握~~我也在学习中。

一座明亮的小塔 1482

OEP和ESP定理

OEP   OEP:程序的入口点,软件加壳就是隐藏了OEP(或者用了假的OEP), 只要我们找到程序真正的OEP,就可以立刻脱壳。 PUSHAD (压栈) 代表程序的入口点   POPAD (出栈) 代表程序的出口点,与PUSHAD相对应,一般找到这个OEP就在附近拉    常见寻找OEP脱壳的方法 方法一: 1.用OD载入,不分析代码! 2.单步向下跟踪F8...

java开发指南博客 【转载】 342

OEP大全,快速查看不同编译语言编写的程序的OEP特征工具

快速查看不同编译语言编写的程序的OEP特征工具,就像字典一样,需要哪个查哪个。点击编译语言按钮,就会出来相应的OEP特征

找真正的入口(OEP)--广义ESP定律

1.前言      在论坛上看到很多朋友,不知道什么是ESP定律,ESP的适用范围是什么,ESP定律的原理是什么,如何使用ESP定律?看到了我在 http://poptown.gamewan.com/dispbbs.asp?boardID=5&ID=54&page=1 调查结果发现,大家对ESP定律很感兴趣,当然因为实在是太好用了,现在我就来告诉大家什么是ESP定律,它的原理是什么

crkres9527 1283

Blender学习笔记——制作向量场

#下载Blender - UE4 - FGA Vector Field Editor插件的压缩包,Github上的下载地址如下:https://github.com/isathar/Blender_UE4_VectorFieldEditor #下载并解压后将FGA VectorFields文件夹复制到C:\Program Files\Blender Foundation\Blender 2.83\2.83\scripts\addons目录下,此步骤可根据blender安装的位置自行调整,只要放入addon

wychao2020的博客 1724

SLAM轨迹评估神器evo实战:从GPS到TUM格式的完整转换指南(附Python代码)

本文详细介绍了如何使用evo工具将GPS数据转换为TUM格式,以便进行SLAM轨迹评估。通过Python代码实现GPS到笛卡尔坐标的精确转换,并提供了完整的处理流程和实战案例,帮助开发者轻松完成从原始GPS数据到精确轨迹评估的全过程。特别适用于ORB-SLAM等视觉SLAM算法的性能验证。

weixin_29074295的博客 293

OD脱壳八大法

一、esp定律法 进入程序,第行为pushad 单步步过(F8)一下,查看寄存器,当8个寄存器只有esp为红色时,右击红色地址,选择数据窗口中跟随。在左下角的窗口中可以看到,自动跟随到红色地址。 选中若干数据,右击选择断点-硬件访问-(byte,word,dword 任意选择)注:只是访问的字节数不同。 运行(F9)到达断点处,单步步过(F8)几下, 进入到不是不认识的代码地方 ,右键点击分析-从模块中删除分析。 在当前窗口右键选择dollydump脱壳调试进程,分别脱壳两次,不同之处是重建输入表

老北京砸酱锤的博客 4502

ArduSub深度调参指南:如何让水下机器人像鱼一样稳定游动

本文深入探讨了ArduSub水下机器人的深度调参策略,旨在解决ROV在水下晃动、响应迟钝等问题。文章系统解析了级联PID控制逻辑,并针对静水与水流环境,提供了具体的深度保持与姿态控制调参方法、实战日志分析技巧以及异常振荡处理方案,帮助用户实现水下机器人稳定、流畅的游动性能。

CAT789的专栏 372

新手必须懂得什么叫OEP,以及查找的常用方式软件破解什么是oep?

转自: S.l.e!ep.¢% - C++博客 ============================== 新手必须懂得什么叫OEP,以及查找的常用方式软件破解什么是oep? original entry point 原始入口点 常见脱壳知识:1.PUSHAD (压栈) 代表程序的入口点  2.POPAD (出栈) 代表程序的出口点,与PUSHAD想对应,一般找到这个OEP

要不,单步调试走起? 6217

告别TI官网迷路!手把手教你用C2000Ware为TMS320F28027搭建Proteus仿真工程模板

本文详细指导如何使用C2000Ware为TMS320F28027搭建Proteus仿真工程模板,帮助DSP开发者快速上手。从资源获取、工程目录设计到关键文件配置,再到CCS与Proteus的联调技巧,全面解析仿真工程搭建的每个步骤,特别适合初学者和工程师参考。

weixin_42715608的博客 472

华为OD机试真题2026双机位C卷 C语言 实现【明日之星选举】

给定一组选票votes。votes[i]代表第 i 张选票的内容,包含一个字符串"zhangsan,hanmei",表示推荐zhangsan为明日之星,反对 hanmei 称为明日之星。赞成或反对使用逗号(,)分割。 给定一个数组n,表示最后将筛选出赞成票最多的n个人,如果赞成票相同,则反对票越少,排序越靠前;如果赞成票和反对票都相同,则按照姓名字典序升序排序。

MISAYAONE的博客 184

寻找OEP的几种常用方法

寻找OEP的几种常用方法

/0 3016

YOLOv13涨点改进| CVPR 2026 |独家创新首发、主干改进篇 |利用RIS-PiDiNet主干让YOLOv13更加强大!适合遥感目标检测、小目标检测、旋转目标检测,变化检测,图像分割涨点

🔥本文提出了一种改进的RIS-PiDiNet主干网络,通过引入几何先验构建几何一致性检测器,显著提升了模型在任意方向、结构规则目标场景下的检测性能。包含两个核心模块:S-PDC利用极谐变换的谐波核建模目标结构对称性,RIS-PDC通过SO(2)群平均实现旋转不变性。网络采用基于RIS-block的主干结构并融合轻量级LBP特征,增强了细粒度结构表达能力。实验表明,该方法特别适用于遥感和复杂几何分布场景,能有效提升目标检测的鲁棒性和精度。文章还详细介绍了如何将RIS-PiDiNet集成到YOLOv13框架

Ai缝合怪、助力小伙伴高效发论文 90

脱壳:OEP(即程序入口点)查找 --- 基本思路和常见方法

OEP:程序的入口点,软件加壳就是隐藏了OEP(或者用了假的OEP), 只要我们找到程序真正的OEP,就可以立刻脱壳。PUSHAD (压栈) 代表程序的入口点,POPAD (出栈) 代表程序的出口点,与PUSHAD相对应,一般找到这个,OEP就在附近。 常见寻找OEP脱壳的方法 方法一: 1.用OD载入,不分析代码! 2.单步向下跟踪F8,是向下跳的让它实现 3.遇到程序往回跳的(包括循环),我们在下一句代码处按F4(或者右健单击代码,选择断点——运行到所选) 4.绿色线条表示跳转没实...

turbocc 因程序而激情 7561

AI智能体丨使用Coze一键生成道教国学智慧语录视频,涨粉快好变现!(附保姆级教程)

该教程详解如何通过自动化流程批量制作道家国学视频,将晦涩哲理转化为轻量化内容,适配短视频平台需求。

李同学Lino的博客 3498

ENVI_基于无人机数据的果树提取与相对健康监测

一、数据处理 1.计算植被指数VDVI或GDVI:Band Math / Spectral Indices 2.制作掩膜:ROI——Threshold——Subset 二、单地块果树提取 1.绘制感兴趣区shp 2.确定果树提取参数:Count Crops 3.输出果树矢量文件:Convert Crops To Shapefile 4.果树相对健康程度分析:Calculate Crop Me...

提供技术服务、资源分享 429690771 1399

脱壳:OEP(即程序入口点)查找 --- 基本思路和常见方法

OEP:程序的入口点,软件加壳就是隐藏了OEP(或者用了假的OEP), 只要我们找到程序真正的OEP,就可以立刻脱壳。     PUSHAD (压栈) 代表程序的入口点, POPAD (出栈) 代表程序的出口点,与PUSHAD相对应,一般找到这个,OEP就在附近。 常见寻找OEP脱壳的方法 方法一:  1.用OD载入,不分析代码!  2.单步向下跟踪F8,是向下跳的让它实现

secondwatch的专栏 7727

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

脱壳的各种方法

先介绍一下脱壳的基本知识吧!常见脱壳知识:              1.PUSHAD (压栈) 代表程序的入口点              2.POPAD  (出栈) 代表程序的出口点,与PUSHAD想对应,一般找到这个OEP就在附近拉!              3.OEP:程序的入口点,软件加壳就是隐藏了OEP(或者用了假的OEP),              只要我们找到程序真正的OEP,

冷血书生的专栏 3803

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

分享几种常见寻找OEP脱壳的方法

学习过程中在网上搜的 大家勿喷啊!!!常见寻找OEP脱壳的方法方法一:1.用OD载入,不分析代码!2.单步向下跟踪F8,是向下跳的让它实现3.遇到程序往回跳的(包括循环),我们在下一句代码处按F4(或者右健单击代码,选择断点——运行到所选)4.绿色线条表示跳转没实现,不用理会,红色线条表示跳转已经实现!5.如果刚载入程序,在附近就有一个CALL的,我们就F7跟进去,这样很快就能到程序的OEP6.在...

SmileMoon's Home 1003

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

常见脱壳的查找OEP的方法--黑鹰教程

OEP:程序的入口点,软件加壳就是隐藏了OEP(或者用了假的OEP), 只要我们找到程序真正的OEP,就可以立刻脱壳。 PUSHAD (压栈) 代表程序的入口点        POPAD (出栈) 代表程序的出口点,与PUSHAD相对应,一般找到这个OEP就在附近拉。 常见寻找OEP脱壳的方法  方法一:  1.用OD载入,不分析代码! 

woshiyuanlei的专栏 5830

脱壳 OEP 程序的入口点

OEP:程序的入口点,软件加壳就是隐藏了OEP(或者用了假的OEP), 只要我们找到程序真正的OEP,就可以立刻脱壳。 PUSHAD (压栈) 代表程序的入口点        POPAD (出栈) 代表程序的出口点,与PUSHAD相对应,一般找到这个OEP就在附近拉。 常见寻找OEP脱壳的方法  方法一:  1.用OD载入,不分析代码!  2.单步向下跟踪F8,是

比尔丁子 3750

UPX脱壳分析

本文详细介绍了UPX加壳与脱壳的全过程。首先使用Visual Studio编写简单的C程序,通过UPX-5.02工具进行快速压缩(压缩率80.95%),并用DIE工具验证加壳成功。然后分析了加壳后程序在入口点、镜像大小、节区结构等方面的变化特征。在脱壳环节,采用ESP定理定位恢复现场操作,找到原始OEP地址;使用Scylla工具进行内存dump和IAT修复,最终成功脱壳并恢复了可执行程序。通过IDA分析验证,脱壳后程序可正常反编译查看原始代码逻辑。整个过程展示了UPX壳的压缩机制和逆向分析方法。

本科网安在读 614

OEP程序的入口点查找

OEP程序的入口点查找 OEP:程序的入口点,软件加壳就是隐藏了OEP(或者用了假的OEP), 只要我们找到程序真正的OEP,就可以立刻脱壳。 PUSHAD (压栈) 代表程序的入口点, POPAD (出栈) 代表程序的出口点,与PUSHAD相对应,一般找到这个,OEP就在附近。 常见寻找OEP脱壳的方法 方法一: 1.用OD载入,不分析代码! 2.单步向下跟踪F8,是向下跳的让它实现 3.遇到程...

qq_43185879的博客 436

脱壳基本方法(自加图片版)

目录 方法一:单步跟踪法 方法二:ESP定律法 方法三:内存镜像法 方法四:一步到达OEP 方法五:最后一次异常法 方法六:模拟跟踪法 方法七:“SFX”法 方法一:单步跟踪法 单步跟踪法基本步骤 1.用OD载入,点“不分析代码!” 2.单步向下跟踪F8,实现向下的跳。也就是说向上的跳不让其实现!(通过F4) 3.遇到程序往回跳的(包括循环),我们在下一句...

weixin_42813492的博客 785
上一篇: 汇编语言指令大全(详细)
下一篇: 关于破解E语言软件的方法
ChatGPT国内版
博客等级 码龄14年 94粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值