读取时访问冲突 [OLLYDEBUG]

逆向工程 ollydbg 调试 调试器 例外
2021-07-03 12:28:10

每当我尝试破解程序时,我都会在 olly 中收到此错误:

在此处输入图片说明

是什么导致了这个错误?我怎样才能解决这个问题?如果有人有建议或建议,那就太好了。我已经试过按 F9 但这无济于事

1个回答

TL;DR:如果不了解导致访问冲突的原因,就很难确定如何最好地解决它。您需要首先调查异常处理程序和原因。

此状态行表示发生了访问冲突异常并且 ollydbg 捕获了该异常。这不一定是错误,可能是程序正常行为的一部分。现在由您决定 olly 应该如何处理该异常,但首先让我们讨论是什么导致了该异常。

从技术上讲,此异常意味着程序尝试访问无效地址。可能是地址没有分配,或者CPU试图在权限阻止执行的地址执行代码,写入无法写入的地址等。 一般尝试访问时会发生访问冲突异常地址因某种原因而失败。

既然我们回答了什么访问冲突异常,让我们讨论为什么会发生。访问冲突通常发生在遇到错误时,这是​​由于编程错误导致 CPU 执行错误指令或使用错误数据。然而,安全开发人员经常使用与访问冲突异常相关的技巧来谋取利益,从而使逆向工程过程复杂化或使程序更难调试和修改。

更常见的技巧包括:

  1. 测量从触发异常到处理异常和恢复正常执行之间的时间。当在调试器中时,调试器将挂起程序,使时间差明显变大。
  2. 在异常处理程序中执行关键程序部分,这稍微难以调试、查找和调查。
  3. 触发调试器本身中的错误,对可能对程序执行至关重要的行为进行细微的更改。
  4. 增加逆向工程师的负担,使动态逆向工程过程复杂化。
  5. 在反调试技巧检测到程序正在被调试后,使程序猛烈地失败。
  6. 正常操作和某些操作系统技巧可能涉及合法触发(和处理)访问冲突异常。

根据触发异常的原因、异常处理程序代码是什么以及异常触发代码周围的内容,处理该异常的方式有所不同。

例如:

  1. 如果异常触发编码被计时检查包围,您可能希望将其添加到 ollydbg 的忽略异常中,以便调试器在以后的执行中不会在这些异常上暂停。通过按alt+o并选择“调试”下的“例外”项来执行此操作
  2. 要了解异常处理程序是否在程序的行为中具有重要作用,您可能需要点击Shift+F7进入异常处理代码并对其进行逆向工程。
  3. 如果异常处理程序,只有程序的正常操作的一部分,它也可能通过和平方式通过增加OllyDbg的忽略参数被忽略例外列表或使用shift+ F7F8F9分别步入,步过或通过异常处理程序运行。
  4. 如果有意触发访问冲突以终止程序,您可能可以安全地忽略它 ( shift+ F9) 并继续执行程序的其余部分。