逆向 FirmStream

其实我很少写软件破解的文章,因为大家都是开发者,做个软件混口饭吃不容易,开发者还用盗版软件那真是行业的悲哀。但是今天这个软件搞得我有点上火,我遇到了点问题,联系开发者回复非常不友善,我脑子一热趁着午休的时间就给它破解了,在分享出去之前还是理智地放弃了。这篇文章就记录一下这个软件的破解步骤,供后来者学习。不要试图向我索要破解文件,已经删掉了,因为我已经买了,留着也没用。

FireStream 是 macOS 平台上一款 UPnP/DLNA 流媒体服务器软件,是目前我发现的综合体验最好的。这款软件只在 MAS 分发,售价 $19.99,开发者很勤劳,更新很频繁。

FireStream 版本为 2.27,Hopper Disassembler 版本为 4.7.3,均为最新版。

用 Hopper 分析完成后,直接 Debug,发现无法启动,说明做了反调试,先找到 entrypoint,会发现有两个入口,分别是 EntryPointEntryPoint_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,修改掉购买状态判断即可。

最后要提醒各位开发者,一定要做好反调试甚至反反反调试,最大程度增加破解的难度。

posted @ 2021-04-10 03:49  疯狂的萝卜  阅读(107)  评论(0编辑  收藏  举报