首先声明
首先我是良民,国内代·里·商别在这理发店。
文章来自国外大佬QiuChenly的分享,我反正不认识这个人。
文章仅供技术研究交流,不得用于非法牟利并谢绝任何形式的传播。可能造成的一切法律责任由使用者、传播者承担,文章仅用于技术研究交流,其他一切责任作者概不负责。
没有图是否不够精彩,所以我选择先来个大的。
973E6C508E6C7B6C69F5ADC9ADD551FD.jpg (902.04 KB, 下载次数: 0)
下载附件
2022-10-30 20:56 上传
有一说一不吹不黑纯路人
[ol]
HD用来可视化伪代码,IDA的伪代码有误导。如果IDA中的伪代码令人困惑,可以使用HD查看后在IDA中修改。
[/ol]
破解主程序
找到.app/MacOS中CleanMyMac-X二进制文件载入IDA,搜索isAppActivated,找到此函数。
__text:0000000100033339 __CMMacPawAccountActivationManager_isAppActivated_ proc near
__text:0000000100033339 ; DATA XREF: __objc_const:0000000100627320↓o
__text:0000000100033339
__text:0000000100033339 var_8 = byte ptr -8
__text:0000000100033339
__text:0000000100033339 push rbp
__text:000000010003333A mov rbp, rsp
__text:000000010003333D sub rsp, 10h
__text:0000000100033341 lea rdi, [rbp+var_8]
__text:0000000100033345 mov qword ptr [rdi], 0FFFFFFFFFFFFFF9Ch
__text:000000010003334C call sub_100373380
__text:0000000100033351 test al, al
__text:0000000100033353 jnz short loc_100033368
__text:0000000100033355 mov edi, 1
__text:000000010003335A xor esi, esi
__text:000000010003335C call sub_100013463
__text:0000000100033361 cmp rax, 9
__text:0000000100033365 setz al
sub_100373380函数只要返回true就会认为激活撑过,所以可以patch掉此函数
__text:0000000100373380 sub_100373380 proc near ; CODE XREF: sub_10001FDCA+28↑p
__text:0000000100373380 ; +[CMLinkBuilder standardURLTrackingParametersDictionary]+21F↑p ...
__text:0000000100373380 push 1
__text:0000000100373382 pop rax
__text:0000000100373383 retn
__text:0000000100373383 sub_100373380 endp
patch后需要重新签名二进制文件
codesign -f -s - --timestamp=none /Applications/CleanMyMac\ X.app/Contents/MacOS/CleanMyMac-X
状态栏组件
打开CleanMyMac-X Menu.app中的MacOS文件夹,IDA载入CleanMyMac-X Menu。
搜索isMainAppActivated找到函数 发现是调用了CMMFoundation.framework,遂打开。
CleanMyMac\ X.app/Contents/Library/LoginItems/CleanMyMac-X\ Menu.app/Contents/Frameworks/CMMFoundation.framework
查找isMainAppActivated,发现函数
__text:0000000000073620 ; char __cdecl +[CMSharedProtectedPreferencesBridge isMainAppActivated](CMSharedProtectedPreferencesBridge_meta *self, SEL)
__text:0000000000073620 __CMSharedProtectedPreferencesBridge_isMainAppActivated_ proc near
__text:0000000000073620 ; DATA XREF: __objc_data:00000000001FB790↓o
__text:0000000000073620 push rbp
__text:0000000000073621 mov rbp, rsp
__text:0000000000073624 call sub_73940
__text:0000000000073629 movzx eax, al
__text:000000000007362C and eax, 1
__text:000000000007362F pop rbp
__text:0000000000073630 retn
__text:0000000000073630 __CMSharedProtectedPreferencesBridge_isMainAppActivated_ endp
sub_73940被多处引用,返回值设置为true即可破解。
__text:0000000000073940 sub_73940 proc near ; CODE XREF: +[CMSharedProtectedPreferencesBridge isMainAppActivated]+4↑p
__text:0000000000073940 ; _$s13CMMFoundation32SharedProtectedPreferencesBridgeC18isMainAppActivatedSbvgZ+5↑j
__text:0000000000073940 push 1
__text:0000000000073942 pop rax
__text:0000000000073943 retn
__text:0000000000073943 sub_73940 endp
修改.framework文件时要注意重新签名App文件
codesign -f -s - --timestamp=none --entitlements /Users/qiuchenly/Downloads/未命名文件夹/CMMFoundation.xml /Applications/CleanMyMac\ X.app/Contents/Library/LoginItems/CleanMyMac-X\ Menu.app
其中CMMFoundation.xml内容是一些策略:
com.apple.security.cs.allow-jit
[tr]
com.apple.security.cs.allow-unsigned-executable-memory
[tr]
com.apple.security.cs.allow-dyld-environment-variables
[tr]
com.apple.security.cs.disable-library-validation
[tr]
com.apple.security.get-task-allow
[tr]
签名后修改的App文件即可使用。
Github
https://github.com/QiuChenly/MacsFanControlCrack/commit/fffa14ad0b3c81ef8f9513d9c2ba9588604b0190