zoukankan      html  css  js  c++  java
  • 最后一次异常法

    最后一次异常法

      如果我们在脱壳的过程中发现目标程序产生大量异常的话,就可以使用最后一次异常法,我们来看一个例子,名字叫做”bitarts_evaluations.c”。

    我们还是使用Patch过的OD来加载它,并且配置好反反调试插件。

    然后将EXCEPTIONS菜单项中的忽略各个异常的选项都勾选上,运行起来。

    我们可以看到程序运行起来了,我们单击工具栏中L按钮打开日志窗口。

    这里我们可以看到产生了好几处异常,但是都不是位于第一个区段,说明这些异常不是在原程序运行期间发生的,是在壳的解密例程执行期间产生的异常,最后一次是46e88f处的这个异常。

    ,现在我们重新启动OD,将EXCEPTIONS菜单项中忽略的异常选项的对勾都去掉,仅保留Ignore memory access violations in KERNEL32这个选项的对勾。

    我们运行起来,产生异常断了下来,我们直接按SHIFT + F9忽略异常继续运行。直到停在了46E88F处为止。

    这里不是,我们按SHIFT + F9忽略异常继续运行,我们知道最后一次异常是46E88F处的INT 3指令引发的。

    这里是壳的解密例程执行过程中产生的最后一次异常,接着就是执行原程序的代码了。

    接着我们可以对代码段设置内存访问断点,可能有人会问,为什么不在一开始设置内存访问断点呢?原因是很多壳会检测程序在开始时是否自身被设置内存访问断点,如果执行到了最后一次异常处的话,很可能已经绕过了壳的检测时机。

      仅允许非商业转载,转载请注明出处

  • 相关阅读:
    UML建模图
    Ubuntu选择软件源
    用于主题检测的临时日志(c5ac07a5-5dab-45d9-8dc2-a3b27be6e507
    【Android】不弹root请求框检测手机是否root
    android开机动画(bootanimation)
    UniversalImageLoader(异步加载大量图片)
    PHP字符串
    Android获取本机号码及运营商
    静态代码块、构造代码块、构造方法
    Android来电拦截及来电转移
  • 原文地址:https://www.cnblogs.com/Archimedes/p/7073494.html
Copyright © 2011-2022 走看看