如何破解Mac软件的付费限制(一)

如何破解Mac软件的付费限制(一)

一、前言

在使用Mac的过程中,经常会碰到一些软件,属于付费使用产品。那么处于好奇或者自学的目的,能不能绕过这个限制呢。今天简单的分享下我破解的几款软件当中的一款,具体是什么软件就不说了,主要是提供下破解的思路。由于不能供发图,所以这里简单介绍下这款软件。这款软件是App Store上的一款磁盘清理软件,扫描是免费的。扫描到数据之后,点击清理按钮时候会检查是否注册。如果注册了,直接进入清理程序,否则弹出注册页面。

二、环境准备

我这里使用的是Hopper + lldb来进行调试。Hopper是一款反汇编二进制的软件,可以将一个MachO(苹果的可执行文件)文件反汇编成汇编代码,查看程序的一些基本逻辑。而lldb是系统提供的一款调试软件,可以对程序下断点、单步调试等操作。如何不太熟悉这两款这两款软件如何使用,可以百度学习下,这里先不介绍。

三、代码定位

先下载指定App到本地,运行软件,观察软件的特征。打开Hopper,将App的Macho文件拖入进去,即可对相应app进行反汇编。一般来说,类名和方法名是没有被混淆的(当然也有通过加壳进行混淆的,相应可以进行脱壳),我们大致可以通过类名和方法名来进行定位相应代码。这里是我定位到相应的部分汇编代码

-[XXXXXXXXViewController cleanPressed:]:

00000001000275ee lea rdx, qword [cfstring_Clean_Clicked]

00000001000275f5 lea rcx, qword [cfstring_]

00000001000275fc mov rdi, r14

00000001000275ff mov r8, rcx

0000000100027602 mov r9, rbx

0000000100027605 call r13

0000000100027608 mov r15, qword [_objc_release_1000fb5b0]

000000010002760f mov rdi, rbx

0000000100027612 call r15

0000000100027615 mov rdi, r14

0000000100027618 call r15

000000010002761b mov rdi, qword

0000000100027622 add rdi, r12

0000000100027625 call imp___stubs__objc_loadWeakRetained

000000010002762a mov rbx, rax

000000010002762d mov rsi, qword [0x100138678]

0000000100027634 mov rdi, rbx

0000000100027637 call r13

000000010002763a mov r14, rax

000000010002763d mov rdi, rbx

0000000100027640 call r15

0000000100027643 test r14, r14

0000000100027646 je loc_10002768a

从方法名可以看出是清理按钮按下方法,从倒数第二行可以看出是进行对比,如果注册直接进行清理,不注册则弹出注册界面。这里是我大致初步的判断,如何判断我是否找对了呢?这时候就需要lldb来进行挂载调试了。

四、lldb挂载调试

lldb如果没有接触过,可以百度进行学习,这里受篇幅限制,不作介绍。对于lldb来说,最重要的就是下断点,而下断点要么是符号,要么就是地址。上面Hopper反汇编出来可以看到,已经具备了地址,那么是不是可以使用这个地址进行下断点呢?这里就需要说下苹果的ASLR机制。 在计算机科学中,地址空间配置随机加载(英语:Address space layout randomization,缩写ASLR,又称地址空间配置随机化、地址空间布局随机化)是一种防范内存损坏漏洞被利用的计算机安全技术。ASLR通过随机放置进程关键数据区域的地址空间来防止攻击者能可靠地跳转到内存的特定位置来利用函数。现代操作系统一般都加设这一机制,以防范恶意程序对已知地址进行Return-to-libc攻击。 所以每一次程序被加载进内存,内存起始地址都会随机,获取到这个随机地址加上Hopper里的地址就是真实的地址。那么如何拿到这个地址呢? 打开命令行终端,执行命令lldb -n (appname) -w,然后点击运行相应程序。当程序启动后,发现被挂起,终端lldb进入可执行命令模式,紧接着输入以下命令 im list -o -f ,得到以下输出内容

[ 0] 0x00000000024ed000 XXXX.app/Contents/MacOS/XXXX

[ 1] 0x000000010922a000 /usr/lib/dyld

[ 2] 0x0000000102652000 AFNetworking

[ 3] 0x00000001026c6000 CargoBay

[ 4] 0x00000001026eb000 RNCryptor_objc

所以可以看到实际的地址应该是0x0000000100027640+0x00000000024ed000,接下来对该地址进行下断点 br set -a "0x0000000100027640+0x00000000024ed000",下断点成功,点击软件的清理按钮,发现该地方只是弹出是否选择文件的判断。继续看cleanPressed方法汇编的代码,发现有如下汇编代码

-> 0x102514674 <+246>: testb %al, %al

0x102514676 <+248>: je 0x102514771

0x10251467c <+254>: movq %rbx, %rdi

0x10251467f <+257>: callq *0xd3f2b(%rip)

testb指令的含义是将两个寄存器的值进行与操作,如果为1,则je条件成立,如果为0,je条件为假。那么我们可以通过register read/x al来读取寄存器的值,打印的值为0x0,那么我们只要将al寄存器的值设置为0x1即可绕过该操作。通过命令register write al 0x1将寄存器的值进行改写,之后输入命令c来进行继续运行,发现正常进行了清理,跳过了注册的步骤,成功绕过注册的限制。

五、总结

由于不能写出相应app的名称,导致整篇文章看起来比较难以理解。本篇只是从逻辑上进行讲解,大概的一个流程。本篇虽然实现了绕过注册逻辑,但是这样手动一步一步比较麻烦。好在lldb提供了python脚本自动化的能力,那么下一篇文章我们讲解如何通过python来自动化实现产品注册绕过的实现。

~ 欢迎大家加入我们的知识星球,一起交流学习 ~ 微信扫码加入: 点击链接加入:https://t.zsxq.com/n27YzRV

相关推荐

四个优质插画接单平台助你轻松变现
365bet体育滚球

四个优质插画接单平台助你轻松变现

08-17 👁️‍🗨️ 9633
脘腹冷痛是什么症状
mobile.365-588

脘腹冷痛是什么症状

08-12 👁️‍🗨️ 5391
傻傻分不清!是“账号”还是“帐号”?国家语委最新回应
手机导航软件哪个不用流量?不用流量的导航软件推荐
一次省心的装修体验:我选择了宜家全屋设计服务
365bet信誉怎么样

一次省心的装修体验:我选择了宜家全屋设计服务

07-05 👁️‍🗨️ 5929
如何安装Caret包?在安装时,我收到了这个消息。
mobile.365-588

如何安装Caret包?在安装时,我收到了这个消息。

09-02 👁️‍🗨️ 6634
英雄联盟世界赛胜率榜揭晓:Bengi称王,Faker保留传奇地位
云扩科技和UiPath哪个好用
365bet信誉怎么样

云扩科技和UiPath哪个好用

07-18 👁️‍🗨️ 5142
碧蓝航线12月12日更新内容
365bet信誉怎么样

碧蓝航线12月12日更新内容

08-04 👁️‍🗨️ 1714