From c00a3a7fdfc56f73a816894b105fa53b8185e5fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=88=9A=28noham=29=C2=B2?= <100566912+NohamR@users.noreply.github.com> Date: Mon, 23 Feb 2026 16:58:17 +0100 Subject: [PATCH] Add ServerCatPremium tweaks, build files and docs --- .gitignore | 5 +++ README.md | 28 +++++++++++++++++ ServerCatPremium/.gitignore | 3 ++ ServerCatPremium/Makefile | 13 ++++++++ ServerCatPremium/ServerCatPremium.plist | 7 +++++ ServerCatPremium/Tweak.x | 39 ++++++++++++++++++++++++ ServerCatPremium/control | 9 ++++++ ServerCatPremium/index.md | 21 +++++++++++++ ServerCatPremium_/.gitignore | 3 ++ ServerCatPremium_/Makefile | 13 ++++++++ ServerCatPremium_/ServerCatPremium.plist | 7 +++++ ServerCatPremium_/Tweak.x | 26 ++++++++++++++++ ServerCatPremium_/control | 9 ++++++ ServerCatPremium_/index.md | 22 +++++++++++++ 14 files changed, 205 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 ServerCatPremium/.gitignore create mode 100644 ServerCatPremium/Makefile create mode 100644 ServerCatPremium/ServerCatPremium.plist create mode 100644 ServerCatPremium/Tweak.x create mode 100644 ServerCatPremium/control create mode 100644 ServerCatPremium/index.md create mode 100644 ServerCatPremium_/.gitignore create mode 100644 ServerCatPremium_/Makefile create mode 100644 ServerCatPremium_/ServerCatPremium.plist create mode 100644 ServerCatPremium_/Tweak.x create mode 100644 ServerCatPremium_/control create mode 100644 ServerCatPremium_/index.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8d0faca --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +.DS_Store +/CreditAgricoleTweak +/RMHook +/rootless +Build.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..4c8ffce --- /dev/null +++ b/README.md @@ -0,0 +1,28 @@ +# Tweaks + +iOS tweaks built with [Theos](https://theos.dev), injected into IPAs via [cyan](https://github.com/asdfzxcvbn/pyzule-rw). + +## Tweaks + +| Tweak | App | Target | +| ----------------------------------------------- | ---------------- | ------- | +| [ServerCatPremium](ServerCatPremium/index.md) | ServerCat 1.30.0 | iOS 17+ | +| [ServerCatPremium (legacy)](ServerCatPremium_/index.md) | ServerCat 1.6.4 | iOS 15 | + +## Build + +```sh +# Debug +make clean && make package THEOS_PACKAGE_SCHEME=rootless + +# Production +make clean && make package THEOS_PACKAGE_SCHEME=rootless DEBUG=0 +``` + +## Inject + +```sh +cyan -i -o -f -u +``` + +See each tweak's `index.md` for the specific command. diff --git a/ServerCatPremium/.gitignore b/ServerCatPremium/.gitignore new file mode 100644 index 0000000..faf8687 --- /dev/null +++ b/ServerCatPremium/.gitignore @@ -0,0 +1,3 @@ +.theos/ +packages/ +.DS_Store diff --git a/ServerCatPremium/Makefile b/ServerCatPremium/Makefile new file mode 100644 index 0000000..8fbbd61 --- /dev/null +++ b/ServerCatPremium/Makefile @@ -0,0 +1,13 @@ +TARGET = iphone:latest:14.0 +INSTALL_TARGET_PROCESSES = ServerCat +ARCHS = arm64 arm64e + +include $(THEOS)/makefiles/common.mk + +TWEAK_NAME = ServerCatPremium + +ServerCatPremium_FILES = Tweak.x +ServerCatPremium_CFLAGS = -fobjc-arc +ServerCatPremium_FRAMEWORKS = Foundation + +include $(THEOS_MAKE_PATH)/tweak.mk diff --git a/ServerCatPremium/ServerCatPremium.plist b/ServerCatPremium/ServerCatPremium.plist new file mode 100644 index 0000000..9a6a0a2 --- /dev/null +++ b/ServerCatPremium/ServerCatPremium.plist @@ -0,0 +1,7 @@ +{ + Filter = { + Bundles = ( + "tech.baye.servercat", + ); + }; +} \ No newline at end of file diff --git a/ServerCatPremium/Tweak.x b/ServerCatPremium/Tweak.x new file mode 100644 index 0000000..4fd0345 --- /dev/null +++ b/ServerCatPremium/Tweak.x @@ -0,0 +1,39 @@ +#import +#import +#import +#import + +#define TARGET_MODULE "ServerCat" +#define IDA_BASE 0x100000000 +#define ADDR_IS_PREMIUM 0x10009CD24 // Address of "isPremiumActive" in IDA (adjust if needed) + +static int (*orig_isPremiumActive)(); +static int hook_isPremiumActive() { + return 1; +} + +%ctor { + for (uint32_t i = 0; i < _dyld_image_count(); i++) { + const char *name = _dyld_get_image_name(i); + if (name && strstr(name, TARGET_MODULE)) { + uintptr_t base = (uintptr_t)_dyld_get_image_header(i); + uintptr_t addr = base + (ADDR_IS_PREMIUM - IDA_BASE); + MSHookFunction((void *)addr, (void *)hook_isPremiumActive, (void **)&orig_isPremiumActive); + NSLog(@"[ServerCatPremium] Hooked isPremiumActive at 0x%lx", addr); + return; + } + } +} + +// iOS 16 Crash Fix +%hook CKContainer ++ (id)defaultContainer { + return nil; +} + ++ (id)containerWithIdentifier:(id)arg1 { + arg1 = nil; + return nil; + return %orig; +} +%end \ No newline at end of file diff --git a/ServerCatPremium/control b/ServerCatPremium/control new file mode 100644 index 0000000..4b9f2cd --- /dev/null +++ b/ServerCatPremium/control @@ -0,0 +1,9 @@ +Package: xyz.nohamr +Name: ServerCatPremium (Latest) +Version: 1.0.0 +Architecture: iphoneos-arm +Description: Unlocks premium features in ServerCat app. +Maintainer: NohamR +Author: NohamR +Section: Tweaks +Depends: mobilesubstrate (>= 0.9.5000) diff --git a/ServerCatPremium/index.md b/ServerCatPremium/index.md new file mode 100644 index 0000000..cb2b32c --- /dev/null +++ b/ServerCatPremium/index.md @@ -0,0 +1,21 @@ +# ServerCatPremium + +Unlocks premium features in ServerCat by forcing `isPremiumActive` (`sub_10009CD24`) to always return `1`. + +- **App**: [ServerCat – SSH Terminal](https://apps.apple.com/us/app/servercat-ssh-terminal/id1501532023) +- **Tested on**: ServerCat 1.30.0 (600), iOS 18.3 + +## Build + +```sh +make clean && make package THEOS_PACKAGE_SCHEME=rootless DEBUG=0 +``` + +## Inject + +```sh +cyan -i tech.baye.servercat-1.30.0.ipa \ + -o tech.baye.servercat-1.30.0_patched.ipa \ + -f xyz.nohamr_1.0.0-1_iphoneos-arm64.deb \ + -u +``` diff --git a/ServerCatPremium_/.gitignore b/ServerCatPremium_/.gitignore new file mode 100644 index 0000000..faf8687 --- /dev/null +++ b/ServerCatPremium_/.gitignore @@ -0,0 +1,3 @@ +.theos/ +packages/ +.DS_Store diff --git a/ServerCatPremium_/Makefile b/ServerCatPremium_/Makefile new file mode 100644 index 0000000..8fbbd61 --- /dev/null +++ b/ServerCatPremium_/Makefile @@ -0,0 +1,13 @@ +TARGET = iphone:latest:14.0 +INSTALL_TARGET_PROCESSES = ServerCat +ARCHS = arm64 arm64e + +include $(THEOS)/makefiles/common.mk + +TWEAK_NAME = ServerCatPremium + +ServerCatPremium_FILES = Tweak.x +ServerCatPremium_CFLAGS = -fobjc-arc +ServerCatPremium_FRAMEWORKS = Foundation + +include $(THEOS_MAKE_PATH)/tweak.mk diff --git a/ServerCatPremium_/ServerCatPremium.plist b/ServerCatPremium_/ServerCatPremium.plist new file mode 100644 index 0000000..9a6a0a2 --- /dev/null +++ b/ServerCatPremium_/ServerCatPremium.plist @@ -0,0 +1,7 @@ +{ + Filter = { + Bundles = ( + "tech.baye.servercat", + ); + }; +} \ No newline at end of file diff --git a/ServerCatPremium_/Tweak.x b/ServerCatPremium_/Tweak.x new file mode 100644 index 0000000..99d27d0 --- /dev/null +++ b/ServerCatPremium_/Tweak.x @@ -0,0 +1,26 @@ +#import +#import +#import +#import + +#define TARGET_MODULE "ServerCat" +#define IDA_BASE 0x100000000 +#define ADDR_IS_PREMIUM 0x100454D70 // Address of "isPremiumActive" in IDA (adjust if needed) + +static int (*orig_isPremiumActive)(); +static int hook_isPremiumActive() { + return 1; +} + +%ctor { + for (uint32_t i = 0; i < _dyld_image_count(); i++) { + const char *name = _dyld_get_image_name(i); + if (name && strstr(name, TARGET_MODULE)) { + uintptr_t base = (uintptr_t)_dyld_get_image_header(i); + uintptr_t addr = base + (ADDR_IS_PREMIUM - IDA_BASE); + MSHookFunction((void *)addr, (void *)hook_isPremiumActive, (void **)&orig_isPremiumActive); + NSLog(@"[ServerCatPremium] Hooked isPremiumActive at 0x%lx", addr); + return; + } + } +} diff --git a/ServerCatPremium_/control b/ServerCatPremium_/control new file mode 100644 index 0000000..f290526 --- /dev/null +++ b/ServerCatPremium_/control @@ -0,0 +1,9 @@ +Package: xyz.nohamr +Name: ServerCatPremium (Legacy) +Version: 1.0.0 +Architecture: iphoneos-arm +Description: Unlocks premium features in ServerCat app. +Maintainer: NohamR +Author: NohamR +Section: Tweaks +Depends: mobilesubstrate (>= 0.9.5000) diff --git a/ServerCatPremium_/index.md b/ServerCatPremium_/index.md new file mode 100644 index 0000000..1461d54 --- /dev/null +++ b/ServerCatPremium_/index.md @@ -0,0 +1,22 @@ +# ServerCatPremium (legacy — iOS 15) + +Unlocks premium features in ServerCat by forcing `isPremiumActive` (`sub_100454D70`) to always return `1`. + +- **App**: [ServerCat – SSH Terminal](https://apps.apple.com/us/app/servercat-ssh-terminal/id1501532023) +- **Tested on**: ServerCat 1.6.4, iOS 15.8.6 +- **Note**: ServerCat 1.6.4 is the last version supporting iOS 15. Latest requires iOS 17+. + +## Build + +```sh +make clean && make package THEOS_PACKAGE_SCHEME=rootless DEBUG=0 +``` + +## Inject + +```sh +cyan -i tech.baye.servercat-1.6.4.ipa \ + -o tech.baye.servercat-1.6.4_patched.ipa \ + -f xyz.nohamr_1.0.0-1_iphoneos-arm64.deb \ + -u +```