请注意,如果我只是想免费玩游戏,我只是为迎接挑战而这样做。我会发现一个裂缝,而不是一个。该演示可从http://www.ambrosiasw.com/games/uplink/免费获得。
现在,我已经通过使用Hopper和class-倾倒。很快就知道与注册相关的功能存在于
ASWRegistration.framework
中,但是在尝试了一些静态分析后,无济于事,我决定最好将GDB交给它。加载它,尝试在一个看起来有趣的函数上设置一个断点。(gdb) b +[ASWRegistration isRegistered:]
Function "+[ASWRegistration isRegistered:]" not defined.
Make breakpoint pending on future shared library load? (y or [n]) n
糟糕,这很烦人。让我们尝试其他事情。
(gdb) b isRegistered
Function "isRegistered" not defined.
Make breakpoint pending on future shared library load? (y or [n]) n
嗯,也许我做错了... >好吧,这给了我一个不同的错误消息,尽管它仍然无法工作...
进一步检查后,我发现我什至无法正确破坏可执行文件本身中的功能。
(gdb) b isRegistered:
No symbol table is loaded. Use the "file" command.
Make breakpoint pending on future shared library load? (y or [n]) n
(gdb)
两个可能的
applicationDidFinishLaunching
,不是其中一个来自实际游戏(我怀疑它们来自Sparkle.framework)。看起来Ambrosia很聪明,并且剥离了所有调试符号,但是class-dump给了我完整的标题,nm给了我很多符号,并且Hopper找到了各种方法。所以我不明白为什么GDB无法使用它。再说一次,我是这一切的初学者,也许我在做些公然的错误。我还在Mac App Store游戏“ Hack RUN Free”中尝试了相同的操作,并得到了相同的No symbol table is loaded. Use the "file" command
错误。当然,file命令根本没有帮助。有人知道如何解决此问题吗?我想超越纯粹的理论水平吗?
#1 楼
Objective-C的工作方式与大多数语言有所不同。在_ObjC
部分中有选择器,这些选择器用作obj_msgSend
的参数(这就是调用所有内容的方式)。函数之间没有直接调用。我建议从REcon 2008上有关此主题的Cameron Hotchkies幻灯片开始。评论
我知道,我在这里遇到的问题是,我找不到由于obj_msgSend调用而调用的实际代码是什么。这是前一段时间,但是我相信实时调试和otool -ov的组合可以帮助我找到所需的内容。
–SlEePlEs5
14年7月16日在21:20
评论
您是否尝试过使用信息功能来显示可执行文件中的所有功能符号?料斗似乎有另一种(更有效的)方法来提取符号表。这可能是GDB的限制。另外,请注意,GDB可能会破坏可执行文件中的任何位置。您只需要使用以下之一:b * 0xdeadbeef或b * myfunction。
实际上,GDB找不到ASWRegistration函数的符号。不幸的是,我不知道如何手动计算共享库的偏移量。其他用于OS X的调试器可以执行此操作吗?
并且,在尝试objdump -x(查看导出表)时是否找到了这个符号?
@perror据我所知。如果您有兴趣,可以在这里找到objdump的输出。我知道可以弄清楚这些符号,因为Hopper和IDA的演示版都可以做到这一点。我已经到了静态分析的地步,虽然我很确定自己在正确的位置,但是我的组装技能还不够好,一旦Hopper不再能够找到方法,我就可以跟踪正在发生的事情为了我。有一些明显的_objc_msgSend调用正在进行,但我不知道如何找到那些指向的实际代码。