The crack procedure involves disabling the meth_plasqRegistration_initWithDelegate_productNo_licenseVersion_
method that is responsible for throwing popups at the user. In order to make the application behave as a fully licensed application, only this method has to be disabled, just by conveniently turning the je
at 0x72af7
into a jmp
:
meth_plasqRegistration_initWithDelegate_productNo_licenseVersion_: 00072ac0 55 push ebp 00072ac1 89E5 mov ebp, esp 00072ac3 53 push ebx 00072ac4 57 push edi 00072ac5 56 push esi 00072ac6 83EC3C sub esp, 0x3c 00072ac9 E800000000 call 0x72ace 00072ace 5B pop ebx ; XREF=0x72ac9 00072acf 8B4508 mov eax, dword [ss:ebp+0x8] 00072ad2 8945E8 mov dword [ss:ebp+0xffffffe8], eax 00072ad5 8B837A662400 mov eax, dword [ds:ebx+0x24667a] 00072adb 8945EC mov dword [ss:ebp+0xffffffec], eax 00072ade 8B830A0C2400 mov eax, dword [ds:ebx+0x240c0a] ; @selector(init) 00072ae4 89442404 mov dword [ss:esp+0x4], eax 00072ae8 8D45E8 lea eax, dword [ss:ebp+0xffffffe8] 00072aeb 890424 mov dword [ss:esp], eax 00072aee E8AD231D00 call imp___symbol_stub__objc_msgSendSuper 00072af3 89C6 mov esi, eax 00072af5 85F6 test esi, esi 00072af7 E92F020000 jmp 0x72d2b ... 00072d2b 8B83EA2B2400 mov eax, dword [ds:ebx+0x242bea] ; @selector(seqStateChanged) XREF=0x72af7, 0x72bf7, 0x72c9e, 0x72c54 00072d31 89442404 mov dword [ss:esp+0x4], eax 00072d35 893424 mov dword [ss:esp], esi 00072d38 E85D211D00 call imp___symbol_stub__objc_msgSend 00072d3d 89F0 mov eax, esi 00072d3f 83C43C add esp, 0x3c 00072d42 5E pop esi 00072d43 5F pop edi 00072d44 5B pop ebx 00072d45 5D pop ebp 00072d46 C3 ret
Comic Life displays an "Unregistered" text in the about window. That string is loaded from the PQAbout.nib
file located in Comic Life 3/Contents/Resources/en.lproj
. The nib
can be decompiled to a xib
file using NibUnlocker:
<object class="NSTextField" id="25"> <object class="NSTextFieldCell" key="NSCell" id="26"> <int key="NSCellFlags">67108928</int> <reference key="NSControlView" ref="25"/> <string key="NSContents">Unregistered</string> <int key="NSCellFlags2">272630784</int> <reference key="NSBackgroundColor" ref="72"/> <reference key="NSSupport" ref="75"/> <object class="NSColor" key="NSTextColor" id="77"> <bytes key="NSRGB">MC42MDAwMDAwMiAwLjYwMDAwMDAyIDAuNjAwMDAwMDIA</bytes> <int key="NSColorSpace">2</int> </object> </object> <string key="NSFrame">{{289, 103}, {270, 17}}</string> <bool key="NSAllowsLogicalLayoutDirection">NO</bool> <reference key="NSNextResponder" ref="7"/> <reference key="NSSuperview" ref="7"/> <int key="NSvFlags">268</int> <bool key="NSEnabled">YES</bool> <reference key="NSNextKeyView" ref="31"/> </object>
and then we can change the Unregistered
text to whatever else:
<string key="NSContents">Wizardry and Steamworks</string>
Then, we can recompile the xib
to a nib
using ibtool
:
ibtool --notices --output-format human-readable-text --compile PQAbout.nib PQAbout.xib
In order to have a more pleasant string displayed in the about window: