Shortnote

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

Disabling the Registration Menu

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]