破解PhotoShop CC 24.4.1: 基于LLDB动态调试与补丁注入
前情提要
最近在追一个护士小姐姐,带出来玩了两次手都牵上了感觉很有机会,而且最近沉迷拍照,要修图的时候发现网上的版本最高也就是24.2.0,而且一联网还提示我ps无法使用,显然是检测到了盗版。无奈之下只能自己动手破解最新版,就为了修自己拍的照片。
那么看我帖子比较多的朋友呢我就不重复一些简单的步骤了,大家可以参考我早期发布的帖子互补一下相关的信息。
这次破解PS也是受到了一些朋友的帮助,还有HSICO团队放出来的24.2版本的破解文件,在此表示感谢。
本文并没有写出我失败的过程,仅仅写了成功的步骤,所以内容会有些简短。
2023.5.4 今天妹妹没约出来 很生气 索性就把Adobe全家桶都给办掉吧
把macOS上Adobe全家桶全给破解了
全部是截止2023.5.4 Adobe最新的版本
此教程提供的方法中已经破解的版本有:
Adobe XD 版本 56.1.12.1
Adobe Audition 2023 23.3
Adobe Illustrator 27.5.0
Adobe Dreamweaver 2021 21.3.0.15593
Adobe AfterEffects 23.3
Adobe PremierePro 23.3
Adobe Animate 2023 23.0.1
Adobe Media Encoder 2023 23.3
Adobe Lightroom Classic 12.3
Adobe PhotoShop 24.4.1
Adobe Acrobat 23.001.20143
0x01 开始
0x02 先上LLDB
lldb /Applications/Adobe\ Photoshop\ 2023/Adobe\ Photoshop\ 2023.app/Contents/MacOS/Adobe\ Photoshop\ 2023
输入run直接附加上去启动看看。
开局就给了我一点小小的购买正版震撼。
为了看反汇编,我们放出IDA跑一下。
等待分析IDA结果时,我们先观察一下这个app。
首先这是订阅制,那么订阅制有两种方案,一种是伪造返回数据,另一种自然就是爆破用户检查有效期的函数了。伪造数据比较复杂,这里还是选择爆破关键函数。
我们打开抓包软件,观察如下:
在启动app时,我们看到这样:
而颇为凑巧的是,app还发送了一个获取用户信息的请求
那么我们必然是有端联想:
他通过这个api获取用户信息后进行检查是否过期,如果过期则弹窗强制退出app,否则继续使用。
下面就开始检察官搜查系列:
可以看到这个网址确实存在且只有一个地方引用,所以我们开始跳转过去:
为了找到调用堆栈,我们要给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 <+9>: lea rsi, [rip + 0x37502c1] ; "/ims/token/v4"
0x1042c6e1a <+16>: call 0x1042c6750 ; ___lldb_unnamed_symbol253608
0x1042c6e1f <+21>: mov rax, rbx
0x1042c6e22 <+24>: 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库进行注入,可以看我之前的帖子,这些基本步骤都相同,在此不再赘述。
随后复制/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,可以看到成功破解。
存在的问题
- 首页不会展示上次文件打开历史,注意不是无法保存文件,功能都正常。
- 无法连接在线服务
参考补丁文件
https://github.com/QiuChenly/MyMacsAppCrack