【问题标题】:Breakpoint changes program flow断点改变程序流程
【发布时间】:2012-08-18 11:46:30
【问题描述】:

我正在尝试分析和反转我拥有的一个 Objective-C 程序。

我通过手动更改一些操作码对可执行文件进行了一些修改。但是,当我测试修改后的软件时,我得到了

杀死:9

没关系,我想我碰了一些不应该碰的东西。然后我启动了gdb myprogram 以分析错误。这里发生了一些事情(对我来说很奇怪):如果我不放置任何断点,程序会收到 SIGKILL,而如果我尝试在收到信号的断点之前放置几行断点,似乎什么也没发生,程序似乎可以工作很好。

从这里我的问题是:断点会改变程序流程吗?
如果答案是否定的,那么我想我写的信息不足以解决所以请询问,如果您有一些提示或建议可以为我指明正确的方向,我将不胜感激。

我使用的是 MacOS 10.7.4 和 gdb 6.3.50 (Apple version gdb-1752)。假设我无权访问源代码。

【问题讨论】:

  • 可能是程序主动不允许断点,并且注意到它何时加载到 gdb 并引发异常?可能是一种反调试措施?有趣的OP ... +1,希望听到一些答案。

标签: objective-c gdb reverse-engineering breakpoints disassembly


【解决方案1】:

断点改变代码工作方式的第一大原因是竞争条件。基本上是这样的:

Without breakpoints:
    make some asynchronous request
    do something with response
    ERROR because request hasn't responded yet

With breakpoints:
    send some asynchronous request
    wait for user to continue
    response arrived while waiting for the continue
    do something with response
    OK!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-14
    • 1970-01-01
    • 2017-03-23
    • 2021-07-23
    • 1970-01-01
    相关资源
    最近更新 更多