我正在学习反汇编和分析 Objective-c 二进制文件。我的一个挫折是,在 Hopper 和 IDA 中,似乎没有保留正确的交叉引用和控制流。我相信这是因为 Objective-C 的消息传递技术。
如您所见,很难遵循。一切似乎都在消息发送时合并,几乎没有迹象表明控制流实际上是从哪里开始的。例如,我试图确定什么叫 mk。显然它是通过消息发送路由的,但是呼叫是从哪里发起的?当然,IDA 提供的交叉引用似乎停留在任何 Objective-C 函数上——这使得很难确定是谁在调用它。
我试过这个插件:https : //github.com/zynamics/objc-helper-plugin-ida
但这会导致“无事可修补”。
IDA 有帮助解决这个问题的功能吗?如果需要,我如何手动追踪?
有些人已经建议我只是通过动态分析来解决这个问题,但我更愿意了解静态分析它的正确方法。