破解之寻找OEP[手动脱壳](1)

OEP:(Original Entry Point),程序的入口点,软件加壳就是隐藏了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,脱壳!

破解之寻找OEP[手动脱壳](1)

时间: 2024-10-11 21:09:38

破解之寻找OEP[手动脱壳](1)的相关文章

破解之寻找OEP[手动脱壳](2)

1.使用ESP定律 OD载入后,F8一次,在寄存器窗口的ESP的内容上(如0012FFA4)右键:“在数据窗口中跟随”,到内存数据窗口,将内存数据窗口以HEX 数据形式显示,在刚才的地址起始位置上(如0012FFA4)上右键:“断点”->“硬件访问”->“字”,F9直接运行,再F8一次或二 次,一般会到push ebp这句代码,这句代码所在的地址,就是OEP. 2.二次断点法 OD载入后,点击“M”按钮进入内存映射页面,先在数据(data).资源(rsrc).rdata.idata等区段下访问

upx 手动脱壳

查壳 UPX 0.89.6 - 1.02 / 1.05 - 2.90 (Delphi) stub -> Markus & Laszlo upx这类压缩壳手动脱壳非常简单. 一.查找oep 二.dump.修复IAT 一.查找oep way1: 首先在程序入口发现pushad指令,接下来可以直接查找指令popad 在jmp指令处下断,运行. jmp之后来到oep way2: 当然可以在单步pushad后,转到esp的内存窗口,设置硬件断点,运行,找到jmp处. 运行后会在popad指令后停下 跟

脱壳实践之寻找OEP——两次内存断点法

  0x00 前言 对于加壳程序第一件事就是要找到OEP(oringinal Entry point),由于加壳的缘故,当PE文件载入OD或者其他调试软件时进入的的往往是壳程序的入口地址.所以要进行逆向分析第一步就必须找到PE程序的原始入口点.   0x01 壳的加载过程 壳和病毒在某些方面比较类似,都需要比原程序更早获得控制权.壳修改了原程序的的执行文件的组织结构,从而比原程序更早获得控制权,并且并不会影响原程序的正常运行.了解的壳的加载过程对于脱壳加壳异常重要.壳的加载过程如下: 1)保存入

学习:脱壳之异常法寻找OEP

一个练手unpackme bitarts 1.直接载入OD,这里记录一种脱壳方法,F9运行程序,查看记录窗口,发现有许多异常处 2.这里需要注意的是红标处,这是最后一个异常,其实这次也可以直接在内存窗口中的代码段(或者是利用排除法)直接下内存断点,然后F9运行,等待对程序的代码段(或者其他)的进行访问/写入的时候下断,这里我们使用的是shark恒老师教的异常法来进行学习.... 3.然后将OD的调式选项进行关闭,然后进行手动运行,手动忽视异常,来到上面图中所标出的最有一个int3的地址0046E

学习:脱壳之内存执行寻找OEP

前言:类似排除法,如果一开始直到OEP的地址话,那么成功脱壳的几率应该百分之百,如果不知道,那自己尝试的时候,还是需要检查检查 1.直接加载入OD,打开内存窗口观察,发现是UPX的壳 内存映射, 条目 22 地址=00401000 大小=00008000 (32768.) 属主=CRACKME_ 00400000 区段=UPX0 包含=输出表 类型=Imag 01001002 访问=R 初始访问=RWE 内存映射, 条目 23 地址=00409000 大小=00001000 (4096.) 属主

学习:脱壳之VB程序快速寻找OEP

VB程序的OEP的特征,一般都是push一个数据到堆栈,然后进行CALL,而这个CALL调用的系统的dll文件,这个是重点要考的 那么就会有一个思路:当加壳完,最后来到OEP处,程序运行会调用系统DLL,那么我们是不是只要给系统的DLL下内存断点,当访问的时候就是不是会让OD捕获异常,使其断下点呢? 1.把一个UPX壳的VB加载OD中,EP为如下,这里选择用特殊OD来调试VB,原因是这个OD只有当访问断点处才会被断点下来,其他就算内存写入就会被断点,这种OD对VB好进行脱壳 2.发现找到系统的D

寻找OEP

1.使用ESP定律 OD载入后,F8一次,在寄存器窗口的ESP的内容上(如0012FFA4)右键:“在数据窗口中跟随”,到内存数据窗口,将内存数据窗口以HEX数据形式显示,在刚才的地址起始位置上(如0012FFA4)上右键:“断点”->“硬件访问”->“字”,F9直接运行,再F8一次或二次,一般会到push ebp这句代码,这句代码所在的地址,就是OEP. 2.二次断点法 OD载入后,点击“M”按钮进入内存映射页面,先在数据(data).资源(rsrc).rdata.idata等区段下访问断点

手动脱壳—dump与重建输入表

http://blog.csdn.net/ccnyou/article/details/7930817 很久没玩逆向了,今天权当复习,顺便做个笔记 文章中用到的demo下载地址: http://download.csdn.net/detail/ccnyou/4540254 附件中包含demo以及文章word原稿 用到工具: Ollydbg LordPE ImportREC 这些工具请自行下载准备 Dump原理这里也不多做描述,想要了解google it!常见的dump软件有LordPE,Proc

[逆向破解]使用ESP定律手动脱"中国菜刀"壳

0x00前言: ESC定律脱壳一般的加壳软件在执行时,首先要初始化,保存环境(保存各个寄存器的值),一般利用PUSHAD(相当于把eax,ecx,edx,ebx,esp,ebp,esi,edi都压栈),当加壳程序的外壳执行完毕以后,再来恢复各个寄存器的内容,通常会用POPAD(相当与把eax,ecx,edx,ebx,esp,ebp,esi,edi都出栈),通过跨区段的转移来跳到程序的OEP来执行原程序!简单点来说就是会将加壳过程执行一遍之后会跳到OEP来执行源程序.当我们找到了OEP的时候就是找