吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6405|回复: 41
收起左侧

[MacOS逆向] 优化MacOS下的超级右键2.2.1

  [复制链接]
QiuChenly 发表于 2023-1-3 16:27

优化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下载的版本如图所示。
16727307240306.jpg
左下角有一个订购按钮,盲猜订阅后会消失。但这并不是重点。

0x02 悟彻汇编真妙理 断魔归本合元神

正如上图所示,肯定要搜字符串"您的试用期还剩下xxx"啊!
这种想法是错误的。我们看一下代码:
16727318115160.jpg
函数是顺序执行的,也就是说: 只有没有订阅的用户才会提示这个字符串,如果订阅了会直接不显示。
这一点我们打开start函数----也就是app入口函数佐证这一点:
16727320415899.jpg
注意看伪代码228行,我来翻译一下这段代码:

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;//这里直接跳转到启动主程序代码 而不进行后面的剩余时间计算
  }

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

那么爆破点在哪里呢?

0x03 IDA助威征正版 落叶施法灭授权

即然知道问题在哪里,那么我们就要狠狠的Crack it。

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;
  }

改为

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;
  }

16727329919354.jpg
也就是如图所示两个夺命连环Call。如果你不nop掉软件会因为null指针崩溃:因为你根本没有授权文件,读到的可不就是null?
16727331128532.jpg
黄色表示修改后的字节。

sub_10001D3D4函数改返回值 6a 01 58 c3。
16727329075137.jpg
改为
16727329371773.jpg
即可。

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

最后改完之后伪代码如下:
16727335649197.jpg

最后导出文件,codesign it。
16727333896088.jpg
打开app:
16727336102263.jpg
发现左下角的订购按钮已经悄然失踪。并且应该不会有暗桩,因为上面计算时间的代码此时被我强制跳过,也就是走的正版激活版本的流程。

0x04 九九数完魔灭尽 三三行满道归根

最后欣赏一下成品:
16727337749813.jpg

免费评分

参与人数 6威望 +1 吾爱币 +26 热心值 +6 收起 理由
白逸轩 + 1 + 1 用心讨论,共获提升!
Hmily + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
魔术师_ + 1 + 1 用心讨论,共获提升!
jamessteed + 1 + 1 谢谢@Thanks!
luliucheng + 2 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
FFFff0301 + 1 + 1 看起来好详细,回去试试。期待大佬更多作品

查看全部评分

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

 楼主| QiuChenly 发表于 2023-1-4 01:16
本来看版规说不允许发成品传播 我就不上传成品,但是翻了下同区的帖子都会贴上学习文件,那我也浅浅的贴一个好了:
iRightMouse.zip (201.24 KB, 下载次数: 216)
替换原文件,然后 codesign重新签名。不会的可以百度。
周爹爹 发表于 2023-1-3 16:38
hewyang 发表于 2023-1-3 16:39
辉夜年华 发表于 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这个了,怎么进入函数里哈
iShot_2023-01-03_21.24.09.png
觅寻 发表于 2023-1-3 23:47
感谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-12-22 20:20

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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