破解PhotoShop CC 24.4.1: 基于LLDB动态调试与补丁注入

查看 103|回复 9
作者:QiuChenly   
破解PhotoShop CC 24.4.1: 基于LLDB动态调试与补丁注入
前情提要
最近在追一个护士小姐姐,带出来玩了两次手都牵上了感觉很有机会,而且最近沉迷拍照,要修图的时候发现网上的版本最高也就是24.2.0,而且一联网还提示我ps无法使用,显然是检测到了盗版。无奈之下只能自己动手破解最新版,就为了修自己拍的照片。
那么看我帖子比较多的朋友呢我就不重复一些简单的步骤了,大家可以参考我早期发布的帖子互补一下相关的信息。
这次破解PS也是受到了一些朋友的帮助,还有HSICO团队放出来的24.2版本的破解文件,在此表示感谢。
本文并没有写出我失败的过程,仅仅写了成功的步骤,所以内容会有些简短。
0x01 开始


16825993302724.jpg (260.92 KB, 下载次数: 0)
下载附件
2023-4-28 04:01 上传



16825995218177.jpg (243.52 KB, 下载次数: 0)
下载附件
2023-4-28 04:01 上传

0x02 先上LLDB
lldb /Applications/Adobe\ Photoshop\ 2023/Adobe\ Photoshop\ 2023.app/Contents/MacOS/Adobe\ Photoshop\ 2023
输入run直接附加上去启动看看。


16825995811823.jpg (69.16 KB, 下载次数: 0)
下载附件
2023-4-28 04:01 上传



16825996583066.jpg (366.64 KB, 下载次数: 0)
下载附件
2023-4-28 04:01 上传

开局就给了我一点小小的购买正版震撼。
为了看反汇编,我们放出IDA跑一下。


16826000060998.jpg (934.37 KB, 下载次数: 0)
下载附件
2023-4-28 04:01 上传

等待分析IDA结果时,我们先观察一下这个app。
首先这是订阅制,那么订阅制有两种方案,一种是伪造返回数据,另一种自然就是爆破用户检查有效期的函数了。伪造数据比较复杂,这里还是选择爆破关键函数。
我们打开抓包软件,观察如下:
在启动app时,我们看到这样:


16826199923010.jpg (355.58 KB, 下载次数: 0)
下载附件
2023-4-28 04:01 上传

而颇为凑巧的是,app还发送了一个获取用户信息的请求


16826200559653.jpg (1003.67 KB, 下载次数: 0)
下载附件
2023-4-28 04:01 上传

那么我们必然是有端联想:
他通过这个api获取用户信息后进行检查是否过期,如果过期则弹窗强制退出app,否则继续使用。
下面就开始检察官搜查系列:


16826204808286.jpg (325.86 KB, 下载次数: 0)
下载附件
2023-4-28 04:01 上传

可以看到这个网址确实存在且只有一个地方引用,所以我们开始跳转过去:
为了找到调用堆栈,我们要给1042C6E13地址下断点:
br s -a 0x1042C6E13
随后输入r重启app,让他断在我们的地址:
Process 72209 stopped
* thread #16, name = 'com.adobe.ngl-0x70000db2f000', stop reason = breakpoint 9.1
    frame #0: 0x00000001042c6e13 Adobe Photoshop 2023`___lldb_unnamed_symbol253631 + 9
