Moom 介绍
Moom 是 Mac 上一款很常用的分屏小工具,主要就是为了把窗口靠左、靠右、铺满等操作,更多详情见官网的介绍:https://manytricks.com/moom/
它本身是一款收费软件,但是在试用期内可以无限制使用,之前用的是网上下载的破解版的 Moom,更新了之后就进入试用期了,不敢用网上其他人破解的版本,怕安插后门,于是自己修改了一下,挺简单的,改几个字节就可以。
本文使用的版本号是:Version 3.2.16 (3277)
操作
确定函数范围
先搜字符串,试用期的计算是试用Moom的功能100次,有文本可以搜,grep "Mooms remaining" * -R
,发现是在/Applications/Moom.app/Contents/MacOS
文件里。
超过100次之后,每次使用会弹出如下窗口,尝试搜字符串"Your 100-use trial limit has been reached. In order to continue using Moom, please buy a license.",也在这个文件里
确定校验函数
恰好上文提到的这两个字符串都出现在这个函数里
char __cdecl -[PMMainController updateReminderButtonWithIncrementedUseCounter:applyRefractoryPeriod:showLicense:showAlert:](PMMainController *self, SEL a2, char a3, char a4, char a5, char a6)
我看不懂objc写的程序,大致的逻辑是,检验试用次数,弹窗,最后返回一个0 或 1,看起来返回0就是校验通过的意思。(如果不是,就试试改成1 行不行,还好我改成 0 就可以用了)
修改为永远返回0
中间的逻辑太复杂了,直接从函数开头跳到函数结尾,在结尾处 xor eax,eax
就行。
__text:00000001000180B8 push rbp
__text:00000001000180B9 mov rbp, rsp
__text:00000001000180BC push r15
__text:00000001000180BE push r14
__text:00000001000180C0 push r13
__text:00000001000180C2 push r12
__text:00000001000180C4 push rbx
__text:00000001000180C5 sub rsp, 58h
.......
__text:00000001000188E3 add rsp, 58h
__text:00000001000188E7 pop rbx
__text:00000001000188E8 pop r12
__text:00000001000188EA pop r13
__text:00000001000188EC pop r14
__text:00000001000188EE pop r15
__text:00000001000188F0 pop rbp
__text:00000001000188F1 retn
这里是函数开头结尾保护寄存器的代码,不可以乱改,容易出问题。把00000001000188E3
前的最后一条汇编改成xor eax,eax
,把00000001000180C5
后的第一条汇编改成jmp指令,就能完成我们的目标。
最终汇编的效果是:
__text:00000001000180B8 push rbp
__text:00000001000180B9 mov rbp, rsp
__text:00000001000180BC push r15
__text:00000001000180BE push r14
__text:00000001000180C0 push r13
__text:00000001000180C2 push r12
__text:00000001000180C4 push rbx
__text:00000001000180C5 sub rsp, 58h
__text:00000001000180C9 jmp loc_1000188E0
.........
__text:00000001000188E0 xor eax, eax
__text:00000001000188E2 nop
__text:00000001000188E3 add rsp, 58h
__text:00000001000188E7 pop rbx
__text:00000001000188E8 pop r12
__text:00000001000188EA pop r13
__text:00000001000188EC pop r14
__text:00000001000188EE pop r15
__text:00000001000188F0 pop rbp
__text:00000001000188F1 retn
最终的diff是:(以Version 3.2.16 (3277)为准)
00180C9:
45 89 cc 45 89 -> e9 12 08 00 00
00188e0:
0f be c0 -> 31 c0 90
最终效果:完全正常使用(我已经使用了一个月了,没有任何问题)
2019年11月29日17:52:47 更新:刚刚偶尔发现,本文其实是不完美的,因为测试时候 SIP 是关着的就没注意到这个细节,只有关闭 SIP 后才能成功,否则如果文件被修改了,Mac 操作系统会拒绝执行它。【强烈建议不要学我,请开启 SIP】
2019年12月04日17:45:29 再次更新:解决SIP 引起的无法篡改,额外patch 2 个字节
首先有一个命令,用来移除签名字段。注意这里移除的是App的签名,不仅仅是单独可执行文件的签名。
codesign --remove-signature Moom.app
之后执行,Moom会报错,如图,说已经被篡改请不要使用。
对此,我们去搜索相关的内容,找到了如图的代码,看起来是先弹框然后退出。
外层是由一个if-else控制的,我们把跳转语句nop 掉,就不会走到这个函数了,对应的 patch 位置是:
00DCD1
74 0f -> 90 90
完美收工!