From 9caa39c50ddc020ca8ac4693c772291e446e386f Mon Sep 17 00:00:00 2001 From: Mykola Grymalyuk Date: Sat, 12 Dec 2020 13:21:23 -0700 Subject: [PATCH] Add RestrictEvents kext Ensures firmware updates cannot be performed even within the installer --- CHANGELOG.md | 1 + README.md | 3 +++ Resources/BuildOpenCore.py | 13 ++++++++----- Resources/Versions.py | 2 ++ payloads/Config/v0.6.3/config.plist | 18 ++++++++++++++++++ payloads/Config/v0.6.4/config.plist | 18 ++++++++++++++++++ .../Acidanthera/RestrictEvents-v1.0.0.zip | Bin 0 -> 16128 bytes 7 files changed, 50 insertions(+), 5 deletions(-) create mode 100644 payloads/Kexts/Acidanthera/RestrictEvents-v1.0.0.zip diff --git a/CHANGELOG.md b/CHANGELOG.md index 5e59b9930..31ac666fe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ - Add MacPro3,1 to HID patch - Fix missing SSDT-CPBG patch - Fix BlacklistAppleUpdate +- Add RestrictEvents kext ## 0.0.6 - Fix macserial crashing diff --git a/README.md b/README.md index 7961c7db8..31ed0828f 100644 --- a/README.md +++ b/README.md @@ -128,3 +128,6 @@ At this time, the OpenCore Patcher won't install macOS onto the internal drive i Reminder that once this is done, you'll need to select OpenCore in the boot picker again for your hardware to remenber this entry and auto boot from then on. +### Cannot run OpenCore Legacy Patcher + +If the release tab has permissions/Gatekeeper issues, please [download the main repo](https://github.com/dortania/Opencore-Legacy-Patcher/archive/main.zip) and run that instead. \ No newline at end of file diff --git a/Resources/BuildOpenCore.py b/Resources/BuildOpenCore.py index 72618a2a1..7cc0b08ed 100644 --- a/Resources/BuildOpenCore.py +++ b/Resources/BuildOpenCore.py @@ -61,12 +61,15 @@ def BuildEFI(): copy(Versions.plist_path, Versions.plist_path_build) with open(Versions.plist_path_build_full, 'r') as file : Versions.plist_data = file.read() - - print("- Adding Lilu %s" % Versions.lilu_version) + # Adding must have kexts + print("- Adding Lilu v%s" % Versions.lilu_version) copy(Versions.lilu_path, Versions.kext_path_build) - print("- Adding WhateverGreen %s" % Versions.whatevergreen_version) + print("- Adding WhateverGreen v%s" % Versions.whatevergreen_version) copy(Versions.whatevergreen_path, Versions.kext_path_build) + + print("- Adding RestrictEvents v%s" % Versions.restrictevents_version) + copy(Versions.restrictevents_path, Versions.kext_path_build) # Checks for kexts # CPU Kext Patches @@ -86,7 +89,7 @@ def BuildEFI(): "" ) if current_model in ModelArray.MissingSSE42: - print("- Adding telemetrap %s" % Versions.telemetrap_version) + print("- Adding telemetrap v%s" % Versions.telemetrap_version) copy(Versions.telemetrap_path, Versions.kext_path_build) Versions.plist_data = Versions.plist_data.replace( "", @@ -110,7 +113,7 @@ def BuildEFI(): "" ) if current_model in ModelArray.EthernetBroadcom: - print("- Adding CatalinaBCM5701Ethernet %s" % Versions.bcm570_version) + print("- Adding CatalinaBCM5701Ethernet v%s" % Versions.bcm570_version) copy(Versions.bcm570_path, Versions.kext_path_build) Versions.plist_data = Versions.plist_data.replace( "", diff --git a/Resources/Versions.py b/Resources/Versions.py index 0e05822fd..304edaa34 100644 --- a/Resources/Versions.py +++ b/Resources/Versions.py @@ -24,6 +24,7 @@ telemetrap_version = "1.0.0" io80211high_sierra_version = "1.0.0" io80211mojave_version = "1.0.0" voodoohda_version = "296" +restrictevents_version = "1.0.0" # List current location os.chdir(os.path.dirname(os.path.realpath(__file__))) @@ -45,6 +46,7 @@ nvme_driver_path = os.path.join(current_path, "payloads/Drivers/" "NvmExpressDxe lilu_path = os.path.join(current_path, "payloads/Kexts/Acidanthera/" "Lilu-v%s.zip" % lilu_version) whatevergreen_path = os.path.join(current_path, "payloads/Kexts/Acidanthera/" "WhateverGreen-v%s.zip" % whatevergreen_version) airportbcrmfixup_path = os.path.join(current_path, "payloads/Kexts/Acidanthera/" "AirportBrcmFixup-v%s.zip" % airportbcrmfixup_version) +restrictevents_path = os.path.join(current_path, "payloads/Kexts/Acidanthera/" "RestrictEvents-v%s.zip" % restrictevents_version) bcm570_path = os.path.join(current_path, "payloads/Kexts/Ethernet/" "CatalinaBCM5701Ethernet-v%s.zip" % bcm570_version) marvel_path = os.path.join(current_path, "payloads/Kexts/Ethernet/" "MarvelYukonEthernet-v%s.zip" % marvel_version) nforce_path = os.path.join(current_path, "payloads/Kexts/Ethernet/" "nForceEthernet-v%s.zip" % nforce_version) diff --git a/payloads/Config/v0.6.3/config.plist b/payloads/Config/v0.6.3/config.plist index 64c42a23b..b7b32d2b4 100644 --- a/payloads/Config/v0.6.3/config.plist +++ b/payloads/Config/v0.6.3/config.plist @@ -210,6 +210,24 @@ PlistPath Contents/Info.plist + + Arch + x86_64 + Comment + Process Blocker + Enabled + + MaxKernel + + MinKernel + + BundlePath + RestrictEvents.kext + ExecutablePath + Contents/MacOS/RestrictEvents + PlistPath + Contents/Info.plist + Arch x86_64 diff --git a/payloads/Config/v0.6.4/config.plist b/payloads/Config/v0.6.4/config.plist index a1110a039..8fe7ee00c 100644 --- a/payloads/Config/v0.6.4/config.plist +++ b/payloads/Config/v0.6.4/config.plist @@ -212,6 +212,24 @@ PlistPath Contents/Info.plist + + Arch + x86_64 + Comment + Process Blocker + Enabled + + MaxKernel + + MinKernel + + BundlePath + RestrictEvents.kext + ExecutablePath + Contents/MacOS/RestrictEvents + PlistPath + Contents/Info.plist + Arch x86_64 diff --git a/payloads/Kexts/Acidanthera/RestrictEvents-v1.0.0.zip b/payloads/Kexts/Acidanthera/RestrictEvents-v1.0.0.zip new file mode 100644 index 0000000000000000000000000000000000000000..dfa81a8b66814baa1dc0a24d16688687b698aa35 GIT binary patch literal 16128 zcmdseWmp?nw{C(KC{A&wK%oUnX>lpq770*V+$rwvRKp3sDafnt;j4x!`JucgM`b0T z;(qv$6EOT#bcq=Q;%D^yIYA)$*gjh5Tn3v#aG2-AhkLARYa7g@B+FSFD=aK)PvJ1Y zyW1ETukY55#I%2GkC7^{(jyy)8JXUT7=gU1hFnY=zDKY4bfi&8)BfRn=wj0dXJ}n&+yyYd|W^?oy92IMBHXt}=+G0k;A{v--qlD0NZHv#`O*6P=B zzImkl_jvqQtbeO|?AjFTZ)5#uHaPWuTKOgDKaKn=K?m*=(PQkFa1)?YOG>;=mwz8c z@zg3LCy^QsSl@CLa<6m&E2O zdDGztv&A~yO4R@M5etiU%W1eEs+2EXyh{58%fg2PO7Ab-egYG!c+)?&e411z^(-gH zOSmO*2x1PFyDcVham0xZLRp~qH@Ry>zLpjXn=1)go_J1X z=4CqdrKObQsDOz1fWZ%#$w%pvyWk--nX8SW$V0yn=ffD+G`99y)%pi6G4kmm6W_uIJ5Ub6187*Y4wCJm!BqrKWj<8T_#3JfkGufik4|3FvGRnwM)b;}kvgfI=qdfL5@#?5oA{O=gE82X0&K`73*Jki z+zmySa&b?*IE>*FZbC>6efMN)YsZ605$sbC;N(k z8}$5Zu`_8+@JcF{`j*b@dXgwH zqmXpoJ!~eWdrVpHP#l)IlYqo>YB5L4m@;=6b%OIJ^uB+nCd3Px5&W`RT9Nh;Xv1LK zO|>Fkq8%_J8i%}06uv*+rZ)fBl)*83kH9@A+k8kZKO2v@;_g_AT5rIpacX*O&L%S|DZAhYtnFfFaegFXKyV zStWE#Ecdxi6?`$jQWav8o}G+u#}YYH%0AviuZrZ{xSiWMfrR07&+8P3O$goIzE65r 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

