iStat Menus 6 逆向实战分析和破解补丁

2018-01-22 10:42:28来源:https://blog.keep.moe/2018/01/20/ism6-patcher/作者:Makito的笔记本人点击

分享
文内工具仅供测试之用途,推荐购买正版或进行旧版升级。
前言

最近我的 iStat Menus 从第五版更新到了第六版,新版的确较旧版加入了很多很棒的功能,但因升级改动较大,需要付费进行升级(详见 官方解答 )。进入新版,还是熟悉的“试用——倒计时——到期要求输入授权码”的模式。闲着也是闲着,就研究了几天做了个破解补丁出来。


初探

第一件事情肯定是反编译了,不然就是佛系调试法了。拿到汇编之后根据



RBQ

字符串,定位到相关函数,顺便理清授权码的验证流程。


经过简单分析和理清验证流程后,可以说 iStat Menus 6(后略称 ISM 6)和前几版有所不同。如下图所示,这个版本的授权码的工作原理类似于数字签名。



(授权码的签发和验证流程简图)


另外也可以看到 ISM 6 调用了 Security 框架提供的一系列函数,如下。


...
mov rdi, [rbp+var_50]
mov rsi, r15
call_SecVerifyTransformCreate
mov rbx, rax
...
mov rdi, rbx
mov rsi, [rbp+var_48]
mov rdx, [rbp+var_30]
call_SecTransformSetAttribute
...
mov rax, cs:_kSecDigestSHA1_ptr
mov rdx, [rax]
xor ecx, ecx
mov rdi, rbx
call_SecTransformSetAttribute
...

这也证明了它的验证环节确实与公钥有一些关联,但如果授权码是以如上分析的方式签发的话,在没有私钥的情况下,我们没有必要也无法自己签发授权码。也正因为如此,网络上 ISM 6 的 Keygen 类软件较为难觅踪迹,多数为 ISM 5.X 的 Keygen,可见这个举措在一定程度上也遏制了注册机的开发。


但除了 Keygen 以外,Patcher 也可以帮助我们达到最终目标——破解软件。


篇幅有限,更多的细节就不讲啦。


斗智斗勇

事实上,ISM 6 不仅在验证方式上有所不同,它也在传递敏感信息(Public Key 在它眼中也算是敏感数据了)的时候用了一些迷惑眼球的手段。


使用 lldb 调试过程中,可以发现一个奇怪的现象:在授权码验证环节或是注册页面中,ISM 6 都使用 NSMutableDictionary 来传递一些数据,它们有时候看起来是下面这样的:


{
version = "<SecKeyRef: 0xBLAHBLAH>"
}

有时候看起来是这样的:


{
CPU = "<SecKeyRef: 0xBLAHBLAH>";
memory = 1517411649;
}

(╯‵□′)╯︵┻━┻ 骗谁呢!名字和数据类型都对不上好伐。这个 SecKeyRef 看起来就很可疑,推测极有可能就是公钥。


跟进中发现 RegistrationController 的 keys 初始为 {} ,其会在某一时刻变为从 AppDelegate 的 extras 取到的如上述般的结构。


在无数次重新下断点之后,终于找到了缩在一角的 BASE64 编码的字串,还经过了 AES256 加密。


找到密码,解密即得到公钥。


-----BEGIN PUBLIC KEY-----
MIHxMIGoBgcqhkjOOAQBMIGcAkEAmmr4W1k2iv2niCB7c8CSbQfu8L1GX1qEF4UE
0tDdSsX1QBj8s3UGNJOP72Bju/Fi69k5HGSWYDQGMTh/bS/srwIVAOpDWd8Vlhfh
BKXEef81VyMSyi/lAkBuON8PM5r7aHIZFyGFav/5afqML18Cp+LbzWU9XmAzOS9c
t/ybKfWxel7e/aRmNZsb9S6JmW8l9CUubMTiZhmQA0QAAkEAiO2fAqqMg/mHjSRw
AxiSoUOsAL4Uwgpy73FMFHuJnV0wwuyJY9xMKGSh2CEG3ah0sUcZFCIAFyDlajIJ
ZE9tRw==
----- END PUBLIC KEY -----

虽然也没啥用的感觉。



敏感字符串总归会有被恢复出来的可能,怎么处理就只能各凭本事了。

补丁程序

接下来说说补丁吧,



猴急的孩子们可以直接看这里

,上面也提到了没有私钥去做 Keygen 不太现实,于是我就做了一个 Patcher 来完成挑战。


安装 ISM 6

官方网页下载 https://bjango.com/mac/istatmenus/


首先需要先启动新安装的 ISM 6,并且 完成初次使用安装步骤 ,若这一步没有完成,布丁酱将无法找到正确的补丁注入点。



(完成初次使用安装)


可以看到,ISM 6 现在是待注册试用状态,左下右上均有相关提示。



(试用状态)


用完试用天数就会这个样子:



(管理面板)



(系统托盘内菜单也因使用结束而出现提示)


布丁来啦

补丁从这里下载 https://mak1t0.cc/ism6p/ (托管于阿里云 OSS)


下载好补丁后双击载入 DMG 档案,无需安装,双击即可运行。




正常情况下只需要点击 Patch 按钮即可自动应用补丁。



(在应用补丁之前, 请一定先运行一次 ISM 6 让其完成安装 )


在应用过程中可能会出现提示授权的窗口:



这是因为 ISM 6 分为 /Applications/iStat Menus_app/Contents/MacOS/iStat Menus 和 /Library/Application Support/iStat Menus 6/iStat Menus Status_app/Contents/MacOS/iStat Menus Status 两部分,前者则是管理设置面板,后者控制系统托盘菜单,对后者的修改和替换需要进行鉴权。注意路径包含空格,此处为防止 .app 被解析为域名,替换为了 _app 。


如果不想输入密码,也不是不能用,Patcher 下面的小框框就是留给有这种顾虑的测试者的。



把上述位置的 iStat Menus 和 iStat Menus Status 文件复制到 不需要鉴权的地方 ,然后拖放到这个区域上就可以应用补丁啦,应用补丁后记得把文件替换回原有的位置(操作前建议备份)。


最后的工作

替换好之后,记得在管理面板中点击按钮禁用再启用一下托盘菜单,这样就可以完成托盘菜单部分的破解啦。



然后再使用 CMD + Q 退出管理面板( kill -9 也可以



总之你开心就好

),重新启动 ISM 6 管理面板,此时已经不会有授权状态检查了,至此破解完成。



(已破解的管理面板,授权检查已经消失)


后记

这次可以说也是把逆向和破解软件当





成了一次挑战,在试用天数的倒计时下破解软件还是蛮刺激的。不同于阅读开源项目的代码,这种分析代码的方式带给我的是一个站在不同的角度看代码「如何实现」的机会,去进一步了解调用约定、X86_64 寄存器工作原理等,也在其中更灵活地思考。同时也确实体会到了代码的安全性只能是相对的,并且只能以时间成本来换取相对的「安全」。



要是遇到真正的闲人就不好说了。

但是,破解也并非好事。同为个人开发者,还是希望个人开发者们可以多多受到支持,精心打磨的软件必然少不了时间和经历的投入,并且大多数开发者也是兴趣驱动,经济收入只能说是锦上添花



,毕竟,没有全身上下都是肝的肝帝


文中可能存在错误之处,欢迎交流。


转载本篇文章前请先联系我,谢谢。


最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台