Font Agent Pro is a tool to manage a large collection of fonts. Perhaps the most interesting feature is the ability to load fonts on demand depending on what application is launched.
The easiest way avoid registration is to void the RegistrationMediator_checkRegistration
and the ApplicationMediator_checkRegistration
functions.
For the ApplicationMediator_checkRegistration
function at 0x0f3d0
we jump over the main block responsible for show the registration window:
meth_ApplicationMediator__checkRegistration: 0000f3d0 55 push ebp 0000f3d1 89E5 mov ebp, esp 0000f3d3 53 push ebx 0000f3d4 57 push edi 0000f3d5 56 push esi 0000f3d6 83EC7C sub esp, 0x7C 0000f3d9 E800000000 call 0xF3DE 0000f3de 5E pop esi ; XREF=0xf3d9 0000f3df C6459701 mov byte [ss:ebp+0xFFFFFFFFFFFFFF97], 0x1 0000f3e3 8D4D98 lea ecx, dword [ss:ebp+0xFFFFFFFFFFFFFF98] 0000f3e6 890C24 mov dword [ss:esp], ecx 0000f3e9 E82CD10400 call imp___symbol_stub__objc_exception_try_enter 0000f3ee 8D4D98 lea ecx, dword [ss:ebp+0xFFFFFFFFFFFFFF98] 0000f3f1 890C24 mov dword [ss:esp], ecx 0000f3f4 E8C5CF0400 call imp___symbol_stub___setjmp 0000f3f9 85C0 test eax, eax 0000f3fb E9A0010000 jmp 0xF5A0 0000f400 90 nop ... 0000f5a0 8D7D98 lea edi, dword [ss:ebp+0xFFFFFFFFFFFFFF98] ; XREF=0xf5c6, 0xf5fc, 0xf3fb 0000f5a3 893C24 mov dword [ss:esp], edi 0000f5a6 E875CF0400 call imp___symbol_stub__objc_exception_try_exit 0000f5ab 0FBE4597 movsx eax, byte [ss:ebp+0xFFFFFFFFFFFFFF97] ; XREF=0xf5d0 0000f5af 83C47C add esp, 0x7C 0000f5b2 5E pop esi 0000f5b3 5F pop edi 0000f5b4 5B pop ebx 0000f5b5 5D pop ebp 0000f5b6 C3 ret
Similarly for RegistrationManager_checkRegistration
:
meth_RegistrationMediator_checkRegistration: 0002c150 55 push ebp 0002c151 89E5 mov ebp, esp 0002c153 57 push edi 0002c154 56 push esi 0002c155 83EC10 sub esp, 0x10 0002c158 E800000000 call 0x2C15D 0002c15d 5E pop esi ; XREF=0x2c158 0002c15e 8B8687F30400 mov eax, dword [ds:esi+0x4F387] ; @selector(registered) 0002c164 89442404 mov dword [ss:esp+0x4], eax 0002c168 8B7D08 mov edi, dword [ss:ebp+0x8] 0002c16b 893C24 mov dword [ss:esp], edi 0002c16e E8B3030300 call imp___symbol_stub__objc_msgSend 0002c173 84C0 test al, al 0002c175 E916000000 jmp 0x2C190 0002c17a 90 nop 0002c17b 90 nop 0002c17c 90 nop ... 0002c190 0FBEC0 movsx eax, al ; XREF=0x2c175 0002c193 83C410 add esp, 0x10 ; XREF=0x2c18e 0002c196 5E pop esi 0002c197 5F pop edi 0002c198 5D pop ebp 0002c199 C3 ret
The above will run the application in its entirety, however if the user selects "Purchase/Register…" from the menu, the registration pane will pop up locking the application so that it can only be killed with the Activity Monitor
.
We disable the menu action for the Purchase/Register…
item:
meth_MainMenuMediator_openRegistration_: 000274b0 55 push ebp 000274b1 89E5 mov ebp, esp 000274b3 56 push esi 000274b4 83EC14 sub esp, 0x14 000274b7 E92B000000 jmp 0x274E7 000274bc 5E pop esi ; XREF=0x274b7 000274bd 8B86245C0500 mov eax, dword [ds:esi+0x55C24] 000274c3 8B8E2C400500 mov ecx, dword [ds:esi+0x5402C] ; @selector(sharedInstance) 000274c9 894C2404 mov dword [ss:esp+0x4], ecx 000274cd 890424 mov dword [ss:esp], eax 000274d0 E851500300 call imp___symbol_stub__objc_msgSend 000274d5 8B8E10480500 mov ecx, dword [ds:esi+0x54810] ; @selector(showRegistrationWindow) 000274db 894C2404 mov dword [ss:esp+0x4], ecx 000274df 890424 mov dword [ss:esp], eax 000274e2 E83F500300 call imp___symbol_stub__objc_msgSend 000274e7 83C414 add esp, 0x14 ; XREF=0x274b7 000274ea 5E pop esi 000274eb 5D pop ebp 000274ec C3 ret 000274ed 0F1F00 nop dword [ds:eax]