diff --git a/assets/CMMX.png b/assets/CMMX.png new file mode 100644 index 0000000..942918c Binary files /dev/null and b/assets/CMMX.png differ diff --git a/crack/CMMFoundation b/crack/CMMFoundation new file mode 100755 index 0000000..37a102e Binary files /dev/null and b/crack/CMMFoundation differ diff --git a/crack/CleanMyMac X b/crack/CleanMyMac X new file mode 100755 index 0000000..1889d3b Binary files /dev/null and b/crack/CleanMyMac X differ diff --git a/crack/CleanMyMacX.md b/crack/CleanMyMacX.md new file mode 100644 index 0000000..e2c031f --- /dev/null +++ b/crack/CleanMyMacX.md @@ -0,0 +1,169 @@ +## patch activated + +### 1. find -[CMMacPawAccountActivationManager isAppActivated] + +#### x86_64 + +``` +__text:000000010003F067 +__text:000000010003F067 ; char __cdecl -[CMMacPawAccountActivationManager isAppActivated](CMMacPawAccountActivationManager *self, SEL) +__text:000000010003F067 __CMMacPawAccountActivationManager_isAppActivated_ proc near +__text:000000010003F067 ; DATA XREF: __objc_const:000000010067C6B0↓o +__text:000000010003F067 +__text:000000010003F067 var_8 = byte ptr -8 +__text:000000010003F067 +__text:000000010003F067 55 push rbp +__text:000000010003F068 48 89 E5 mov rbp, rsp +__text:000000010003F06B 48 83 EC 10 sub rsp, 10h +__text:000000010003F06F 48 8D 7D F8 lea rdi, [rbp+var_8] +__text:000000010003F073 48 C7 07 9C FF FF FF mov qword ptr [rdi], 0FFFFFFFFFFFFFF9Ch +__text:000000010003F07A E8 71 66 38 00 call sub_1003C56F0 +__text:000000010003F07F 84 C0 test al, al +__text:000000010003F081 75 13 jnz short loc_10003F096 +__text:000000010003F083 BF 01 00 00 00 mov edi, 1 +__text:000000010003F088 31 F6 xor esi, esi +__text:000000010003F08A E8 04 61 FD FF call sub_100015193 +__text:000000010003F08F 48 83 F8 09 cmp rax, 9 +__text:000000010003F093 0F 94 C0 setz al +__text:000000010003F096 +__text:000000010003F096 loc_10003F096: ; CODE XREF: -[CMMacPawAccountActivationManager isAppActivated]+1A↑j +__text:000000010003F096 0F BE C0 movsx eax, al +__text:000000010003F099 48 83 C4 10 add rsp, 10h +__text:000000010003F09D 5D pop rbp +__text:000000010003F09E C3 retn +__text:000000010003F09E __CMMacPawAccountActivationManager_isAppActivated_ endp +__text:000000010003F09E +``` + +``` +__text:00000001003C56F0 sub_1003C56F0 proc near ; CODE XREF: sub_10002B273+28↑p +__text:00000001003C56F0 ; +[CMLinkBuilder standardURLTrackingParametersDictionary]+21F↑p ... +__text:00000001003C56F0 +__text:00000001003C56F0 55 push rbp +__text:00000001003C56F1 48 89 E5 mov rbp, rsp +__text:00000001003C56F4 48 81 EC A0 06 00 00 sub rsp, 6A0h +__text:00000001003C56FB 48 8B 05 16 91 26 00 mov rax, cs:___stack_chk_guard_ptr +__text:00000001003C5702 48 8B 00 mov rax, [rax] +__text:00000001003C5705 48 89 45 F8 mov [rbp+var_8], rax +__text:00000001003C5709 48 89 BD 18 FD FF FF mov [rbp+var_2E8], rdi +__text:00000001003C5710 C6 85 17 FD FF FF 00 mov [rbp+var_2E9], 0 +__text:00000001003C5717 E8 FE E2 15 00 call _objc_autoreleasePoolPush +__text:00000001003C571C 48 8B 0D ED 8D 26 00 mov rcx, cs:_NSApp_ptr +__text:00000001003C5723 48 C7 85 08 FD FF FF 00 00 00 00 mov [rbp+var_2F8], 0 +__text:00000001003C572E 48 8B 95 08 FD FF FF mov rdx, [rbp+var_2F8] +__text:00000001003C5735 48 89 95 00 FD FF FF mov [rbp+var_300], rdx +__text:00000001003C573C 48 8D 95 00 FD FF FF lea rdx, [rbp+var_300] +__text:00000001003C5743 48 89 95 60 FD FF FF mov [rbp+var_2A0], rdx +__text:00000001003C574A 48 83 39 00 cmp qword ptr [rcx], 0 +__text:00000001003C574E 48 89 85 E8 FC FF FF mov [rbp+context], rax +__text:00000001003C5755 0F 84 39 00 00 00 jz loc_1003C5794 +__text:00000001003C575B 48 8B 05 1E 07 41 00 mov rax, cs:qword_1007D5E80 +__text:00000001003C5762 48 8B 0D A7 8D 26 00 mov rcx, cs:_NSApp_ptr +__text:00000001003C5769 48 8B 39 mov rdi, [rcx] +__text:00000001003C576C 48 8D 35 B5 07 41 00 lea rsi, unk_1007D5F28 +__text:00000001003C5773 FF D0 call rax ; qword_1007D5E80 +__text:00000001003C5775 48 89 85 E0 FC FF FF mov [rbp+var_320], rax +__text:00000001003C577C E9 00 00 00 00 jmp $+5 +``` + +opcode + +``` +55 48 89 E5 48 81 EC A0 06 00 00 48 8B 05 16 91 +26 00 48 8B 00 48 89 45 F8 48 89 BD 18 FD FF FF +C6 85 17 FD FF FF 00 E8 FE E2 15 00 48 8B 0D ED +8D 26 00 48 C7 85 08 FD FF FF 00 00 00 00 48 8B +95 08 FD FF FF 48 89 95 00 FD FF FF 48 8D 95 00 +FD FF FF 48 89 95 60 FD FF FF 48 83 39 00 48 89 +85 E8 FC FF FF 0F 84 39 00 00 00 48 8B 05 1E 07 +``` + +patch + +``` +6A 01 58 C3 +``` + +#### arm64 + +``` +__text:000000010003FC30 ; bool __cdecl -[CMMacPawAccountActivationManager isAppActivated](CMMacPawAccountActivationManager *self, SEL) +__text:000000010003FC30 __CMMacPawAccountActivationManager_isAppActivated_ +__text:000000010003FC30 ; DATA XREF: __objc_methlist:00000001004D3FD4↓o +__text:000000010003FC30 +__text:000000010003FC30 var_8 = -8 +__text:000000010003FC30 var_s0 = 0 +__text:000000010003FC30 +__text:000000010003FC30 FF 83 00 D1 SUB SP, SP, #0x20 ; __int64 +__text:000000010003FC34 FD 7B 01 A9 STP X29, X30, [SP,#0x10+var_s0] ; __int64 +__text:000000010003FC38 FD 43 00 91 ADD X29, SP, #0x10 +__text:000000010003FC3C 68 0C 80 92 MOV X8, #0xFFFFFFFFFFFFFF9C +__text:000000010003FC40 E8 07 00 F9 STR X8, [SP,#0x10+var_8] ; __int64 +__text:000000010003FC44 E0 23 00 91 ADD X0, SP, #0x10+var_8 ; int +__text:000000010003FC48 2C CD 0C 94 BL sub_1003730F8 +__text:000000010003FC4C 60 00 00 36 TBZ W0, #0, loc_10003FC58 +__text:000000010003FC50 20 00 80 52 MOV W0, #1 +__text:000000010003FC54 06 00 00 14 B loc_10003FC6C +__text:000000010003FC58 ; --------------------------------------------------------------------------- +__text:000000010003FC58 +__text:000000010003FC58 loc_10003FC58 ; CODE XREF: -[CMMacPawAccountActivationManager isAppActivated]+1C↑j +__text:000000010003FC58 20 00 80 52 MOV W0, #1 +__text:000000010003FC5C 01 00 80 D2 MOV X1, #0 +__text:000000010003FC60 40 64 FF 97 BL sub_100018D60 +__text:000000010003FC64 1F 24 00 F1 CMP X0, #9 +__text:000000010003FC68 E0 17 9F 1A CSET W0, EQ +__text:000000010003FC6C +__text:000000010003FC6C loc_10003FC6C ; CODE XREF: -[CMMacPawAccountActivationManager isAppActivated]+24↑j +__text:000000010003FC6C FD 7B 41 A9 LDP X29, X30, [SP,#0x10+var_s0] +__text:000000010003FC70 FF 83 00 91 ADD SP, SP, #0x20 ; ' ' +__text:000000010003FC74 C0 03 5F D6 RET +__text:000000010003FC74 ; End of function -[CMMacPawAccountActivationManager isAppActivated] +__text:000000010003FC74 +``` + + +``` +__text:00000001003730F8 sub_1003730F8 ; CODE XREF: sub_10002BCEC+28↑p +__text:00000001003730F8 ; +[CMLinkBuilder standardURLTrackingParametersDictionary]+210↑p ... +__text:00000001003730F8 +__text:00000001003730F8 FC 6F BE A9 STP X28, X27, [SP,#-0x10+var_10]! +__text:00000001003730FC FD 7B 01 A9 STP X29, X30, [SP,#0x10+var_s0] +__text:0000000100373100 FD 43 00 91 ADD X29, SP, #0x10 +__text:0000000100373104 FF 83 1B D1 SUB SP, SP, #0x6E0 +__text:0000000100373108 E8 63 11 91 ADD X8, SP, #0x6F0+var_298 +__text:000000010037310C C9 14 00 D0 ADRP X9, #_NSApp_ptr@PAGE +__text:0000000100373110 29 61 45 F9 LDR X9, [X9,#_NSApp_ptr@PAGEOFF] +__text:0000000100373114 AA 0F 00 90 4A 69 1D 91 ADRL X10, aDmEnableDebugL ; "DM_ENABLE_DEBUG_LOGGING_ACTIVATION" +__text:000000010037311C 0B 00 80 D2 MOV X11, #0 +__text:0000000100373120 0C 20 00 F0 8C 21 28 91 ADRL X12, qword_100776A08 +__text:0000000100373128 4D 1C 00 F0 AD 81 2F 91 ADRL X13, selRef_stringByAppendingPathComponent_ +__text:0000000100373130 AE 1C 00 B0 CE 41 14 91 ADRL X14, classRef_NSFileManager +__text:0000000100373138 4F 1C 00 F0 EF 01 05 91 ADRL X15, selRef_defaultManager +__text:0000000100373140 90 1C 00 90 10 42 2E 91 ADRL X16, selRef_alloc +__text:0000000100373148 B1 1C 00 D0 31 62 09 91 ADRL X17, classRef_NSError +__text:0000000100373150 C1 15 00 D0 21 A0 0E 91 ADRL X1, off_10062D3A8 +__text:0000000100373158 C2 14 00 D0 ADRP X2, #___stack_chk_guard_ptr@PAGE +__text:000000010037315C 42 E8 46 F9 LDR X2, [X2,#___stack_chk_guard_ptr@PAGEOFF] +__text:0000000100373160 42 00 40 F9 LDR X2, [X2] +__text:0000000100373164 A2 83 1E F8 STUR X2, [X29,#var_18] +__text:0000000100373168 E0 FF 01 F9 STR X0, [SP,#0x6F0+var_2F8] +__text:000000010037316C 03 00 80 52 MOV W3, #0 +``` + +opcode + +``` +FC 6F BE A9 FD 7B 01 A9 FD 43 00 91 FF 83 1B D1 +E8 63 11 91 C9 14 00 D0 29 61 45 F9 AA 0F 00 90 +4A 69 1D 91 0B 00 80 D2 0C 20 00 F0 8C 21 28 91 +4D 1C 00 F0 AD 81 2F 91 AE 1C 00 B0 CE 41 14 91 +4F 1C 00 F0 EF 01 05 91 90 1C 00 90 10 42 2E 91 +B1 1C 00 D0 31 62 09 91 C1 15 00 D0 21 A0 0E 91 +``` + +patch + +``` +20 00 80 D2 C0 03 5F D6 +``` + diff --git a/crack/CleanMyMacXMenu.md b/crack/CleanMyMacXMenu.md new file mode 100644 index 0000000..eb29c82 --- /dev/null +++ b/crack/CleanMyMacXMenu.md @@ -0,0 +1,158 @@ + +## 1. patch CMMFoundation isMainAppActivated + +`CleanMyMac X.app/Contents/Library/LoginItems/CleanMyMac X Menu.app/Contents/Frameworks/CMMFoundation.framework/Versions/A/CMMFoundation` + +### x86_64 + +``` +__text:0000000000071B20 ; char __cdecl +[CMSharedProtectedPreferencesBridge isMainAppActivated](id, SEL) +__text:0000000000071B20 __CMSharedProtectedPreferencesBridge_isMainAppActivated_ proc near +__text:0000000000071B20 ; DATA XREF: __objc_data:00000000001FBF08↓o +__text:0000000000071B20 55 push rbp +__text:0000000000071B21 48 89 E5 mov rbp, rsp +__text:0000000000071B24 E8 17 03 00 00 call sub_71E40 +__text:0000000000071B29 0F B6 C0 movzx eax, al +__text:0000000000071B2C 83 E0 01 and eax, 1 +__text:0000000000071B2F 5D pop rbp +__text:0000000000071B30 C3 retn +__text:0000000000071B30 __CMSharedProtectedPreferencesBridge_isMainAppActivated_ endp +__text:0000000000071B30 +``` + +``` +__text:0000000000071E40 sub_71E40 proc near ; CODE XREF: +[CMSharedProtectedPreferencesBridge isMainAppActivated]+4↑p +__text:0000000000071E40 ; static SharedProtectedPreferencesBridge.isMainAppActivated.getter+5↑j +__text:0000000000071E40 +__text:0000000000071E40 var_30 = qword ptr -30h +__text:0000000000071E40 +__text:0000000000071E40 55 push rbp +__text:0000000000071E41 48 89 E5 mov rbp, rsp +__text:0000000000071E44 41 57 push r15 +__text:0000000000071E46 41 56 push r14 +__text:0000000000071E48 41 55 push r13 +__text:0000000000071E4A 41 54 push r12 +__text:0000000000071E4C 53 push rbx +__text:0000000000071E4D 50 push rax +__text:0000000000071E4E 31 FF xor edi, edi +__text:0000000000071E50 E8 FF 21 10 00 call _$sSS10FoundationE8EncodingVMa ; type metadata accessor for String.Encoding +__text:0000000000071E55 48 8B 40 F8 mov rax, [rax-8] +__text:0000000000071E59 48 8B 40 40 mov rax, [rax+40h] +__text:0000000000071E5D 48 89 E3 mov rbx, rsp +__text:0000000000071E60 48 83 C0 0F add rax, 0Fh +__text:0000000000071E64 48 83 E0 F0 and rax, 0FFFFFFFFFFFFFFF0h +__text:0000000000071E68 48 29 C3 sub rbx, rax +__text:0000000000071E6B 48 89 DC mov rsp, rbx +__text:0000000000071E6E 48 83 3D 5A E8 18 00 FF cmp cs:qword_2006D0, 0FFFFFFFFFFFFFFFFh +__text:0000000000071E76 0F 85 E2 00 00 00 jnz loc_71F5E +__text:0000000000071E7C +``` + +opcode + +``` +55 48 89 E5 41 57 41 56 41 55 41 54 53 50 31 FF +E8 FF 21 10 00 48 8B 40 F8 48 8B 40 40 48 89 E3 +48 83 C0 0F 48 83 E0 F0 48 29 C3 48 89 DC 48 83 +3D 5A E8 18 00 FF 0F 85 E2 00 00 00 4C 8B 2D 8D +F3 18 00 4C 8B 3D 8E F3 18 00 4C 8B 35 8F F3 18 +00 4C 89 EF BE 02 00 00 00 E8 E8 2E 10 00 4C 89 +``` + +patch + +``` +6A 01 58 C3 +``` + +after + +``` +__text:0000000000071E40 sub_71E40 proc near ; CODE XREF: +[CMSharedProtectedPreferencesBridge isMainAppActivated]+4↑p +__text:0000000000071E40 ; static SharedProtectedPreferencesBridge.isMainAppActivated.getter+5↑j +__text:0000000000071E40 6A 01 push 1 +__text:0000000000071E42 58 pop rax +__text:0000000000071E43 C3 retn +__text:0000000000071E43 sub_71E40 endp +__text:0000000000071E43 +``` + +### arm64 + +``` +__text:0000000000071E00 ; bool __cdecl +[CMSharedProtectedPreferencesBridge isMainAppActivated](id, SEL) +__text:0000000000071E00 __CMSharedProtectedPreferencesBridge_isMainAppActivated_ +__text:0000000000071E00 ; DATA XREF: __objc_methlist:0000000000179770↓o +__text:0000000000071E00 +__text:0000000000071E00 var_s0 = 0 +__text:0000000000071E00 +__text:0000000000071E00 FD 7B BF A9 STP X29, X30, [SP,#-0x10+var_s0]! +__text:0000000000071E04 FD 03 00 91 MOV X29, SP +__text:0000000000071E08 B4 00 00 94 BL _$s13CMMFoundation32SharedProtectedPreferencesBridgeC18isMainAppActivatedSbvgZ_0 ; static SharedProtectedPreferencesBridge.isMainAppActivated.getter +__text:0000000000071E0C 00 00 00 12 AND W0, W0, #1 +__text:0000000000071E10 FD 7B C1 A8 LDP X29, X30, [SP+var_s0],#0x10 +__text:0000000000071E14 C0 03 5F D6 RET +__text:0000000000071E14 ; End of function +[CMSharedProtectedPreferencesBridge isMainAppActivated] +__text:0000000000071E14 +``` + +``` +__text:00000000000720D8 ; static CMMFoundation.SharedProtectedPreferencesBridge.isMainAppActivated.getter : Swift.Bool +__text:00000000000720D8 _$s13CMMFoundation32SharedProtectedPreferencesBridgeC18isMainAppActivatedSbvgZ_0 +__text:00000000000720D8 ; CODE XREF: +[CMSharedProtectedPreferencesBridge isMainAppActivated]+8↑p +__text:00000000000720D8 ; static SharedProtectedPreferencesBridge.isMainAppActivated.getter↑j +__text:00000000000720D8 +__text:00000000000720D8 var_30 = -0x30 +__text:00000000000720D8 var_20 = -0x20 +__text:00000000000720D8 var_10 = -0x10 +__text:00000000000720D8 var_s0 = 0 +__text:00000000000720D8 +__text:00000000000720D8 F8 5F BC A9 STP X24, X23, [SP,#-0x10+var_30]! +__text:00000000000720DC F6 57 01 A9 STP X22, X21, [SP,#0x30+var_20] +__text:00000000000720E0 F4 4F 02 A9 STP X20, X19, [SP,#0x30+var_10] +__text:00000000000720E4 FD 7B 03 A9 STP X29, X30, [SP,#0x30+var_s0] +__text:00000000000720E8 FD C3 00 91 ADD X29, SP, #0x30 +__text:00000000000720EC 00 00 80 D2 MOV X0, #0 +__text:00000000000720F0 54 ED 03 94 BL _$sSS10FoundationE8EncodingVMa ; type metadata accessor for String.Encoding +__text:00000000000720F4 08 80 5F F8 LDUR X8, [X0,#-8] +__text:00000000000720F8 08 21 40 F9 LDR X8, [X8,#0x40] +__text:00000000000720FC E9 03 00 91 MOV X9, SP +__text:0000000000072100 08 3D 00 91 ADD X8, X8, #0xF +__text:0000000000072104 08 ED 7C 92 AND X8, X8, #0xFFFFFFFFFFFFFFF0 +__text:0000000000072108 35 01 08 CB SUB X21, X9, X8 +__text:000000000007210C BF 02 00 91 MOV SP, X21 +__text:0000000000072110 28 0C 00 B0 ADRP X8, #qword_1F7A28@PAGE +__text:0000000000072114 08 15 45 F9 LDR X8, [X8,#qword_1F7A28@PAGEOFF] +__text:0000000000072118 1F 05 00 B1 CMN X8, #1 +__text:000000000007211C A1 07 00 54 B.NE loc_72210 +__text:0000000000072120 +``` + +opcode + +``` +F8 5F BC A9 F6 57 01 A9 F4 4F 02 A9 FD 7B 03 A9 +FD C3 00 91 00 00 80 D2 54 ED 03 94 08 80 5F F8 +08 21 40 F9 E9 03 00 91 08 3D 00 91 08 ED 7C 92 +35 01 08 CB BF 02 00 91 28 0C 00 B0 08 15 45 F9 +1F 05 00 B1 A1 07 00 54 28 0C 00 D0 08 81 15 91 +``` + +patch + +``` +20 00 80 D2 C0 03 5F D6 +``` + +after + +``` +__text:00000000000720D8 ; static CMMFoundation.SharedProtectedPreferencesBridge.isMainAppActivated.getter : Swift.Bool +__text:00000000000720D8 _$s13CMMFoundation32SharedProtectedPreferencesBridgeC18isMainAppActivatedSbvgZ_0 +__text:00000000000720D8 ; CODE XREF: +[CMSharedProtectedPreferencesBridge isMainAppActivated]+8↑p +__text:00000000000720D8 ; static SharedProtectedPreferencesBridge.isMainAppActivated.getter↑j +__text:00000000000720D8 20 00 80 D2 MOV X0, #1 +__text:00000000000720DC C0 03 5F D6 RET +__text:00000000000720DC ; End of function static SharedProtectedPreferencesBridge.isMainAppActivated.getter +__text:00000000000720DC +``` diff --git a/entitlements/CleanMyMac X HealthMonitor.app.entitlements b/entitlements/CleanMyMac X HealthMonitor.app.entitlements new file mode 100644 index 0000000..b493e66 --- /dev/null +++ b/entitlements/CleanMyMac X HealthMonitor.app.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.application-identifier + com.macpaw.CleanMyMac4.HealthMonitor + + diff --git a/entitlements/CleanMyMac X Menu.app.entitlements b/entitlements/CleanMyMac X Menu.app.entitlements new file mode 100644 index 0000000..3f7a7c7 --- /dev/null +++ b/entitlements/CleanMyMac X Menu.app.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.application-identifier + com.macpaw.CleanMyMac4.Menu + + diff --git a/entitlements/CleanMyMac X.entitlements b/entitlements/CleanMyMac X.entitlements new file mode 100644 index 0000000..9e488d6 --- /dev/null +++ b/entitlements/CleanMyMac X.entitlements @@ -0,0 +1,14 @@ + + + + + com.apple.application-identifier + com.macpaw.CleanMyMac4 + com.apple.developer.aps-environment + production + com.apple.developer.associated-domains + + webcredentials:my.macpaw.com + + + diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..46f65d0 --- /dev/null +++ b/readme.md @@ -0,0 +1,24 @@ +# CleanMyMac X for Mac Crack + +Crack for CleanMyMac X for Mac 4.12.1 (41201.0.2211091011) + +- [x] Support Intel +- [x] Support Apple Silicon (M1 & M2) + +# Install + +Go to releases page download and install. + +# FAQ + +## Is this crack safe? + +It's opensource, you can use any hex file comparison tool you like to see what has been modified. + +## I want to crack it myself. + +Check the crack folder to see how I cracked it. + +## Where to get update? + +[https://git.icrack.day/somebasj/CleanMyMacXCrack](https://git.icrack.day/somebasj/CleanMyMacXCrack) diff --git a/scripts/extra_entitlements.sh b/scripts/extra_entitlements.sh new file mode 100755 index 0000000..4c5ac9a --- /dev/null +++ b/scripts/extra_entitlements.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +CUR_PATH=$( + cd $(dirname "$0"); + pwd +) +ROOT_PATH=$( + cd "${CUR_PATH}/../"; + pwd +) + +function export_entitlements() { + codesign -d --entitlements - --xml "$1" 2>/dev/null | plutil -convert xml1 -o - - > "$2" + /usr/libexec/PlistBuddy -c "Delete :com.apple.security.application-groups" "$2" 2>/dev/null + /usr/libexec/PlistBuddy -c "Delete :com.apple.developer.team-identifier" "$2" 2>/dev/null + /usr/libexec/PlistBuddy -c "Delete :keychain-access-groups" "$2" 2>/dev/null + sed -i "" "s/S8EX82NJP6\.//g" "$2" +} + +mkdir -p "${ROOT_PATH}/entitlements" + +export_entitlements "/Volumes/CleanMyMac X/CleanMyMac X.app" "${ROOT_PATH}/entitlements/CleanMyMac X.entitlements" +export_entitlements "/Volumes/CleanMyMac X/CleanMyMac X.app/Contents/Library/LoginItems/CleanMyMac X HealthMonitor.app" "${ROOT_PATH}/entitlements/CleanMyMac X HealthMonitor.app.entitlements" +export_entitlements "/Volumes/CleanMyMac X/CleanMyMac X.app/Contents/Library/LoginItems/CleanMyMac X Menu.app" "${ROOT_PATH}/entitlements/CleanMyMac X Menu.app.entitlements" diff --git a/scripts/publish.sh b/scripts/publish.sh new file mode 100755 index 0000000..154325d --- /dev/null +++ b/scripts/publish.sh @@ -0,0 +1,147 @@ +#!/bin/bash + +CUR_PATH=$( + cd $(dirname "$0"); + pwd +) +ROOT_PATH=$( + cd "${CUR_PATH}/../"; + pwd +) +TEMP_PATH="${ROOT_PATH}/tmp" +PUBLISH_PATH="${ROOT_PATH}/publish" + +APP_VERSION="41201.0.2211091011" +#APP_VERSION="4.12.1" + +DMG_SHA256SUM="3867b877b3bda4e9c41ceca69b81abc3f992cb5cded7c07312f638b33ee70842" + +DMG_DOWNLOAD_URL="https://dl.devmate.com/com.macpaw.CleanMyMac4/CleanMyMacX.dmg" + +DMG_FILE="${TEMP_PATH}/download/CleanMyMacX_${APP_VERSION}.dmg" + +PUBLISH_FILE="${PUBLISH_PATH}/CleanMyMacX_${APP_VERSION}_Crack.dmg" + +CODESIGN_CERT=- + +if [ -n "$(security find-identity -v -p codesigning | grep 73B34EBEE504D5CEE35B113A22CEBFD381A21033)" ]; then + CODESIGN_CERT=73B34EBEE504D5CEE35B113A22CEBFD381A21033 +fi + +TMP_DIR="${TEMP_PATH}/dmg_files" + +function sign_cmd() { + NAME=$(basename $1) + if [ -f "${ROOT_PATH}/entitlements/${NAME}.entitlements" ]; then + codesign -f -s "${CODESIGN_CERT}" --timestamp=none --all-architectures --deep \ + --entitlements "${ROOT_PATH}/entitlements/${NAME}.entitlements" \ + "$1" + else + codesign -f -s "${CODESIGN_CERT}" --timestamp=none --all-architectures --deep "$1" + fi +} + +function ensure_download_dmg() { + if [ ! -f "${DMG_FILE}" ]; then + echo "[*] Download ${DMG_DOWNLOAD_URL}" + mkdir -p $(dirname "${DMG_FILE}") + curl -L --progress-bar -o "${DMG_FILE}" "${DMG_DOWNLOAD_URL}" + fi + if [ -f "${DMG_FILE}" ]; then + echo "[*] Check hash for \"${DMG_FILE}\"" + FILE_HASH=$(shasum -a 256 -b "${DMG_FILE}" | awk '{print $1}') + if [ ${FILE_HASH} != ${DMG_SHA256SUM} ]; then + echo "[-] ${FILE_HASH} != ${DMG_SHA256SUM}" + echo "[*] Delete \"${DMG_FILE}\"" + rm -f "${DMG_FILE}" + fi + fi +} + +function copy_files() { + echo "[*] Copy files" + if [ -d "${TMP_DIR}" ]; then + rm -rf "${TMP_DIR}" > /dev/null + fi + mkdir -p "${TMP_DIR}" > /dev/null + + hdiutil attach -noverify -noautofsck -noautoopen "${DMG_FILE}" + cp -R -X "/Volumes/CleanMyMac X/CleanMyMac X.app" "${TMP_DIR}/" > /dev/null + hdiutil detach "/Volumes/CleanMyMac X" + + rm -f "${TMP_DIR}/CleanMyMac X.app/Contents/embedded.provisionprofile" > /dev/null + chflags -R 0 "${TMP_DIR}" > /dev/null + xattr -cr "${TMP_DIR}" > /dev/null +} + +function apply_crack() { + echo "[*] Apply patch" + + SRC="${ROOT_PATH}/crack/CleanMyMac X" + DST="${TMP_DIR}/CleanMyMac X.app/Contents/MacOS/CleanMyMac X" + + cp -f "${SRC}" "${DST}" > /dev/null + chflags -R 0 "${DST}" + chmod 755 "${DST}" + + SRC="${ROOT_PATH}/crack/CMMFoundation" + DST="${TMP_DIR}/CleanMyMac X.app/Contents/Library/LoginItems/CleanMyMac X Menu.app/Contents/Frameworks/CMMFoundation.framework/Versions/A/CMMFoundation" + + cp -f "${SRC}" "${DST}" > /dev/null + chflags -R 0 "${DST}" + chmod 755 "${DST}" +} + +function sign_other() { + oldIFS=$IFS + IFS=$'\n' + for name in $(ls "${TMP_DIR}/CleanMyMac X.app/Contents/Library/LoginItems/") + do + if [ -f "${TMP_DIR}/CleanMyMac X.app/Contents/Library/LoginItems/${name}/Contents/embedded.provisionprofile" ]; then + rm -f "${TMP_DIR}/CleanMyMac X.app/Contents/Library/LoginItems/${name}/Contents/embedded.provisionprofile" > /dev/null + fi + sign_cmd "${TMP_DIR}/CleanMyMac X.app/Contents/Library/LoginItems/${name}" + done + IFS=oldIFS +} + +function sign_app() { + echo "[*] Sign App" + sign_other + if [ -f "${TMP_DIR}/CleanMyMac X.app/Contents/embedded.provisionprofile" ]; then + rm -f "${TMP_DIR}/CleanMyMac X.app/Contents/embedded.provisionprofile" > /dev/null + fi + sign_cmd "${TMP_DIR}/CleanMyMac X.app" +} + +function create_dmg() { + echo "[*] Create dmg ${PUBLISH_FILE}" + mkdir -p "${PUBLISH_PATH}" + + if [ -f "${PUBLISH_FILE}" ]; then + rm -f "${PUBLISH_FILE}" > /dev/null + fi + + create-dmg \ + --volname "CleanMyMac X" \ + --background "${ROOT_PATH}/assets/CMMX.png" \ + --window-pos 0 0 \ + --window-size 679 412 \ + --text-size 14 \ + --icon-size 128 \ + --icon "CleanMyMac X.app" 158 130 \ + --app-drop-link 526 130\ + --codesign "${CODESIGN_CERT}" \ + "${PUBLISH_FILE}" \ + "${TMP_DIR}/" +} + +function publish_crack_dmg() { + #ensure_download_dmg + #copy_files + #apply_crack + sign_app + create_dmg +} + +publish_crack_dmg