朱朱你堕落了 发表于 2024-2-21 22:18

最后一次异常法脱壳原理是啥?

刚开始初级的脱壳教程都会演示最后一次异常法如何脱一些加密壳,但是从来
也没讲过原理。为啥用异常就可以脱壳?
1
如果你自己编译一个普通程序,那肯定不会发生异常吧,异常了程序都崩溃了,
还怎么运行,写程序要运行起来才行,异常了咋正常使用?那为什么加密壳异常了,
却还能运行,这些异常是壳作者故意加上去的吗?目的何在?
2
壳产生异常,异常谁在处理,是操作系统自己,还是壳作者的写的异常处理
函数来处理?比方说od里忽略异常去掉,壳产生了很多异常,比方说除零异常
吧,为什么会有除零的情况发生,想不通。
3
如果说异常是为了反调试,shift +F9就能继续运行程序了,哪里起到反调试的作用了?
4
为啥最后一次异常能用于快速找到oep?

我想不通好久了都,特发帖求助大佬解惑,谢谢。

cndml 发表于 2024-2-21 22:18

1、异常是windows系统的一种错误处理机制,处理流程是,所有异常先由系统捕获,根据seh链,逐级进行处理,一般是先交给用户程序处理,最后交给系统处理,没人处理就报错,崩溃!
2、加壳程序的异常是壳故意产生的,目的就是反跟踪,反调试,还有改变程序流程。
3、至于调试器忽略异常执行,那就是调试器不处理异常,让程序自己处理异常,没检测的反调试一是因为调试器骗了程序,二是因为程序检测没写好。
4、既然异常是壳故意为之,最后一次异常后,壳基本上干完自己的事情了,接着就该打扫战场,跳到oep了。

爱飞的猫 发表于 2024-2-21 22:43

壳子加异常来烦你呗 烦到你不耐烦 最后放弃
然后就是可以混淆控制流。上一秒还在好好的执行代码,下一秒突然跳到别的地方(错误处理函数)执行了,处理完后又突然跳回去或别的地方继续了。
壳注册错误处理。异常被系统捕捉,然后派发给注册的错误处理函数。win 异常有几种,细节我也不清楚。
等不异常了 通常代表壳子处理结束了 程序正常运行了
所以就观察什么时候开始不触发异常 这个时候要么快到oep,要么比较容易分析后续内容

大概这样 翻了翻其他人的文章

玩机小达人 发表于 2024-2-22 01:08

搞不来这个,我也想脱

朱朱你堕落了 发表于 2024-2-22 05:08

爱飞的猫 发表于 2024-2-21 22:43
壳子加异常来烦你呗 烦到你不耐烦 最后放弃
然后就是可以混淆控制流。上一秒还在好好的执行代码,下一秒突 ...

手机打字真不方便,打了好多字,一个返回误操作,全没了,算了,另外问下,od菜单或哪个按钮也能实现键盘的shift+f9忽略异常运行?没发现有啊,主要是老笔记本f1到f12这一排的键都不管用了。尴尬

bing3076 发表于 2024-2-22 08:45

有点复杂,看不懂!

qq465881818 发表于 2024-2-22 12:05

出异常了说明没到壳,到壳了就不会有异常了,不然程序就没法运行了,这是最后一次异常法的底层逻辑。理解起来也很简单,解完壳 jmp到解壳位置开始执行,这是程序oep,因为解壳的长度会大一些,所以jmp要远些。运行到oep真正要执行的程序了,就没有异常了,最后一次异常法就是脱壳完之前的附近,也就是oep附近。

huohua2088 发表于 2024-2-22 13:41

这问题确实有意义。

oranges 发表于 2024-2-22 14:53

爱飞的猫 发表于 2024-2-21 22:43
壳子加异常来烦你呗 烦到你不耐烦 最后放弃
然后就是可以混淆控制流。上一秒还在好好的执行代码,下一秒突 ...

学到了学到了,题主抛出的这一系列问题确实非常犀利,当我小白就在想这些方法是如何得出的,奈何只会用方法,今天才知道原来是这样。

朱朱你堕落了 发表于 2024-2-22 16:26

qq465881818 发表于 2024-2-22 12:05
出异常了说明没到壳,到壳了就不会有异常了,不然程序就没法运行了,这是最后一次异常法的底层逻辑。理解起 ...

大佬,发错了吧,应该是出现异常了说明还在壳代码内,没到程序oep ,到了就不会有异常了,不然程序就没法运行了。
页: [1] 2
查看完整版本: 最后一次异常法脱壳原理是啥?