如何破解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来自动化实现产品注册绕过的实现。

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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值