逆向 FirmStream
其实我很少写软件破解的文章,因为大家都是开发者,做个软件混口饭吃不容易,开发者还用盗版软件那真是行业的悲哀。但是今天这个软件搞得我有点上火,我遇到了点问题,联系开发者回复非常不友善,我脑子一热趁着午休的时间就给它破解了,在分享出去之前还是理智地放弃了。这篇文章就记录一下这个软件的破解步骤,供后来者学习。不要试图向我索要破解文件,已经删掉了,因为我已经买了,留着也没用。
FireStream 是 macOS 平台上一款 UPnP/DLNA 流媒体服务器软件,是目前我发现的综合体验最好的。这款软件只在 MAS 分发,售价 $19.99,开发者很勤劳,更新很频繁。
FireStream 版本为 2.27,Hopper Disassembler 版本为 4.7.3,均为最新版。
用 Hopper 分析完成后,直接 Debug,发现无法启动,说明做了反调试,先找到 entrypoint,会发现有两个入口,分别是 EntryPoint
和 EntryPoint_1
。程序通过后者启动,直接 jmp 到前者,反调试就跳过了。再点击 Debug 应用就能起来了。
但是应用启动后马上闪退,系统弹出 Apple ID 登录框,这个问题是由于 MAS 的复制保护机制导致的,通过 MAS 分发的应用通常都会验证位于 appname.app/Contents/_MASReceipt
目录下的 receipt
文件,用以防止购买后拷贝到其他电脑中使用。如果验证失败,则调用 exit
函数传入状态码 173
,此时系统会弹出 Apple ID 登录框要求用户登录验证购买。详见苹果的文档《Receipt Validation Programming Guide》。
这个逻辑是在 applicationWillFinishLaunching:
中处理的,具体位置位于 sub_10000a160
。可以看到位于 else
中的 exit(0xad);
调用。其中 0xad
即为 173
的 16 进制表示。
解决方法也很简单,直接翻转条件跳转即可,把 jne
改成 je
。
此时已经可以正常启动应用并调试了,最后要解决的就是绕过购买直接启动服务,这一点就更简单了,找到启动的函数,位于 sub_10000eb40
,修改掉购买状态判断即可。
最后要提醒各位开发者,一定要做好反调试甚至反反反调试,最大程度增加破解的难度。