Fix electron patching

- Use the `@electron/asar` NPM package instead of the old outdated `asar` package.
- Fix escaping error in the `npx` call when there are spaces in the paths.
This commit is contained in:
Paul
2025-01-05 18:57:23 +01:00
parent 2e4fe54a6f
commit deb421a620
+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()