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

一个练手unpackme bitarts

1、直接载入OD,这里记录一种脱壳方法,F9运行程序,查看记录窗口,发现有许多异常处

2、这里需要注意的是红标处,这是最后一个异常,其实这次也可以直接在内存窗口中的代码段(或者是利用排除法)直接下内存断点,然后F9运行,等待对程序的代码段(或者其他)的进行访问/写入的时候下断,这里我们使用的是shark恒老师教的异常法来进行学习....

3、然后将OD的调式选项进行关闭,然后进行手动运行,手动忽视异常,来到上面图中所标出的最有一个int3的地址0046E88F,来到如下位置

4、然后再对内存窗口中的程序代码段进行设置内存断点,然后多次F8,原因是最后的异常被我们下了断点,那么距离OEP也不远了,然后继续F9,来到如下,从模块中分析代码,OEP成功找到

总结:其实第二点中自己也说到了可以直接一开始就内存窗口中下内存断点,但是shark恒老师说过这种如果遇到反调试的话可能不行,所以这个也是另外一种思路吧

原文地址:https://www.cnblogs.com/zpchcbd/p/12098498.html

时间: 2024-11-06 15:55:58

学习:脱壳之异常法寻找OEP的相关文章

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

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

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

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

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

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

学习:KiUserExceptionDispatcher之寻找OEP

程序:UnPackMe_PELock1.06.d.exe 需要知道的:KiUserExceptionDispatcher的领空的当前堆栈地址ESP+0x14就是异常触发地址,这个函数是系统派发异常函数,也就是说所有异常都要经过该函数来派发,那么该函数中的参数也就会指向异常的位置,也就是ESP+0x14 方法:KiUserExceptionDispatcher也可以说是最后一次异常法的升级版,原因是如果异常数量过多的话就可以用这个最后一次异常法来进行定位OEP,手动的话工作量太大 1.运行程序,查

寻找OEP

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

最后一次异常法

最后一次异常法   如果我们在脱壳的过程中发现目标程序产生大量异常的话,就可以使用最后一次异常法,我们来看一个例子,名字叫做"bitarts_evaluations.c". 我们还是使用Patch过的OD来加载它,并且配置好反反调试插件. 然后将EXCEPTIONS菜单项中的忽略各个异常的选项都勾选上,运行起来. 我们可以看到程序运行起来了,我们单击工具栏中L按钮打开日志窗口. 这里我们可以看到产生了好几处异常,但是都不是位于第一个区段,说明这些异常不是在原程序运行期间发生的,是在壳的

【python学习】8.异常

[python学习]8.异常 raise Exception: 抛出指定异常 try/except: 捕捉异常 except: 第一个参数是需要捕获的异常类型,可以是多个类型组成元组,第二个参数是捕获到的异常对象, raise: 抛出已经捕获的异常 else: 当没有捕获的异常时候执行 finally: 总会被执行 def test(): try: raise Exception("test") except (Exception), e: print "Exception&

算法学习 - HashTable开放地址法解决哈希冲突

开放地址法解决哈希冲突 线性开放地址法 线性开放地址法就是在hash之后,当发现在位置上已经存在了一个变量之后,放到它下一个位置,假如下一个位置也冲突,则继续向下,依次类推,直到找到没有变量的位置,放进去. 平方开放地址法 平方地址法就是在hash之后,当正确位置上存在冲突,不放到挨着的下一个位置,而是放到第2^0位置,假如继续冲突放到2^1的位置,依次2^3... 直到遇到不冲突的位置放进去. 双散列开放地址法 双散列同上,不过不是放到2^的位置,而是放到key - hash(key, tab

java学习中,异常和错误的简介、捕获异常、抛出异常、自定义异常(java 学习中的小记录)

java学习中,异常和错误的简介.捕获异常.抛出异常.自定义异常(java 学习中的小记录)作者:王可利(Star·星星) 异常:(API 的 java.lang 有一个异常,有很多很多) 在Java程序中也会程序出现不正常的情况,这个就叫异常.     Java是面向对象的语言,任何事物都可以用类来描述,同样的异常也是一种事物.Java中提供了很多的异常类.     多个异常堆积起来,就是一个异常体系.   Throwable:是异常类的父类,超类.Exception 异常.error错误.