Merge pull request #2 from devnoname120/fix-electron-patcher

Fix electron patching
This commit is contained in:
Karol Mazurek
2025-01-08 11:31:46 +01:00
committed by GitHub
+10 -10
View File
@@ -34,7 +34,7 @@ class ASARPatcher:
def extractASAR(self, app_path, output_path): def extractASAR(self, app_path, output_path):
'''Extracts {input_path} asar file to {output_path} directory.''' '''Extracts {input_path} asar file to {output_path} directory.'''
input_path = os.path.join(app_path, "Contents/Resources/app.asar") input_path = os.path.join(app_path, "Contents/Resources/app.asar")
status_code = os.system(f"npx asar extract {input_path} {output_path}") status_code = os.system(f"npx @electron/asar extract '{input_path}' '{output_path}'")
if status_code == 0: if status_code == 0:
print(f"Extracted {input_path} to {output_path} directory.") print(f"Extracted {input_path} to {output_path} directory.")
@@ -44,8 +44,8 @@ class ASARPatcher:
def dumpEntitlements(self, app_path): def dumpEntitlements(self, app_path):
output_path='/tmp/extracted_entitlements.xml' output_path='/tmp/extracted_entitlements.xml'
status_code = os.system(f"codesign -d --entitlements :- {app_path} > {output_path}") status_code = os.system(f"codesign -d --entitlements :- '{app_path}' > '{output_path}'")
if status_code == 0: if status_code == 0:
print(f"Dumped entitlements from {app_path} to {output_path}") print(f"Dumped entitlements from {app_path} to {output_path}")
@@ -53,7 +53,7 @@ class ASARPatcher:
print(f"Failed to dump entitlements from {app_path} to {output_path}. Error code: {status_code}") print(f"Failed to dump entitlements from {app_path} to {output_path}. Error code: {status_code}")
def checkIfElectronAsarIntegrityIsUsed(self, app_path): def checkIfElectronAsarIntegrityIsUsed(self, app_path):
status_code = os.system(f"plutil -p {app_path}/Contents/Info.plist | grep -q ElectronAsarIntegrity") status_code = os.system(f"plutil -p '{app_path}/Contents/Info.plist' | grep -q ElectronAsarIntegrity")
if status_code == 0: if status_code == 0:
return True return True
else: else:
@@ -62,12 +62,12 @@ class ASARPatcher:
def packASAR(self, input_path, app_path): def packASAR(self, input_path, app_path):
'''Packs {input_path} directory to {output_path} asar file. '''Packs {input_path} directory to {output_path} asar file.
Check if ElectronAsarIntegrity is used in Info.plist, and if so, calculate hash and replace it. Check if ElectronAsarIntegrity is used in Info.plist, and if so, calculate hash and replace it.
Codesign the Codesign the
''' '''
output_path = os.path.join(app_path, "Contents/Resources/app.asar") output_path = os.path.join(app_path, "Contents/Resources/app.asar")
info_plist_path = os.path.join(app_path, "Contents/Info.plist") info_plist_path = os.path.join(app_path, "Contents/Info.plist")
status_code = os.system(f"npx asar pack {input_path} {output_path}") status_code = os.system(f"npx @electron/asar pack '{input_path}' '{output_path}'")
if status_code == 0: if status_code == 0:
print(f"Packed {input_path} into {output_path}") print(f"Packed {input_path} into {output_path}")
@@ -77,14 +77,14 @@ class ASARPatcher:
new_hash = asar_calculator.calcASARHeaderHash() new_hash = asar_calculator.calcASARHeaderHash()
print(f"New hash: {new_hash}") print(f"New hash: {new_hash}")
print("Replacing ElectronAsarIntegrity in Info.plist") print("Replacing ElectronAsarIntegrity in Info.plist")
os.system(f"/usr/libexec/PlistBuddy -c 'Set :ElectronAsarIntegrity:Resources/app.asar:hash {new_hash}' {info_plist_path}") os.system(f"/usr/libexec/PlistBuddy -c 'Set :ElectronAsarIntegrity:Resources/app.asar:hash {new_hash}' '{info_plist_path}'")
print("Resigning app") print("Resigning app")
self.dumpEntitlements(app_path) self.dumpEntitlements(app_path)
os.system(f"codesign --force --entitlements /tmp/extracted_entitlements.xml --sign - {app_path}") os.system(f"codesign --force --entitlements /tmp/extracted_entitlements.xml --sign - '{app_path}'")
os.remove('/tmp/extracted_entitlements.xml') os.remove('/tmp/extracted_entitlements.xml')
print("Done!") print("Done!")
def main(): def main():
@@ -113,4 +113,4 @@ def main():
print("Invalid command. Use 'extract' or 'pack'.") print("Invalid command. Use 'extract' or 'pack'.")
if __name__ == "__main__": if __name__ == "__main__":
main() main()