├── flpunlocker.py
└── README.md
/flpunlocker.py:
--------------------------------------------------------------------------------
1 | import sys
2 | import traceback
3 |
4 | print("making backup...")
5 |
6 | try:
7 | file = sys.argv[1]
8 | with open(file, "rb") as f:
9 | with open(file+".bak", "wb+") as f2:
10 | f2.write( f.read() )
11 |
12 | print(f"saved to {file}.bak")
13 |
14 | except Exception:
15 | print("could not make backup:\n")
16 | traceback.print_exc()
17 | input("")
18 | exit()
19 |
20 | print("")
21 | print("unlocking...")
22 |
23 | try:
24 | file = sys.argv[1]
25 | print(file)
26 |
27 | def hx(h):
28 | if type(h) == list:
29 | out = []
30 | for x in h:
31 | out.append( int(x, 16) )
32 | return out
33 | else:
34 | return int(h,16)
35 |
36 |
37 | with open(file, "rb+") as f:
38 | content = bytearray( f.read() )
39 | f.seek(0)
40 |
41 | if content[42] == hx('01'):
42 | print("could not unlock flp:\nflp is already unlocked")
43 | input("")
44 | exit()
45 |
46 | content[42] = hx('01')
47 | content[46] = hx('2E')
48 | content[47] = hx('5B')
49 |
50 | content[48:48] = hx((
51 | # # # #
52 | '00 3A 00 32 00 44 00 77 00 38 00 78 00 78 00 39 ' +
53 | '00 64 00 32 00 78 00 37 00 75 00 3F 00 41 00 43 ' +
54 | '00 42 00 3A 00 3A 00 38 00 3E 00 00'
55 | ).split(" "))
56 |
57 | f.write( bytes(content) )
58 | f.truncate()
59 |
60 | print("flp unlocked successfully.")
61 | input("")
62 |
63 | except Exception:
64 | print("could not unlock flp:\n")
65 | traceback.print_exc()
66 | input("")
67 | exit()
68 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # flp-unlocker
2 | Allows you to reopen FLPs saved in the FL Studio trial.
3 |
4 | > [!WARNING]
5 | > This repository has been archived due to being out of date. However, this script may still work on your FLPs. Feel free to try it!
6 |
7 | ## How to use it
8 | You will need any version of Python 3. You can install one [here](https://www.python.org/downloads/).
9 |
10 | Once you've installed python, run the script with the file you want to unlock in the arguments. The script will automatically save a backup for you, as the unlock process is irreversible. **Do not delete this until you know the FLP functions correctly!**
11 |
12 | > Note: Some FL plugins will not work when using an unlocked flp. Try to find and avoid plugins like these as most of them will delete your settings entirely when this happens.
13 |
14 | ```bash
15 | > py flpunlocker.py "C:/Users/Bob/Desktop/My FLP.flp"
16 | making backup...
17 | saved to MyFLP.flp.bak
18 |
19 | unlocking...
20 | flp unlocked successfully.
21 | ```
22 |
23 | I personally also have this program [added to my right click context menu](https://www.wikihow.com/Add-New-Options-to-Right-Click-Menu-in-Windows) for convenience. **Do not attempt this unless you know what you are doing. This process involves editing the registry.**
24 |
25 |
26 |
27 | ## How it works
28 | By default, if a file is saved in the trial version of FL studio, attempting to reopen this file with another trial version fails. Files saved in paid versions of FL studio trial seem to have a slightly modified header and a string of bytes not present in files saved in trial versions, making it openable by anyone, *even trial users*.
29 |
30 | With this knowledge, comparing a trial version file to a paid version file in [hexed.it](https://hexed.it), the following bytes seem to be present:
31 |
32 | 
33 |
34 | Notice that there is an additional string of 44 bytes not present in a trial version file. To replicate this in hexedit simply right click the blue cell and add 44 bytes.
35 |
36 |
37 |
38 | ## Notice
39 | This code has not been updated in a long time. I am publishing the project to allow others to recieve the same value from this script as I did.
40 |
41 | If this code does not function, either at all or for a specific version, feel free to [open an issue](https://github.com/flxwed/flp-unlocker/issues/new) and I'll try to fix it for you if I'm still around.
42 |
--------------------------------------------------------------------------------