Shortnote

Alfred is a great replacement for spotlight that allows custom extensions. We have previously used this to synchronize screensavers between Macs. The powerpack can be bought from Alfred's website and we wondered whether the security can be somehow circumvented.

Disassembling Alfred, it turns out the Alfred uses one method that references several other sub-routines in succession:

====== B E G I N   O F   P R O C E D U R E ======
 
 
                                       ; Basic Block Input Regs: rax rsp -  Killed Regs: rax rbp
                                            _isPStatusA5wq_100032cd0:
0000000100032cd0 55                              push       rbp                           ; XREF=0x100001c02, 0x100003105, 0x1000031d2, 0x10000333e, 0x100005085, 0x1000056a0, ...
0000000100032cd1 4889E5                          mov        rbp, rsp
0000000100032cd4 30C0                            xor        al, al
0000000100032cd6 E8C5BC0100                      call       _Rac38kHnAC_10004e9a0
0000000100032cdb 0FBEC0                          movsx      eax, al
0000000100032cde 5D                              pop        rbp
0000000100032cdf C3                              ret        
                        ; endp

The easy method is to return a positive result from this method so that every time the powerpack status is checked, the result will be true.

Otherwise, if you are unwilling to recode the _isPStatusA5wq_100032cd0 method, one can simply follow the logic where this method is called. There are two variants of calls throughout the program:

000000010000aa79 E852820200                      call       _isPStatusA5wq_100032cd0
000000010000aa7e 84C0                            test       al, al
000000010000aa80                                 jne        ; some address

and

000000010000aa79 E852820200                      call       _isPStatusA5wq_100032cd0
000000010000aa7e 84C0                            test       al, al
000000010000aa80                                 je         ; some address

In both cases, the jne should be changed into a jmp to the address and the je should be transformed into a nop sledge down to the rest of the instructions. This is laborious since there are many references to _isPStatusA5wq_100032cd0.

Yes we are awesome...