吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 11816|回复: 101
收起左侧

[MacOS逆向] Paddle激活类Mac应用通杀(AirBuddy、Downie 4、Lunar、Unite 4)

    [复制链接]
Soft98 发表于 2023-2-26 20:49
本帖最后由 Soft98 于 2023-7-27 07:11 编辑
  • 2023.3.7 增加已知应用:SideNotes

Paddle激活类Mac应用通杀

0x00 原理

Paddle官网:https://www.paddle.com/

据官网描写的,就是他们提供了完整支付、税收和订阅的解决方案。目前有很多Mac应用也都在用这种方式去进行邮箱和授权码激活,但是它本身只是一种远端校验,通过篡改请求返回值可以达到校验成功的效果。

这里给出发文时通用的请求接口:https://v3.paddleapi.com/3.2/license/activate

具体的请求结果可以自己抓一下包,然后结合反编译paddle查看一下所需要的返回字段值。

0x01 如何判断是否使用Paddle激活

1 查看激活界面

一般向类似如下的界面,就有可能是依赖paddle激活的,当然有的应用会美化激活界面。

image-20221220183132254.png

2 抓包

代{过}{滤}理应用流量后,查看激活请求是否是开头提到的链接或者相似的。

3 查看包内容

在访达中右键应用程序显示包内容,在Contents/Frameworks/文件夹下,如果Paddle.framework的文件夹,就是用paddle进行激活的,如果要逆向分析paddle的返回值字段,需要用Hopper打开这个文件夹下的Paddle程序。

0x02 定位关键点

用hopper打开应用程序包下的paddle主程序,一般路径为/Applications/应用程序.app/Contents/Frameworks/Paddle.framework/Paddle,然后在字符串中搜索关键字license/activate

image-20230226161212287.png

反向追踪,找到调用函数,可以看出来名称是做了混淆的,但是结合抓包抓到的请求包,是可以判断出红框中的是请求逻辑,*(&var_B8 + 0x10)就是回调函数,继续追进去看一下。

image-20230226161446697.png

点进去可以看到一些关键字符串,其中也是有执行一些方法,但是因为名称混淆了,所以只能靠猜。

image-20230226161909622.png

分析一下,首先是对返回值中的product_id进行判断,是否等于*(rbx + 0x20)的内容,这里是和本地的进行以下对比,确定是同一个产品

image-20230226162302898.png

然后就是实例化一个不知道是干什么的对象,进行了赋值操作,当然根据取值的key值,可以推断出后两个赋值的内容是返回值中的activation_idtype

image-20230226162808487.png

第一个赋值的内容是从一个函数中返回的,点进去看一下,可以看到它的逻辑是取expires的布尔值,判断是不是1,猜测是判断激活是否在有效期内,在有效期就取expiry_date的内容,然后返回,否则就是返回0.

image-20230226163110229.png

结合请求返回值格式,就可以猜出以下关键字内容:

{
    "success": true,
    "response": {
        "product_id": "585133",
        "activation_id": "admin",
        "type": "personal",
        "expires": 1,
        "expiry_date": 1999999999999
    }
}

product_id要根据程序进行变化,可以取激活请求的请求体中对应的id,activation_id我理解为被授权的用户名称,这个可以随意,type字段貌似也没有太多固定的值,此处的personal也是我在激活请求的请求体中看到的值,但是有些paddle激活请求又不带这个内容,有点迷惑,大家可以固定为personal即可。

0x03 如何激活

  • 直接在抓包的时候修改返回包
  • 编写抓包工具插件,自动化修改返回值
    • 推荐使用mitmproxy(编写插件比较简单)
  • hook的方式

0x04 mitmproxy-addon

FuckPaddle.py

class FuckPaddle:
    def response(self,flow):
        '''返回值接收之前'''
        if flow.request.pretty_url.find('/3.2/license/activate') != -1:
            product_id = flow.request.urlencoded_form.get_all('product_id')[0]
            resp_str = '{"success":true,"response":{"product_id":"' +product_id+ '","activation_id":"admin","type":"personal","expires":1,"expiry_date":9999999999999}}'
            flow.response.content = resp_str.encode("utf-8")

addons = [FuckPaddle()]

插件使用方法:mitmdump -s FuckPaddle.py --listen-host 127.0.0.1 -p 10086 -k

命令中的端口可以自己改,然后就将指定的应用转到对应的代{过}{滤}理端口上就可以了。

