Skip to content

Instantly share code, notes, and snippets.

@santaklouse
Last active November 14, 2024 17:50
Show Gist options
  • Save santaklouse/a137ee51692b74d4cf2cc1bb68ed64ef to your computer and use it in GitHub Desktop.
Save santaklouse/a137ee51692b74d4cf2cc1bb68ed64ef to your computer and use it in GitHub Desktop.
unlimited CrossOver trial (MacOS)

Run it in console for permanent install :

bash -c "$(curl -fsSL https://gist.github.com/santaklouse/a137ee51692b74d4cf2cc1bb68ed64ef/raw/install.sh?token=$(date +%s))"

After install script will fix crossover as well as expired bottles (Thanks to @djsmax).

#!/usr/bin/env bash
# checck if pidof exists
PIDOF="$(which pidof)"
# and if not - install it
(test "${PIDOF}" && test -f "${PIDOF}") || brew install pidof
# find app in default paths
CO_PWD=~/Applications/CrossOver.app/Contents/MacOS
test -d "${CO_PWD}" || CO_PWD=/Applications/CrossOver.app/Contents/MacOS
test -d "${CO_PWD}" || (echo 'unable to detect app path. exiting...' && exit)
PWD="${CO_PWD}"
cd "${PWD}"
PROC_NAME='CrossOver'
# get all pids of CrossOver
pids=(`pgrep "${PROC_NAME}"`, `pidof "${PROC_NAME}"`, `ps -Ac | grep -m1 "${PROC_NAME}" | awk '{print $1}'`)
pids=`echo ${pids[*]}|tr ',' ' '`
# kills CrossOver process if it is running
[ "${pids}" ] && kill -9 `echo "${pids}"` > /dev/null 2>&1
# wait until app finish
sleep 3
# make the current date RFC3339-encoded string representation in UTC time zone
DATETIME=`date -u -v -3H '+%Y-%m-%dT%TZ'`
# modify time in order to reset trial
plutil -replace FirstRunDate -date "${DATETIME}" ~/Library/Preferences/com.codeweavers.CrossOver.plist
plutil -replace SULastCheckTime -date "${DATETIME}" ~/Library/Preferences/com.codeweavers.CrossOver.plist
# show tooltip notification
/usr/bin/osascript -e "display notification \"trial fixed: date changed to ${DATETIME}\""
# reset all bottles
for file in ~/Library/Application\ Support/CrossOver/Bottles/*/.{eval,update-timestamp}; do rm -rf "${file}";done
# and after this execute original crossover
echo "${PWD}" > /tmp/co_log.log
"$($PWD/CrossOver.origin)" >> /tmp/co_log.log
#!/usr/bin/env bash
# find app in default paths
CO_PWD=~/Applications/CrossOver.app/Contents/MacOS
test -d "${CO_PWD}" || CO_PWD=/Applications/CrossOver.app/Contents/MacOS
test -d "${CO_PWD}" || (echo 'unable to detect app path. exiting...' && exit)
PWD="${CO_PWD}"
cd "${PWD}"
PROC_NAME='CrossOver'
# get all pids of CrossOver
pids=(`pgrep "${PROC_NAME}"`, `pidof "${PROC_NAME}"`, `ps -Ac | grep -m1 "${PROC_NAME}" | awk '{print $1}'`)
pids=`echo ${pids[*]}|tr ',' ' '`
# kills CrossOver process if it is running
[ "${pids}" ] && kill -9 `echo "${pids}"` > /dev/null 2>&1
TIMESTAMP=$(date +%s)
FIX_FILE_LINK="https://gist.github.com/santaklouse/a137ee51692b74d4cf2cc1bb68ed64ef/raw/CrossOver.sh?token=${TIMESTAMP}"
if [ -f CrossOver.origin ]; then
echo 'already installed. update and exit.'
echo "$(curl -fsSL ${FIX_FILE_LINK})" > CrossOver
exit
fi;
test -f CrossOver.origin || mv CrossOver CrossOver.origin
echo "$(curl -fsSL ${FIX_FILE_LINK})" > CrossOver
chmod +x CrossOver
echo 'Done. Please open CrossOver '
#!/usr/bin/env bash
# find app in default paths
CO_PWD=~/Applications/CrossOver.app/Contents/MacOS
test -d "${CO_PWD}" || CO_PWD=/Applications/CrossOver.app/Contents/MacOS
test -d "${CO_PWD}" || (echo 'unable to detect app path. exiting...' && exit)
PWD="${CO_PWD}"
cd "${PWD}"
PROC_NAME='CrossOver'
# get all pids of CrossOver
pids=(`pgrep "${PROC_NAME}"`, `pidof "${PROC_NAME}"`, `ps -Ac | grep -m1 "${PROC_NAME}" | awk '{print $1}'`)
pids=`echo ${pids[*]}|tr ',' ' '`
# kills CrossOver process if it is running
[ "${pids}" ] && kill -9 `echo "${pids}"` > /dev/null 2>&1
if [ -f CrossOver.origin ]; then
echo 'original file found. Roll it back and exit.'
mv CrossOver.origin CrossOver
exit
fi;
echo 'original file not found.'
@ellsies
Copy link

ellsies commented Sep 19, 2024

Should I drop a proof of concept?

@Draggin86
Copy link

Sure, although, I am not that much into native programming / scripting.

@ellsies
Copy link

ellsies commented Sep 19, 2024

Nah it just shows the installer working and so on

@Draggin86
Copy link

Oh, I thought it would be like a concept for finding the exploit. I believe you that it's working. 😄

@ellsies
Copy link

ellsies commented Sep 19, 2024

¯_(ツ)_/¯

@TheoRax
Copy link

TheoRax commented Sep 19, 2024

that's dope, did you disassembled the licensing system using brute force?

@ellsies
Copy link

ellsies commented Sep 19, 2024

I pretty much used ghidra and such to disassemble everything

@supahfox
Copy link

supahfox commented Sep 22, 2024

I have created an update script to adapt to these changes. This link shouldn't change unless I have specified here:

bash -c "$(curl -fsSL https://femboys.studio/crossover)"

I will continue to update this script as crossover evolves.

As of now, this script completely fixes the trial issue, and the bottle issue.

Patch isn't working as intended on Sequoia. When I restart my mac, crossover crashes and I have to repatch to get it working

@ellsies
Copy link

ellsies commented Sep 22, 2024

Huh, haven’t seen that on Sequoia before, might have to release the full bypass then

@JayanthVeerappa
Copy link

I lvoe u guys

@supahfox
Copy link

Huh, haven’t seen that on Sequoia before, might have to release the full bypass then

Looking forward to it

@dazzng
Copy link

dazzng commented Oct 7, 2024

does this work on the latest version of Crossover (24.05) patched with CX patcher?

@kseou
Copy link

kseou commented Oct 13, 2024

does this work on the latest version of Crossover (24.05) patched with CX patcher?

I just tried it and it reset it to 14 days.

@dazzng
Copy link

dazzng commented Oct 13, 2024

does this work on the latest version of Crossover (24.05) patched with CX patcher?

I just tried it and it reset it to 14 days.

How do you change the code?

@dattienle2573
Copy link

is the code still working?

@sircoderin
Copy link

This was patched after the last update
Screenshot 2024-11-13 at 11 43 29

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