QiuChenly 发表于 2023-1-3 16:27

优化MacOS下的超级右键2.2.1

# 优化MacOS下的超级右键2.2.1

## Tools
1. IDA 8.2 Free
2. 6A 01 58 C3
3. sudo cp /Users/qiuchenly/Downloads/iRightMouse /Applications/iRightMouse.app/Contents/MacOS/iRightMouse && sudo codesign -f -s - --timestamp=none /Applications/iRightMouse.app/Contents/MacOS/iRightMouse
4. jz => jnz; nop(90);

## 0x01 灵根育孕源流出 心性修持大道生
从AppStore下载的版本如图所示。

左下角有一个订购按钮,盲猜订阅后会消失。但这并不是重点。

## 0x02 悟彻汇编真妙理 断魔归本合元神
正如上图所示,肯定要搜字符串"您的试用期还剩下xxx"啊!
这种想法是错误的。我们看一下代码:

函数是顺序执行的,也就是说: 只有没有订阅的用户才会提示这个字符串,如果订阅了会直接不显示。
这一点我们打开start函数----也就是app入口函数佐证这一点:

注意看伪代码228行,我来翻译一下这段代码:
```java
if(v37){//如果v37的值非0:意思就是v37这个寄存器内有数据
    v38=v37;//意义不明 反编译器的bug
    v39=getUserReceipt().decryptPKCS5:WithPassword(qwordxxxx);//解密用户购买的授权文件
    v42=AESEncryptUtil.dictionaryWithJsonString(v40);//转换为JSON数据给软件读取
    if(v42){//如果数据不为0:指寄存器中存在数据
      byte_10003BDD8 = sub_10001D3D4(v42) != 0;//byte_10003BDD8赋值为1表示注册成功,意思就是sub_10001D3D4()返回值要非0才行.
    }
}
if ( byte_10003BDD8 )//如果为1
{
    objc_msgSend(v3, "removeObjectForKey:", "LeftTime");//删除剩余时间key对应的数据 应该是类似于取消显示
    byte_10003BAA8 = 0;
    goto LABEL_47;//这里直接跳转到启动主程序代码 而不进行后面的剩余时间计算
}
```
想必大家都看得懂了。那么我是怎么知道这里是检查授权的呢?

答案很简单,我直接翻开入口函数就发现这段代码了。
做IOS开发的想必知道receipt这个单词的意思,虽然我对IOS开发一窍不通:这是表示读取Apple用户订阅的有效授权票。
结合上面说到的跳转,我想你也能猜到这到底代表什么意思了吧!

那么爆破点在哪里呢?
## 0x03 IDA助威征正版 落叶施法灭授权
即然知道问题在哪里,那么我们就要狠狠的Crack it。

```c
if ( v37 )
{
    v38 = v37;
    v39 = objc_msgSend(&OBJC_CLASS___AESEncryptUtil, "decryptPKCS5:WithKey:", v37, qword_10003BDE8);
    v40 = objc_retainAutoreleasedReturnValue(v39);
    objc_release(v38);
    v41 = objc_msgSend(&OBJC_CLASS___AESEncryptUtil, "dictionaryWithJsonString:", v40);
    v42 = objc_retainAutoreleasedReturnValue(v41);
    v43 = v42;
    if ( v42 )
      byte_10003BDD8 = sub_10001D3D4(v42) != 0;
    objc_release(v43);
    objc_release(v40);
    v28 = v115;
}
```
改为
```cpp
if ( !v37 )
{
    v38 = v37;
    nop;
    v40 = objc_retainAutoreleasedReturnValue(v39);
    objc_release(v38);
    nop;
    v42 = objc_retainAutoreleasedReturnValue(v41);
    v43 = v42;//由于nop了赋值函数 这里v41会变成0 也就是v42会变成0 所以要把jz改成jnz强制跳转。
    if ( !v42 )
      byte_10003BDD8 = sub_10001D3D4(v42) != 0;
    objc_release(v43);
    objc_release(v40);
    v28 = v115;
}
```

也就是如图所示两个夺命连环Call。如果你不nop掉软件会因为null指针崩溃:因为你根本没有授权文件,读到的可不就是null?

黄色表示修改后的字节。

sub_10001D3D4函数改返回值 6a 01 58 c3。

改为

即可。

最后别忘了v37也需要反转字节哦!jz改为jnz即可。


最后改完之后伪代码如下:


最后导出文件,codesign it。

打开app:

发现左下角的订购按钮已经悄然失踪。并且应该不会有暗桩,因为上面计算时间的代码此时被我强制跳过,也就是走的正版激活版本的流程。

## 0x04 九九数完魔灭尽 三三行满道归根
最后欣赏一下成品:

QiuChenly 发表于 2023-1-4 01:16

本来看版规说不允许发成品传播 我就不上传成品,但是翻了下同区的帖子都会贴上学习文件,那我也浅浅的贴一个好了:

替换原文件,然后 codesign重新签名。不会的可以百度。

周爹爹 发表于 2023-1-3 16:38

工具在哪下载,大佬

hewyang 发表于 2023-1-3 16:39

装个MacOS就能体验下了

辉夜年华 发表于 2023-1-3 17:25

能给我发下破后的工具么?

broodwarcnyz 发表于 2023-1-3 19:38

怎么下载这个工具,大佬

qq882011 发表于 2023-1-3 20:17

谢谢分享。。。

suiyu586 发表于 2023-1-3 20:20

感谢老哥分享

宜城小站 发表于 2023-1-3 20:54

不管哪个版本
稳定能用就好
关键是成品

周爹爹 发表于 2023-1-3 21:25

大佬,定位到start这个了,怎么进入函数里哈

觅寻 发表于 2023-1-3 23:47

感谢分享
页: [1] 2 3 4
查看完整版本: 优化MacOS下的超级右键2.2.1