Sketch!一次悸动的小逆向尝试
Posted iOS大全
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Sketch!一次悸动的小逆向尝试相关的知识,希望对你有一定的参考价值。
来源:Uri(@Urinx )
链接:http://www.jianshu.com/p/9a1d4924103e
丙戌月 癸酉日
故事从一开始应该是这样的:最近一直在使用Sketch,然而呢,直到某一天弹出这个着实让我惊叹不已:
想着今天是1024专属日,于是乎上官网看看然而发现并没有限免,万年不变的价格也是出奇的合理,99美元能买到这样一款优秀到超出想象,好用到违反广告法的软件真的是赚到了。
看看还有没有其它类似的App,要不找找看有木有破解版?故事的结尾刚要如此,然而笔锋一转,情节立马一波三折,没想到用盗版软件的也会有自己破解软件的今天-_-||。因为最近刚看完了一些ios逆向开发的书,奈何没有越狱的设备,只好在OS X上练练手。正所谓道法自然,虽平台,工具不同,但内功都是一样的。
不忍直视的弹窗
现在先让我们为这个万恶的弹窗默哀一分钟,接着就开始仔细关注分析一下有哪些入手点。仔细一看就会发现,那个welcome界面依然还在的,也就是说主程序仍然是可以使用的,只是在其上多出了一个如下图的提示注册的弹窗,获取了当前的焦点,以至于我们无法进行其他的操作。
所以我们的任务很简单啦,要么在register上做文章,弄清楚注册流程和算法(第一次我就不要不要试这个了,顿时压力好大);要么在quit按钮上做文章,使其只关闭弹窗但不退出整个程序;或者在判断是否Trial Expired的过程中做手脚;最后,还有最简单的,但是却不优雅的,就是直接去掉弹窗就好了。
工具嘛,IDA或Hopper Disassembler按自己的喜欢就可以了,这里我就用Hopper Disassembler就可以了。开始前也可以class dump一下头文件看看,会有助于后面的分析,这里我就不用了。
那就开始咯
进入Sketch.app目录,找到Sketch二进制文件把它丢进Hopper里然后坐等分析,分析完后如下图:
Hopper这个软件很强大,不过是收费的,但提供免费试用的,试用版的每30分钟会退出一次(咳咳,用自己来破解自己,想想就可怕)。
我们在左边搜索一下弹窗出现的相关关键字Trial:
从字面上,我们一眼就能看出每个类每个方法的作用,其中BCTrialCountdown这个类我猜就是负责计算剩余试用天数的,里面的trialPopUpWithNumberOfDays方法应该就是那个不厌其烦每次弹出提示我们还有多少天过期。
而BCTrialExpiredWindowController应该就是我们要找的弹窗的controller,有show,quit,visitStore,registerLicense等方法,嗯,没错,就是它了。这样我们就很快定位到相关函数了。
下面我们来仔细看看show方法的汇编代码:
其实也没什么可看的,看最后的一个call,传给_objc_msgSend的两个参数,一个是自身的实例,另一个是runModalForWindow的selector,也就是说这里才弹出窗口:
你可以下个断点确认下,我已经确认了,也就是说,在0x1002aa7a6处将这个call r12置成nop不让它调用就可以了。
这样弹窗就不会出现了。到这里,尽管目的达到了,可是感觉不怎么优雅,明明是考验开锁技巧的,却偏偏用锤子直接把锁砸开了。尽管我现在做不到写注册机这种地步,可是还是让我们把修改还原,还是再多看看吧。
代码辣么长,我想再看看
上面我们是粗鲁的破坏掉了BCTrialExpiredWindowController的show方法,使其失去了弹窗的作用。与其破坏,还不如不让其调用。我们找找看看是在哪调用的。
可以看到,从0x1002a8834处开始调用BCTrialExpiredWindowController的show方法,往上看看这个sub procedure整体:
整体上这样看就很明白了,0x1002a87f2到0x1002a8832这段是判断是否有license,如果有,就跳转到0x1002a884c处,然后返回,如果不正确,就往下到0x1002a8834调用BCTrialExpiredWindowController的show方法弹窗。这样也表明了0x1002a87e7的test是用来判断是否过期,过期的话就跳转去判断是否有license。
看懂了这里,我们就只用修改cmp r14, 0x1这句为cmp r14, 0x0,然后就能无限使用了,这比之前的是不是更好一些呢。
然后Shift+Cmd+E将其保存为二进制文件,将原来的二进制文件备份,然后相应的替换即可。
至此,弹窗已去,万佛朝宗,大功告成,天下我有。
最美的永远是意外
悲剧往往发生在你双击的那一刻,因为你永远都不会知道打开的是什么。当我们双击运行看看,咦,怎么打不开,而且是闪退有木有,难道是我们打开的方式不对?
没错,真的是打开方式不对。这次我们不点击应用图标,而是进入其目录直接运行二进制文件看看:
这下就明白了。程序自己退出了,并打印了一些信息,说明程序内部有对自身进行检测,如果发现代码,签名等被修改了就强制退出。嗯,我猜应该是这样。
没办法,看来活还没干完,打开Hopper接着干。这次,我们查找Invalid Signing这个字符串,看是哪里输出的。
00000001001bffbf lea rdi, qword [ds:cfstring_Invalid_Signing] ; @"Invalid Signing", argument "format" for method imp___stubs__NSLog, XREF=sub_1001bfe40+357
00000001001bffc6 xor eax, eax
00000001001bffc8 call imp___stubs__NSLog
00000001001bffcd mov edi, 0xae ; argument "status" for method imp___stubs__exit
00000001001bffd2 call imp___stubs__exit
嗯,没错,就是这里。调用NSLog输出@"Invalid Signing",然后就退出程序。
再来看看全部代码,下图会更直观一些:
可以看到,不管上面进行了什么操作,都要经过0x1001bff7a这里,然后通过test r13d, r13d判断是直接返回呢,还是跳到0x1001bffbf这里退出呢。既然这样,我们将下面的jne 0x1001bffbf置为nop就可以了。
修改后保存成二进制文件,再运行就没有问题了。
最后放出链接,http://pan.baidu.com/s/1qWmXcTm
打完收工。
------------------ 推荐 ------------------
范品社推出了十几款程序员、电影、美剧和物理题材的极客T恤。单件 ¥59.9、两件减¥12、四件减¥28,详见网店商品页介绍。
淘口令:复制以下红色内容,然后打开手淘即可购买
范品社,使用¥极客T恤¥抢先预览(长按复制整段文案,打开手机淘宝即可进入活动内容)
以上是关于Sketch!一次悸动的小逆向尝试的主要内容,如果未能解决你的问题,请参考以下文章