Adobe Photoshop 2023`___lldb_unnamed_symbol253631:
->  0x1042c6e13 :  lea    rsi, [rip + 0x37502c1]    ; "/ims/token/v4"
    0x1042c6e1a : call   0x1042c6750               ; ___lldb_unnamed_symbol253608
    0x1042c6e1f : mov    rax, rbx
    0x1042c6e22 : add    rsp, 0x8
Target 0: (Adobe Photoshop 2023) stopped.
(lldb)
然后我们输入bt查看堆栈
(lldb) bt
* thread #16, name = 'com.adobe.ngl-0x70000db2f000', stop reason = breakpoint 9.1
  * frame #0: 0x00000001042c6e13 Adobe Photoshop 2023`___lldb_unnamed_symbol253631 + 9
    frame #1: 0x000000010422b883 Adobe Photoshop 2023`___lldb_unnamed_symbol252241 + 1499
    frame #2: 0x0000000104227a09 Adobe Photoshop 2023`___lldb_unnamed_symbol252233 + 145
    frame #3: 0x0000000104229885 Adobe Photoshop 2023`___lldb_unnamed_symbol252235 + 61
    frame #4: 0x000000010428c40e Adobe Photoshop 2023`___lldb_unnamed_symbol253115 + 28
    frame #5: 0x0000000104296911 Adobe Photoshop 2023`___lldb_unnamed_symbol253131 + 2499
    frame #6: 0x0000000104287eaf Adobe Photoshop 2023`___lldb_unnamed_symbol253076 + 101
    frame #7: 0x00000001042a4b0a Adobe Photoshop 2023`___lldb_unnamed_symbol253187 + 44
    frame #8: 0x00000001042db930 Adobe Photoshop 2023`___lldb_unnamed_symbol253891 + 270
    frame #9: 0x00000001041a470e Adobe Photoshop 2023`___lldb_unnamed_symbol250887 + 66
    frame #10: 0x00000001041d6a0e Adobe Photoshop 2023`___lldb_unnamed_symbol251200 + 646
    frame #11: 0x00000001041d3b62 Adobe Photoshop 2023`___lldb_unnamed_symbol251156 + 34
    frame #12: 0x000000010424e497 Adobe Photoshop 2023`___lldb_unnamed_symbol252488 + 71
    frame #13: 0x00000001041ec35a Adobe Photoshop 2023`___lldb_unnamed_symbol251707 + 26
    frame #14: 0x000000010424e5d7 Adobe Photoshop 2023`___lldb_unnamed_symbol252490 + 59
    frame #15: 0x00007ff81a66d1d3 libsystem_pthread.dylib`_pthread_start + 125
    frame #16: 0x00007ff81a668bd3 libsystem_pthread.dylib`thread_start + 15
(lldb)
都是非常可疑的函数调用链条,为了一步到位我们直接看#14.
__int64 __fastcall sub_10424E59C(_QWORD *a1)
{
  void **v1; // rbx
  pthread_key_t *v2; // rax
  const void *v3; // rsi
  __int64 (__fastcall *v4)(_QWORD); // rax
  _QWORD *v5; // rdi
  __int64 v6; // rax
  v1 = a1;
  v2 = std::__1::__thread_local_data(a1);
  v3 = *a1;
  *a1 = 0LL;
  pthread_setspecific(*v2, v3);
  v4 = a1[1];
  v5 = v1[3] + v1[2];
  if ( v4 & 1 )
    v4 = *(v4 + *v5 - 1);
  v6 = v4(v5);
  sub_10424E1BE(v6, v1);
  operator delete();
  return 0LL;
}
可以看到这里显然是一个线程函数,__thread_local_data/pthread_setspecific一出来我就闻到那味儿了。
虽然但是,这里还不算,我们继续xref看看有没有引用了:
unsigned int __fastcall sub_10424E4E8(pthread_t *a1, __int128 *a2, __int64 *a3)
{
  __int64 *v3; // r12
  std::__1::__thread_struct *v4; // r15
  char *v5; // rbx
  __int128 v6; // xmm0
  __int64 v7; // rax
  unsigned int result; // eax
  const char *v9; // rdx
  v3 = a3;
  v4 = operator new(8uLL);
  std::__1::__thread_struct::__thread_struct(v4);
  v5 = operator new(0x20uLL);
  v6 = *a2;
  v7 = *v3;
  *v5 = v4;
  *(v5 + 8) = v6;
  *(v5 + 3) = v7;
  result = pthread_create(a1, 0LL, sub_10424E59C, v5);
  if ( result )
  {
    std::__1::__throw_system_error(result, "thread constructor failed", v9);
    BUG();
  }
  return result;
}
这里adobe创建了一个线程并返回了线程id,恰好执行的sub_10424E59C任务就是我们找到这个函数。
0x03 注入补丁持久化破解
我们新建一个Library库,编写一个简单的hook代码将sub_10424E59C这个函数nop掉。
关于如何新建Library库进行注入,可以看我之前的帖子,这些基本步骤都相同,在此不再赘述。


