Skip to content

Instantly share code, notes, and snippets.

@dannote
Last active November 21, 2024 14:43
Show Gist options
  • Save dannote/17e0396fe2e19c6e60c915838376d267 to your computer and use it in GitHub Desktop.
Save dannote/17e0396fe2e19c6e60c915838376d267 to your computer and use it in GitHub Desktop.
Final Cut Pro X trial reset
#!/usr/bin/swift
// DISCLAIMER
// This script modifies an unencrypted file associated with the trial version of Final Cut Pro.
// Under the DMCA (17 U.S.C. § 1201), this modification does not qualify as circumvention of a technological
// protection measure (TPM), as it does not involve bypassing encryption, authentication, or similar protections.
// Distributing this code is therefore legal under the DMCA.
// This script is intended for educational and research purposes, such as exploring trial-related file structures,
// or for system troubleshooting in controlled environments with explicit permissions. It is not intended to be used
// in a manner that violates Apple's software license agreement.
// WARNING
// Using this script to reset or extend the trial period of Final Cut Pro without Apple's authorization likely violates
// the software license agreement. Such actions may lead to legal consequences. The responsibility for compliance with
// all applicable laws and agreements lies solely with the user. The author of this script assumes no liability for misuse
// or any resulting consequences.
import Foundation
let path = URL(fileURLWithPath: NSString(string: "~/Library/Containers/com.apple.FinalCutTrial/Data/Library/Application Support/.ffuserdata").expandingTildeInPath)
let data = try! NSData(contentsOf: path) as Data
let dictionary = try! NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data) as! NSDictionary
let mutableDictionary = dictionary.mutableCopy() as! NSMutableDictionary
for (key, value) in mutableDictionary {
if value is NSDate {
mutableDictionary[key] = Date()
}
}
try! NSKeyedArchiver.archivedData(withRootObject: mutableDictionary, requiringSecureCoding: false).write(to: path)
print("You'd better buy it")
@TehBrian
Copy link

@l0u1sg, I've updated https://gist.github.com/TehBrian/bf82c7505b647d423da6d5abbe2b95a3 with the correct path for newer versions of Final Cut Pro.

Additionally, I've made a similar Gist for Logic Pro, https://gist.github.com/TehBrian/1c236b6d9c58e736c0480a876759164d, which I'll keep updated as well.

@l0u1sg
Copy link

l0u1sg commented Nov 18, 2024 via email

@dannote
Copy link
Author

dannote commented Nov 21, 2024

@TehBrian thank you, updated the code accordingly.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment