合天小逆向探究断点异常

作者: 分类: Reverse 时间: 2016-08-13 评论: 暂无评论

合天小逆向探究断点异常(EXCEPTION_BREAKPOINT)

东搞西搞都在瞎搞,今天到合天上面看到一个逆向题(RE200),拿下来搞了一下,学到了点东西,分享一下。

首先当然是运行一下摸摸套路,接着查了一下无壳,之后就是丢进OD开始调试。

可以根据运行看的字符串找个大概位置,往上翻找到函数入口:

functionEP.png

调试一下就到这边了,往下走,password1简单,就是简单的对比字符,直接拿到:

pw1.png

接着看关键的password2,进入函数,跑一下程序死掉了,发现里面有INT3中断,INT3是怎么回事呢,正常运行的时候INT3会交给系统SEH(异常处理)进行处理,而在调试的时候,中断会交给调试器,之后就会异常退出(若想了解更多请移步google,网上资料很多,不赘述)。

intofuntion2.png

INT3.png

这时候我们打开ODDebugging options,选上INT3 breaks,因为之前代码有加载SEH,所以会自动交给SEH处理,处理完再返回函数接着执行。

Debugging options.png

重新调试发现程序还是跑到结束,没办法调试,因为我们不知道SEH结束后返回的地址,查看上面加载SEH的代码可以发现返回的地址40157F,

SEH.png

但是过去看了一下一堆乱码,此时我们打开IDA看一下,真正关键代码是401547(IDA这边已经能看到算法了),我们下个断点,调试一下就知道原始字符串了,再拿出来与2异或一下就得到结果了:

f2.png

password2.png

s='75316E6E66326C67'
result=''
for i in range(0,len(s),2):
    result+=chr(int(s[i:i+2],16)^2)
print(result)

在《逆向工程核心原理》里面有一句话:

有时,在某些环境(OS,调试器插件Bug等)中使用StepInto(F7)或StepOver(F8)命令跟踪INT3指令会导致调试器非正常终> 止。当遇到这种情况时,请按照以上说明设置好断点后再按F9运行程序。

我就是这样的,就是到SEH里不能再F7或者F8的,必须先找到SEH结束后返回的地址,在那之后下断点F9。

声明:文章基本原创,允许转载,但转载时必须以超链接的形式标明文章原始出处及作者信息。

添加新评论