0x05 frida-hook

我能力有限,因为方法名称被混淆,所以没有找到合适的通用hook方式,所以找了一种另类的方式,通过重置试用的方式达到无限使用的目的,但是前提是该应用提供了试用功能。

灵感来源于Paddle官方提供的文档:https://developer.paddle.com/reference/27f8aff6391a0-trial-access-mac#resetting-and-expiring-trials

感兴趣的其实可以通过阅读文档进一步完善破解的方式

// 此处hook trialDaysRemaining的目的是获取当前进程中的PADProduct,然后调用重置试用期的方法
// 以下代码在Downie 4中测试成功
const targetClass = ObjC.classes.PADProduct;
let methodName = "- trialDaysRemaining";
Interceptor.attach(targetClass[methodName].implementation, {
    onEnter(args) {
        const reciver = ObjC.Object(args[0]);
        reciver.resetTrial();
        console.log("Reset Trial Success!");
    }
});

0x06 已知Paddle激活应用

  • AirBuddy
    • AirBuddy存在检验授权是否合格的请求,这个大家可以自己分析一下,但是代{过}{滤}理的方式可能就不太合适了,完美版可以参考QiuChenly大佬的dylib注入的方式进行修改,https://www.52pojie.cn/thread-1739112-1-1.html
    • URL:https://v3.paddleapi.com/3.2/license/verify
  • Downie 4
    • 存在激活码格式校验,这边给出一个可以通过校验的激活码示例
    • B7EE3D3C-B7EE3D3C-B7EE3D3C-B7EE3D3C-B7EE3D3C
  • Lunar
  • Unite 4

0x07 参考

免费评分

参与人数 18吾爱币 +18 热心值 +16 收起 理由
自去经心 + 1 鼓励转贴优秀软件安全工具和文档!
lamyuksam + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
yuhan5187 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
xs20010601 + 1 + 1 热心回复!
b12312312 + 1 + 1 热心回复!
rigxu + 1 用心讨论,共获提升!
Diamondzl + 1 + 1 我很赞同!
onlywey + 1 + 1 热心回复!
5omggx + 1 + 1 用心讨论,共获提升!
笙若 + 1 + 1 谢谢@Thanks!
Bluesky10 + 1 + 1 热心回复!
sifeng + 1 + 1 鼓励转贴优秀软件安全工具和文档!
SeevenVern + 1 + 1 用心讨论,共获提升!
mayl8822 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
抱薪风雪雾 + 1 + 1 谢谢@Thanks!
唐小样儿 + 1 + 1 我很赞同!
拆里月华 + 1 + 1 我很赞同!
blindcat + 1 + 1 膜拜大佬

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| Soft98 发表于 2023-2-26 21:10
发一个成功的证明:
iShot_2023-02-26_21.10.08.png

免费评分

参与人数 3吾爱币 +4 热心值 +3 收起 理由
CodeLoong + 1 + 1 谢谢@Thanks!
a90120411 + 2 + 1 谢谢@Thanks!
风逝998 + 1 + 1 热心回复!

查看全部评分

PorridgePi 发表于 2023-9-17 01:15
成功了,感谢分享!
顺带分享几个使用 Paddle 激活的软件:
- AirBuddy
- Downie 4
- One Switch
- Swish
- Rectangle Pro
小坏丶 发表于 2023-3-9 12:59
vans4u1 发表于 2023-3-1 01:21
Downie4 最简单方法,hopper载入Paddle ,PADProduct activated 这个方法ret ,就不提示试用了。
q6346753 发表于 2023-2-26 22:01
大佬就是大佬
hoochanlon 发表于 2023-2-26 22:35
Soft98 发表于 2023-2-26 21:10
发一个成功的证明:

可以啊,早前破解iPad的xmind差不多也是这个原理,网球抓包,改字段,换文件。
xixicoco 发表于 2023-2-27 02:16
好文章啊,可以加精了
andyle 发表于 2023-2-27 08:12
感谢分享,做个记号
zjh889 发表于 2023-2-27 09:01
好东西必须要顶,谢谢楼主!
ydna1234 发表于 2023-2-27 09:18
感谢分享哈,谢谢
丶夜雨无声 发表于 2023-2-27 09:29
做个记号留底 感谢楼主!
sanshenghepan 发表于 2023-2-27 09:34
感谢分享哈,谢谢
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-22 10:57

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表