自己做的时候 那个INT3断点一直搞不定 后来按照这篇文章的方法成功
转载自合天小逆向探究断点异常 作者iFurySt
东搞西搞都在瞎搞,今天到合天上面看到一个逆向题(RE200),拿下来搞了一下,学到了点东西,分享一下。
首先当然是运行一下摸摸套路,接着查了一下无壳,之后就是丢进OD开始调试。
可以根据运行看的字符串找个大概位置,往上翻找到函数入口:
调试一下就到这边了,往下走,password1简单,就是简单的对比字符,直接拿到:
接着看关键的password2,进入函数,跑一下程序死掉了,发现里面有INT3中断
,INT3是怎么回事呢,正常运行
的时候INT3会交给系统
的SEH(异常处理)
进行处理,而在调试的时候
,中断会交给调试器
,之后就会异常退出
(若想了解更多请移步google,网上资料很多,不赘述)。
这时候我们打开OD
的Debugging options
,选上INT3 breaks
,因为之前代码有加载SEH
,所以会自动交给SEH处理
,处理完再返回函数接着执行。
重新调试发现程序还是跑到结束,没办法调试,因为我们不知道SEH结束后返回的地址,查看上面加载SEH的代码可以发现返回的地址40157F,
但是过去看了一下一堆乱码,此时我们打开IDA
看一下,真正关键代码是401547
(IDA这边已经能看到算法了),我们下个断点,调试一下就知道原始字符串了,再拿出来与2异或
一下就得到结果了:
1 2 3 4 5 |
|
在《逆向工程核心原理》里面有一句话:
有时,在某些环境(OS,调试器插件Bug等)中使用StepInto(F7)或StepOver(F8)命令跟踪INT3指令会导致调试器非正常终> 止。当遇到这种情况时,请按照以上说明设置好断点后再按F9运行程序。
我就是这样的,就是到SEH里不能再F7或者F8的,必须先找到SEH结束后返回的地址,在那之后下断点F9。