我正在开发一款破解版(Mach-O、mac 应用程序)。
现在,应用程序本身很奇怪,老实说我真的不知道从哪里开始。有多个线程,主函数并没有真正告诉我串行验证的位置。
我没有通过 main,而是通过_objc_msgSend
并发现了一些有趣的函数,它们打印出通常的“你赢/你输”。
如果我检查这些参考文献,我最终会在这里:
; Segment type: Pure data
000062F4 __inst_meth segment dword public 'DATA' use32
000062F4 assume cs:__inst_meth
000062F4 ;org 62F4h
000062F4 stru_62F4 __objc_method_list <0, 0Eh> ; DATA XREF: __class:stru_60C4↑o
000062FC __objc_method <offset sel_dealloc, offset aV804, \ ; -[MCAppDelegate dealloc] ...
000062FC offset __MCAppDelegate_dealloc_>
00006308 __objc_method <offset sel_succeed, offset aV804, \ ; -[MCAppDelegate succeed] ...
00006308 offset __MCAppDelegate_succeed_>
00006314 __objc_method <offset sel_crackDetected, offset aV804, \ ; -[MCAppDelegate crackDetected] ...
00006314 offset __MCAppDelegate_crackDetected_>
00006320 __objc_method <offset sel_fail, offset aV804, \ ; -[MCAppDelegate fail] ...
00006320 offset __MCAppDelegate_fail_>
0000632C __objc_method <offset sel_a, offset aV804, offset __MCAppDelegate_a_> ; -[MCAppDelegate a] ...
00006338 __objc_method <offset sel_b, offset aV804, offset __MCAppDelegate_b_> ; -[MCAppDelegate b] ...
00006344 __objc_method <offset sel_c, offset aV804, offset __MCAppDelegate_c_> ; -[MCAppDelegate c] ...
00006350 __objc_method <offset sel_d, offset aV804, offset __MCAppDelegate_d_> ; -[MCAppDelegate d] ...
0000635C __objc_method <offset sel_e, offset aV804, offset __MCAppDelegate_e_> ; -[MCAppDelegate e] ...
00006368 __objc_method <offset sel_f, offset aV804, offset __MCAppDelegate_f_> ; -[MCAppDelegate f] ...
00006374 __objc_method <offset sel_mk, offset aV804, \ ; -[MCAppDelegate mk] ...
00006374 offset __MCAppDelegate_mk_>
00006380 __objc_method <offset sel_applicationDidFinishLaunching_, \ ; -[MCAppDelegate applicationDidFinishLaunching:] ...
00006380 offset aV12048, \
00006380 offset __MCAppDelegate_applicationDidFinishLaunching__>
0000638C __objc_method <offset sel_window, offset a804_0, \ ; -[MCAppDelegate window] ...
0000638C offset __MCAppDelegate_window_>
00006398 __objc_method <offset sel_setWindow_, offset aV12048, \ ; -[MCAppDelegate setWindow:] ...
00006398 offset __MCAppDelegate_setWindow__>
00006398 __inst_meth ends
现在,不幸的是,这并没有让我去任何地方。我检查了参考资料,什么也没找到。
在这次失败的尝试之后,我尝试使用本地 MacOS 调试器通过 IDA 跟踪函数。
首先,它在启动过程后立即抛出此错误:
调试器服务器中的意外 dyld_opcode (init_dyld):5ffb
我完全没有发现有关此的信息,所以我只是忽略了它。
然后我开始了函数跟踪并得到了这个:
收到 SIGBUS 信号(总线错误)(exc.code a,tid 24571)
现在,请记住,这是我的第一个“真正的”crackme。我之前所做的一切都只是一个命令行应用程序,所以比这简单得多。
我什至不确定“功能跟踪”是否是我认为的那样。我希望有某种函数调用层次结构,在那里我可以找到所谓的“失败”函数。