mirror of
https://github.com/NohamR/RMHook.git
synced 2026-01-09 22:18:13 +00:00
Replaces dynamic libzstd.1.dylib with static libzstd.a in CMakeLists.txt and updates architecture to support arm64. Adds zstd headers and static library, updates documentation and credits to reflect zstd usage, and removes unused tinyhook source files after moving headers and libraries.
88 lines
2.3 KiB
Bash
Executable File
88 lines
2.3 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -e
|
|
|
|
# Function to display usage instructions
|
|
usage() {
|
|
echo "Usage: $0 <dylib> <app_path>"
|
|
echo " dylib - The dynamic library to inject."
|
|
echo " app_path - The path to the .app bundle."
|
|
exit 1
|
|
}
|
|
|
|
# Ensure required arguments are provided
|
|
if [ "$#" -ne 2 ]; then
|
|
echo "[ERROR] Incorrect number of arguments."
|
|
usage
|
|
fi
|
|
|
|
DYLIB=$1
|
|
APP_PATH=$2
|
|
|
|
# Validate inputs
|
|
if [ ! -f "$DYLIB" ]; then
|
|
echo "[ERROR] The specified dynamic library ($DYLIB) does not exist."
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -d "$APP_PATH" ]; then
|
|
echo "[ERROR] The specified app path ($APP_PATH) does not exist."
|
|
exit 1
|
|
fi
|
|
|
|
INFO_PLIST_PATH="$APP_PATH/Contents/Info.plist"
|
|
if [ ! -f "$INFO_PLIST_PATH" ]; then
|
|
echo "[ERROR] Info.plist not found at $INFO_PLIST_PATH"
|
|
exit 1
|
|
fi
|
|
|
|
# Get the executable name from Info.plist
|
|
APP_NAME=$(/usr/libexec/PlistBuddy -c "Print CFBundleExecutable" "$INFO_PLIST_PATH")
|
|
if [ -z "$APP_NAME" ]; then
|
|
echo "[ERROR] Could not read CFBundleExecutable from $INFO_PLIST_PATH"
|
|
exit 1
|
|
fi
|
|
|
|
echo "[INFO] Executable name: $APP_NAME"
|
|
|
|
# Change ownership to current user
|
|
CURRENT_USER=$(whoami)
|
|
CURRENT_GROUP=$(id -gn)
|
|
echo "Changing ownership to $CURRENT_USER:$CURRENT_GROUP for $APP_PATH ..."
|
|
sudo chown -R "$CURRENT_USER:$CURRENT_GROUP" "$APP_PATH"
|
|
|
|
EXECUTABLE_PATH="$APP_PATH/Contents/MacOS/$APP_NAME"
|
|
if [ ! -f "$EXECUTABLE_PATH" ]; then
|
|
echo "[ERROR] The specified executable ($EXECUTABLE_PATH) does not exist."
|
|
exit 1
|
|
fi
|
|
|
|
mkdir -p "$APP_PATH/Contents/Resources/"
|
|
|
|
# Copy the dylib to the Resources folder
|
|
cp "$DYLIB" "$APP_PATH/Contents/Resources/"
|
|
echo "[INFO] Copied $DYLIB to $APP_PATH/Contents/Resources/"
|
|
|
|
# Use optool from the scripts folder
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
|
|
"$SCRIPT_DIR/optool" install -c load -p "@executable_path/../Resources/$(basename "$DYLIB")" -t "$EXECUTABLE_PATH"
|
|
echo "[INFO] Injected $DYLIB into $EXECUTABLE_PATH"
|
|
|
|
sudo codesign --remove-signature "$EXECUTABLE_PATH"
|
|
sudo xattr -cr "$EXECUTABLE_PATH"
|
|
sudo codesign -f -s - --timestamp=none --all-architectures "$EXECUTABLE_PATH"
|
|
sudo xattr -cr "$EXECUTABLE_PATH"
|
|
|
|
echo "Signed successfully."
|
|
|
|
# Remove _MASReceipt if it exists
|
|
RECEIPT_PATH="$APP_PATH/Contents/_MASReceipt"
|
|
if [ -d "$RECEIPT_PATH" ]; then
|
|
echo "Removing _MASReceipt..."
|
|
rm -r "$RECEIPT_PATH"
|
|
else
|
|
echo "No _MASReceipt directory found."
|
|
fi
|
|
|
|
exit 0 |