丙戌月 癸酉日
故事从一开始应该是这样的:最近一直在使用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
方法的汇编代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
+[BCTrialExpiredWindowController show]: 00000001002aa6e0 push rbp ; Objective C Implementation defined at 0x100368688 (class) 00000001002aa6e1 mov rbp, rsp 00000001002aa6e4 push r15 00000001002aa6e6 push r14 00000001002aa6e8 push r13 00000001002aa6ea push r12 00000001002aa6ec push rbx 00000001002aa6ed push rax 00000001002aa6ee mov rbx, rdi 00000001002aa6f1 mov rdi, qword [ds:objc_cls_ref_BCTrialExpiredWindowController] ; objc_cls_ref_BCTrialExpiredWindowController, argument "instance" for method _objc_msgSend 00000001002aa6f8 mov rsi, qword [ds:0x1003d2178] ; @selector(alloc) 00000001002aa6ff mov r12, qword [ds:imp___got__objc_msgSend] ; imp___got__objc_msgSend 00000001002aa706 call r12 ; _objc_msgSend 00000001002aa709 mov r14, rax 00000001002aa70c mov rsi, qword [ds:0x1003d2230] ; @selector(class), argument "selector" for method _objc_msgSend 00000001002aa713 mov rdi, rbx ; argument "instance" for method _objc_msgSend 00000001002aa716 call r12 ; _objc_msgSend 00000001002aa719 mov rdi, rax ; argument "aClass" for method imp___stubs__NSStringFromClass 00000001002aa71c call imp___stubs__NSStringFromClass 00000001002aa721 mov rdi, rax ; argument "instance" for method imp___stubs__objc_retainAutoreleasedReturnValue 00000001002aa724 call imp___stubs__objc_retainAutoreleasedReturnValue 00000001002aa729 mov rbx, rax 00000001002aa72c mov rsi, qword [ds:0x1003d4100] ; @selector(initWithWindowNibName:), argument "selector" for method _objc_msgSend 00000001002aa733 mov rdi, r14 ; argument "instance" for method _objc_msgSend 00000001002aa736 mov rdx, rbx 00000001002aa739 call r12 ; _objc_msgSend 00000001002aa73c mov r14, rax 00000001002aa73f mov r13, qword [ds:imp___got__objc_release] ; imp___got__objc_release 00000001002aa746 c_release] ; imp___got__objc_release 00000001002aa746 f.png" alt="11266748-83d9e9f013df5c7e">
想着今天是1024专属日,于是乎上官网看看然而发现并没有限免,万年不变的价格也是出奇的合理,99美元能买到这样一款优秀到超出想象,好用到违反广告法的软件真的是赚到了。 看看还有没有其它类似的App,要不找找看有木有破解版?故事的结尾刚要如此,然而笔锋一转,情节立马一波三折,没想到用盗版软件的也会有自己破解软件的今天-_-||。因为最近刚看完了一些iOS逆向开发的书,奈何没有越狱的设备,只好在OS X上练练手。正所谓道法自然,虽平台,工具不同,但内功都是一样的。 不忍直视的弹窗现在先让我们为这个万恶的弹窗默哀一分钟,接着就开始仔细关注分析一下有哪些入手点。仔细一看就会发现,那个welcome界面依然还在的,也就是说主程序仍然是可以使用的,只是在其上多出了一个如下图的提示注册的弹窗,获取了当前的焦点,以至于我们无法进行其他的操作。 所以我们的任务很简单啦,要么在register上做文章,弄清楚注册流程和算法(第一次我就不要不要试这个了,顿时压力好大);要么在quit按钮上做文章,使其只关闭弹窗但不退出整个程序;或者在判断是否 工具嘛,IDA或Hopper Disassembler按自己的喜欢就可以了,这里我就用Hopper Disassembler就可以了。开始前也可以class dump一下头文件看看,会有助于后面的分析,这里我就不用了。 那就开始咯进入Sketch.app目录,找到Sketch二进制文件把它丢进Hopper里然后坐等分析,分析完后如下图:
我们在左边搜索一下弹窗出现的相关关键字 从字面上,我们一眼就能看出每个类每个方法的作用,其中 而 下面我们来仔细看看
|