16826253039257.jpg (498.88 KB, 下载次数: 0)
下载附件
2023-4-28 04:01 上传

随后复制/Applications/Adobe Photoshop 2023/Adobe Photoshop 2023.app/Contents/Frameworks/AdobeARE.framework/Versions/A/AdobeARE到/Applications/Adobe Photoshop 2023/Adobe Photoshop 2023.app/Contents/Frameworks/AdobeARE.framework/Versions/A/AdobeARE_副本,然后注入我们编译出来的补丁:
sudo insert_dylib /Users/qiuchenly/Library/Caches/JetBrains/AppCode2023.1/DerivedData/InlineInjectPlugin-eklzvojrwuuobhdysecelanfrlvy/Build/Products/Debug/libInlineInjectPlugin.dylib /Applications/Adobe\ Photoshop\ 2023/Adobe\ Photoshop\ 2023.app/Contents/Frameworks/AdobeARE.framework/Versions/A/AdobeARE_副本 /Applications/Adobe\ Photoshop\ 2023/Adobe\ Photoshop\ 2023.app/Contents/Frameworks/AdobeARE.framework/Versions/A/AdobeARE
Last login: Fri Apr 28 00:51:22 on ttys003
❯ sudo insert_dylib /Users/qiuchenly/Library/Caches/JetBrains/AppCode2023.1/DerivedData/InlineInjectPlugin-eklzvojrwuuobhdysecelanfrlvy/Build/Products/Debug/libInlineInjectPlugin.dylib /Applications/Adobe\ Photoshop\ 2023/Adobe\ Photoshop\ 2023.app/Contents/Frameworks/AdobeARE.framework/Versions/A/AdobeARE_副本 /Applications/Adobe\ Photoshop\ 2023/Adobe\ Photoshop\ 2023.app/Contents/Frameworks/AdobeARE.framework/Versions/A/AdobeARE
Password:
====================
2023.2.26 秋城落叶修改版
感谢insert_dylib的开源人员!仓库地址:https://github.com/Tyilo/insert_dylib
====================
/Applications/Adobe Photoshop 2023/Adobe Photoshop 2023.app/Contents/Frameworks/AdobeARE.framework/Versions/A/AdobeARE 目标文件已经存在. 要重写他吗? [y/n] y
这是一个FAT格式二进制,携带 2 个架构的代码(Intel/Apple Silicon ARM64).
发现代码加载签名: LC_CODE_SIGNATURE load command. 要自动删掉吗? [y/n] y
发现代码加载签名: LC_CODE_SIGNATURE load command. 要自动删掉吗? [y/n] y
添加 LC_LOAD_DYLIB 指令到通用架构, 应用程序:/Applications/Adobe Photoshop 2023/Adobe Photoshop 2023.app/Contents/Frameworks/AdobeARE.framework/Versions/A/AdobeARE。
这样就注入成功。
然后我们直接打开PhotoShop,可以看到成功破解。


16826238316789.jpg (363.92 KB, 下载次数: 0)
下载附件
2023-4-28 04:01 上传

存在的问题
[ol]
  • 首页不会展示上次文件打开历史,注意不是无法保存文件,功能都正常。
  • 无法连接在线服务
    [/ol]
    参考补丁文件
    https://github.com/QiuChenly/MyMacsAppCrack

    下载次数, 下载附件

  • blindcat   

    @QiuChenly 三不娶,护士,银行女,幼师,这是无数人总结出来的教训
    whglaowang888   

    大佬厉害。
    把mac送小姐姐就行了,破什么解
    a3322a   

    学习受教,感谢例程。
    my2008og   

    感谢大佬分享,学习了!
    qqaoshi888   

    大佬厉害啊,学习了!
    xiexiaoxi   

    英雄虽然难过美人关,但是楼主破解方面确实厉害呀
    sunyidaoshang   

    做大做强
    lras   

    做的不错啊,破解后成果分享一下呀。
    qqaoshi888   

    出来两次都牵上了,就因为忙着搞破解,失去了两次机会,朋友,你这聪明没用在正地方啊
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部