Soft98 发表于 2023-2-19 16:50

超级右键家族系列软件激活(iRightMouse、iShot)

本帖最后由 Soft98 于 2023-7-27 07:12 编辑

# 超级右键家族系列软件激活

## 0x00 前言

Better365官网:https://www.better365.cn/

该系列软件目前有两个付费软件是超级右键(iRightMouse)和iShot,两款软件都很好用,希望大家有条件的可以去支持正版。

## 0x01 定位关键点

软件默认会在界面有订购的字样,已经购买的用户可以进行恢复购买,我们可以通过这个地方抓取恢复购买的链接,也就是关键请求。





获取到关键请求之后就用hopper打开iRightMouse,在字符串中搜索



查看引用,可以定位到方法



这个里面就是发送请求验证的逻辑了,一般下面这种情况,红框中的就是对请求返回值处理的回调函数,这里是函数名符号应该是被去掉了,所以是`sub_100002aa4`



双击进去之后看到函数内容,就可以看到重点,一个是对`status`进行判断,一个是取`receipt`的内容进行了一些操作和判断



关键就在于`receipt`的内容,而判断的关键在于rax的值,可以看到rax判断过了之后直接就加密写入本地了,那么关键就在于`sub_10001e4ec`函数了。



双击进去可以看到这个函数又取了`in_app`和`expires_date_ms`



结合请求的返回值看,可以得出上面的关键字的所属位置关系,当然你要是从逆向伪代码中分析也能分析出来.

```json
{
"status":0,
"receipt":{
    "in_app":[
      "expires_date_ms":"1672000000000"
    ]
}
}
```

## 0x02 激活思路

- 直接在抓包时修改返回值,将`expires_date_ms`修改为你想要的到期时间戳即可
- hook软件将json数据转换为Objective-C对象的函数,对返回数据进行修改
- 直接将自己的json数据转换为objc对象返回(可以参考Typora Crack中的hook代码)
- 或者修改部分关键值(此文章采取该方法)

## 0x03 iShot不同点

iShot在激活判断时有一些不同,可能是加了新老软件的兼容,如果`expires_date_ms`不存在时,会去判断`product_id`和`purchase_date_ms`。



iShot的关键参数如下:

```json
{
"status":0,
"receipt":{
    "in_app":[
      "expires_date_ms":"1672000000000",
      "product_id":"ishotfeixuqidingyue20220212",
      "purchase_date_ms":"1672000000000"
    ]
}
}
```

## 0x04 hook

这里有一些坑就是Objective-C中有些对象是只读形式,需要先转换为可读写的对象,才能进行替换,大家在编写时可以通过在网上搜索找到答案。

```javascript
const objectForKeyedSubscript1 = ObjC.classes.NSJSONSerialization['+ JSONObjectWithData:options:error:'];
var flag1;
Interceptor.attach(objectForKeyedSubscript1.implementation,{
    onLeave(retval){
      let data = ObjC.Object(retval);
      let key_receipt = ObjC.classes.NSString.stringWithString_('receipt');
      let receipt = data.objectForKeyedSubscript_(key_receipt);
      let key_in_app = ObjC.classes.NSString.stringWithString_('in_app');
      let key_expires_date_ms = ObjC.classes.NSString.stringWithString_('expires_date_ms');
      let key_product_id = ObjC.classes.NSString.stringWithString_('product_id');
      let data_product_id = ObjC.classes.NSString.stringWithString_('ishotfeixuqidingyue20220212');
      let key_purchase_date_ms = ObjC.classes.NSString.stringWithString_('purchase_date_ms');
      let dict = ObjC.classes.NSMutableDictionary.alloc().init();
      dict.setObject_forKey_(9999999999999,key_expires_date_ms);
      dict.setObject_forKey_(9999999999999,key_purchase_date_ms);
      dict.setObject_forKey_(data_product_id,key_product_id);
      let info_array = ObjC.classes.NSMutableArray.alloc().init();
      info_array.addObject_(dict);
      let receipt1 = receipt.mutableCopy();
      receipt1.setObject_forKey_(info_array,key_in_app);
      let replace_data = data.mutableCopy();
      replace_data.setObject_forKey_(receipt1,key_receipt);
      retval.replace(replace_data);
      console.log("Crack Success!")
    }
})

```

## 0x05 参考

- [浅谈Mac应用逆向破解](https://www.soft98.top/2000@%e9%80%86%e5%90%91%e7%a0%b4%e8%a7%a3/2001@%e6%b5%85%e8%b0%88Mac%e5%ba%94%e7%94%a8%e9%80%86%e5%90%91%e7%a0%b4%e8%a7%a3)

- (https://www.soft98.top/2000@%e9%80%86%e5%90%91%e7%a0%b4%e8%a7%a3/2002@Typora%20For%20Mac%20Crack)

Soft98 发表于 2023-2-19 17:30

我是一只小小 发表于 2023-2-19 17:23
我天,虽然没成品,但也点一个,这个我在tnt好像见过破解得

因为我使用的是frida hook的方式,所以没有成品这一说,hook代码某种意义上也算是“成品”了,只要会点点frida脚本在macos上的注入就可以了。

imosx 发表于 2023-2-20 14:40

写frida js还是native hook,看个人喜好了

odmin 发表于 2023-2-19 18:11

由于未知原因出错,需要从App Store重新下载

我是一只小小 发表于 2023-2-19 17:23

我天,虽然没成品,但也点一个,这个我在tnt好像见过破解得

lyc0 发表于 2023-2-19 18:59

感谢分享!

gcode 发表于 2023-2-19 17:56

感谢楼主分享

Soft98 发表于 2023-2-19 17:47

我是一只小小 发表于 2023-2-19 17:35
,https://postimg.cc/9R6DT3L4,没事我就是说说,我有破解的

嗯嗯,这个破解不难:loveliness:,当时也是担心破解版后门啥的,就自己搞了一下。

Soft98 发表于 2023-2-19 18:36

odmin 发表于 2023-2-19 18:11
由于未知原因出错,需要从App Store重新下载

App Store下载就行,选择不付费的那个

我是一只小小 发表于 2023-2-19 17:35

Soft98 发表于 2023-2-19 17:30
因为我使用的是frida hook的方式,所以没有成品这一说,hook代码某种意义上也算是“成品”了,只要会点点 ...

,https://postimg.cc/9R6DT3L4,没事我就是说说,我有破解的

God-暗影月狐 发表于 2023-2-19 18:58

有成品打包吗
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 超级右键家族系列软件激活(iRightMouse、iShot)