cjg&&)#_P7j|oM#cdN-S4$Mk z09hW;wV$FD5RbF_X=YH$40XOGW@#}je{uHslqhyot*NXS6gF5E`pBy-`cvO^;f`42 z+XUo_y?J0t+ge$Xed|yg)|yNipgO8(omjLQ@6Qg*_d3NcN!J3k~`+>EVFSIJT{E1vjEw z6+Z8shU2N6iD-d5T;J^Tx%P>!^e7H*R8@P&zI1|_CwD=V5w=(G5Z0_QJI zicU(dS{A*LnioA3iV4(QzF#+NXYh6EmIqq~ihTvPkHcpXTXZN)QWTr)V=zDz)VwKR+Uv)6#U3LUUXAV<}1m+$Mu>^_d~MQ+W-;1>cY?R*2VWq z3R{u+@yV9crRohe3jhv9^dKTGX&q zwL|JW9*h|jp?~-!f9(ivJz3gt#D^KxNi93&=G4Bss1KQ~6k>P2}se1@;GPE9wC zcO9>C&~TbRFG}5)*w#TdW?HW;nWkQx556A1s5`Ew602W4^i=hk-^8wO%(Gob$SI0B zEh7+Lk!N18@-9*M{=^rAq8Kl)n0-fD)1=$+im&JH^%ba+FID4A6QQ&oU1FVgzoh5V za!oOww!CN^OhKj_W1lx4!?BvQnxaN0c*$2l*Y9mGtAOv*RIpU|`b;x^?F+}8%?}}M zo4j()O$3yCj852om2Y>2tiE9-j_io;PSe$9&zi2wXtDpWZ{(R6SFOt!SFzCUDg@Kk zcRzD?j^BNuB(-7VEp=|uo0j<8{GGEY+Dpvv0Zr$THB88JCNqJC@1aGL`4<5%klrdhAujorB3#*0yOcfM(F!#PAz?u-?ls0i!!k`6wH zm7q&!59`sfmGuw9MzbF7R3L`G0ixKOz2C$!!0V_cyGupMn%GNBbM^e_h4@j?*_RvY&$V zCqe(`PXA*2cc%Yj!}#gz&sFnVzRK^@iyY%`eEkbz%HQPl4Hf3MIekNg`6)<$v1{7Q zKMnF<*#8Gk|CSwa!$A2dNdM>9f8+EY()+Jz0RJKkH&le5g7oja{ZC=|!+iclV!|J@ z;kSp{4Flk(ApI9`{|1;}GynJ7&@ajOlMVha0&;V5{uHGDJ-&Ym$p76rsw9Vgo$det P-t}L}bx(-@=GFfJi2Q-* literal 0 HcmV?d00001