Compare commits
13 Commits
1.0.0
...
Infuse-iOS
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0fa7d613d8 | ||
|
|
432eafeb77 | ||
|
|
5a068bf71a | ||
|
|
9c7f571e8f | ||
|
|
6c5c90f060 | ||
|
|
d1af7d7a12 | ||
|
|
f69c20fb2c | ||
|
|
2e08be66c0 | ||
|
|
5973408630 | ||
|
|
a9ddc888f8 | ||
|
|
90009b8956 | ||
|
|
a4907a5024 | ||
|
|
b79c4e7602 |
118
.github/workflows/build.yml
vendored
Normal file
@@ -0,0 +1,118 @@
|
||||
name: Build Tweak
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
tweak:
|
||||
description: 'Tweak folder to build (e.g., BusinessJB, CreditAgricoleJB, Infuse-iOS, TF1Plus/TF1Plus-tvOS)'
|
||||
required: false
|
||||
default: 'BusinessJB'
|
||||
branch:
|
||||
description: 'Branch to build from'
|
||||
required: false
|
||||
default: 'main'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}-${{ inputs.tweak || 'BusinessJB' }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Build ${{ inputs.tweak || 'BusinessJB' }}
|
||||
runs-on: macos-latest
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
ref: ${{ inputs.branch || github.ref }}
|
||||
|
||||
- name: Install dependencies
|
||||
run: brew install make ldid
|
||||
|
||||
- name: Set PATH environment variables
|
||||
run: |
|
||||
echo "$(brew --prefix make)/libexec/gnubin" >> $GITHUB_PATH
|
||||
echo "THEOS=${{ github.workspace }}/theos" >> $GITHUB_ENV
|
||||
|
||||
# Original from YTweaks
|
||||
- name: Get Theos commit
|
||||
run: |
|
||||
get_commit_hash() {
|
||||
local repo_url=$1
|
||||
git ls-remote "$repo_url" HEAD | awk '{print substr($1,1,7)}'
|
||||
}
|
||||
TWEAK_PATH="${{ inputs.tweak || 'BusinessJB' }}"
|
||||
if [[ "$TWEAK_PATH" == *"tvOS"* || "$TWEAK_PATH" == *"TVOS"* ]]; then
|
||||
THEOS_URL="https://github.com/NohamR/theos-tvOS"
|
||||
else
|
||||
THEOS_URL="https://github.com/roothide/theos"
|
||||
fi
|
||||
echo "THEOS_REPO=$THEOS_URL" >> $GITHUB_ENV
|
||||
echo "THEOS_COMMIT=$(get_commit_hash "$THEOS_URL")" >> $GITHUB_ENV
|
||||
|
||||
- name: Cache Theos
|
||||
id: cache-theos
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: theos
|
||||
key: Tweak-18.6-SDK-${{ env.THEOS_COMMIT }}
|
||||
|
||||
- name: Setup Theos
|
||||
if: ${{ steps.cache-theos.outputs.cache-hit != 'true' }}
|
||||
run: |
|
||||
git clone --quiet --depth=1 --recurse-submodules ${{ env.THEOS_REPO }}.git theos
|
||||
git clone --quiet --depth=1 -n --filter=tree:0 https://github.com/Tonwalter888/iOS-SDKs.git
|
||||
cd iOS-SDKs
|
||||
git sparse-checkout set --no-cone iPhoneOS18.6.sdk
|
||||
git checkout --quiet
|
||||
mv *.sdk "$THEOS/sdks"
|
||||
|
||||
- name: Clone headers
|
||||
run: |
|
||||
if [ ! -d "$THEOS/include/PSHeader" ]; then
|
||||
git clone --quiet --depth=1 https://github.com/PoomSmart/PSHeader.git "$THEOS/include/PSHeader"
|
||||
else
|
||||
cd $THEOS/include/PSHeader
|
||||
git pull --quiet --force
|
||||
cd ${{ github.workspace }}
|
||||
fi
|
||||
|
||||
- name: Build Tweak
|
||||
run: |
|
||||
TWEAK_PATH="${{ inputs.tweak || 'BusinessJB' }}"
|
||||
TWEAK_NAME=$(basename "$TWEAK_PATH")
|
||||
|
||||
cd "$TWEAK_PATH"
|
||||
echo "TWEAK_VERSION=$(grep '^Version:' control | cut -d ' ' -f2)" >> $GITHUB_ENV
|
||||
echo "TWEAK_NAME=$TWEAK_NAME" >> $GITHUB_ENV
|
||||
|
||||
# Check if this is a tvOS tweak
|
||||
if grep -q "TARGET.*appletv" Makefile; then
|
||||
# tvOS tweaks don't use rootless/roothide schemes
|
||||
make clean package DEBUG=0 FINALPACKAGE=1
|
||||
else
|
||||
# iOS tweaks build with multiple schemes
|
||||
make clean package DEBUG=0 FINALPACKAGE=1
|
||||
make clean package DEBUG=0 FINALPACKAGE=1 THEOS_PACKAGE_SCHEME=rootless
|
||||
make clean package DEBUG=0 FINALPACKAGE=1 THEOS_PACKAGE_SCHEME=roothide
|
||||
fi
|
||||
|
||||
mv packages/*.deb ${{ github.workspace }}
|
||||
|
||||
- name: Upload the tweak .deb(s)
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: ${{ env.TWEAK_NAME }} v${{ env.TWEAK_VERSION }}
|
||||
path: ${{ github.workspace }}/*.deb
|
||||
if-no-files-found: error
|
||||
overwrite: true
|
||||
|
||||
- name: Create a draft release
|
||||
uses: softprops/action-gh-release@v3
|
||||
with:
|
||||
tag_name: ${{ env.TWEAK_NAME }}-v${{ env.TWEAK_VERSION }}
|
||||
name: ${{ env.TWEAK_NAME }} v${{ env.TWEAK_VERSION }}
|
||||
files: ${{ github.workspace }}/*.deb
|
||||
draft: true
|
||||
3
BusinessJB/.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
.theos/
|
||||
packages/
|
||||
.DS_Store
|
||||
7
BusinessJB/BusinessJB.plist
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
Filter = {
|
||||
Bundles = (
|
||||
"fr.labanquepostale.pmo.mescomptes",
|
||||
);
|
||||
};
|
||||
}
|
||||
13
BusinessJB/Makefile
Normal file
@@ -0,0 +1,13 @@
|
||||
TARGET = iphone:latest:14.0
|
||||
INSTALL_TARGET_PROCESSES = Business
|
||||
ARCHS = arm64 arm64e
|
||||
|
||||
include $(THEOS)/makefiles/common.mk
|
||||
|
||||
TWEAK_NAME = BusinessJB
|
||||
|
||||
BusinessJB_FILES = Tweak.x
|
||||
BusinessJB_CFLAGS = -fobjc-arc
|
||||
BusinessJB_FRAMEWORKS = Foundation
|
||||
|
||||
include $(THEOS_MAKE_PATH)/tweak.mk
|
||||
8
BusinessJB/Tweak.x
Normal file
@@ -0,0 +1,8 @@
|
||||
#import <substrate.h>
|
||||
#import <mach-o/dyld.h>
|
||||
|
||||
%hook JailbreakDetection
|
||||
- (bool)jailbroken {
|
||||
return FALSE;
|
||||
}
|
||||
%end
|
||||
9
BusinessJB/control
Normal file
@@ -0,0 +1,9 @@
|
||||
Package: xyz.nohamr.businessjb
|
||||
Name: BusinessJB
|
||||
Version: 1.0.0
|
||||
Architecture: iphoneos-arm
|
||||
Description: Bypass the jailbreak detection of the Business app.
|
||||
Maintainer: NohamR
|
||||
Author: NohamR
|
||||
Section: Tweaks
|
||||
Depends: mobilesubstrate (>= 0.9.5000)
|
||||
26
BusinessJB/index.md
Normal file
@@ -0,0 +1,26 @@
|
||||
# BusinessJB
|
||||
|
||||
Disables jailbreak detection in La Banque Postale by forcing `JailbreakDetection` to return `FALSE`.
|
||||
|
||||
- **App**: [Business – La Banque Postale](https://apps.apple.com/fr/app/business-la-banque-postale/id1438089314)
|
||||
- **Latest version**: 2.3.000
|
||||
- **Tested on**: iOS 15.8.6
|
||||
|
||||
## Build
|
||||
|
||||
```sh
|
||||
make clean && make package THEOS_PACKAGE_SCHEME=rootless DEBUG=0
|
||||
```
|
||||
|
||||
## Inject
|
||||
|
||||
```sh
|
||||
cyan -i com.labanquepostale.business-2.3.000.ipa \
|
||||
-o com.labanquepostale.business-2.3.000_patched.ipa \
|
||||
-f xyz.nohamr.businessjb_1.0.0-1_iphoneos-arm64.deb \
|
||||
-u
|
||||
```
|
||||
|
||||
## Screenshots
|
||||
|
||||

|
||||
3
CreditAgricoleJB/.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
.theos/
|
||||
packages/
|
||||
.DS_Store
|
||||
7
CreditAgricoleJB/CreditAgricoleTweak.plist
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
Filter = {
|
||||
Bundles = (
|
||||
"fr.creditagricole.monbudget",
|
||||
);
|
||||
};
|
||||
}
|
||||
13
CreditAgricoleJB/Makefile
Normal file
@@ -0,0 +1,13 @@
|
||||
TARGET = iphone:latest:14.0
|
||||
INSTALL_TARGET_PROCESSES = nmb_prod
|
||||
ARCHS = arm64 arm64e
|
||||
|
||||
include $(THEOS)/makefiles/common.mk
|
||||
|
||||
TWEAK_NAME = CreditAgricoleTweak
|
||||
|
||||
CreditAgricoleTweak_FILES = Tweak.x
|
||||
CreditAgricoleTweak_CFLAGS = -fobjc-arc
|
||||
CreditAgricoleTweak_FRAMEWORKS = Foundation
|
||||
|
||||
include $(THEOS_MAKE_PATH)/tweak.mk
|
||||
27
CreditAgricoleJB/Tweak.x
Normal file
@@ -0,0 +1,27 @@
|
||||
#import <substrate.h>
|
||||
#import <mach-o/dyld.h>
|
||||
#import <string.h>
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
#define TARGET_MODULE "nmb_prod"
|
||||
#define IDA_BASE 0x100000000
|
||||
#define ADDR_JB_DETECT 0x10055F914 // Address of target function in IDA (adjust if needed)
|
||||
|
||||
static void *(*original_sub)(void);
|
||||
|
||||
static void *hooked_sub(void) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
%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_JB_DETECT - IDA_BASE);
|
||||
MSHookFunction((void *)addr, (void *)hooked_sub, (void **)&original_sub);
|
||||
NSLog(@"[CreditAgricoleTweak] Hooked function at 0x%lx", addr);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
9
CreditAgricoleJB/control
Normal file
@@ -0,0 +1,9 @@
|
||||
Package: xyz.nohamr.creditagricolejb
|
||||
Name: CreditAgricoleJB (Rootless)
|
||||
Version: 1.0.0
|
||||
Architecture: iphoneos-arm
|
||||
Description: Bypas jailbreak detection in Credit Agricole app
|
||||
Maintainer: NohamR
|
||||
Author: NohamR
|
||||
Section: Tweaks
|
||||
Depends: mobilesubstrate (>= 0.9.5000)
|
||||
26
CreditAgricoleJB/index.md
Normal file
@@ -0,0 +1,26 @@
|
||||
# CreditAgricoleJB
|
||||
|
||||
Disables jailbreak detection in Ma Banque.
|
||||
|
||||
- **App**: [Ma Banque](https://apps.apple.com/fr/app/ma-banque/id376202925)
|
||||
- **Latest version**: 47.0.0
|
||||
- **Tested on**: iOS 15.8.6
|
||||
|
||||
## Build
|
||||
|
||||
```sh
|
||||
make clean && make package THEOS_PACKAGE_SCHEME=rootless DEBUG=0
|
||||
```
|
||||
|
||||
## Inject
|
||||
|
||||
```sh
|
||||
cyan -i com.creditagricole.mabanque-47.0.0.ipa \
|
||||
-o com.creditagricole.mabanque-47.0.0_patched.ipa \
|
||||
-f xyz.nohamr.creditagricolejb_1.0.0-1_iphoneos-arm64.deb \
|
||||
-u
|
||||
```
|
||||
|
||||
## Screenshots
|
||||
|
||||

|
||||
3
Infuse/Infuse-iOS/.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
.theos/
|
||||
packages/
|
||||
.DS_Store
|
||||
7
Infuse/Infuse-iOS/Infuse.plist
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
Filter = {
|
||||
Bundles = (
|
||||
"com.firecore.infuse",
|
||||
);
|
||||
};
|
||||
}
|
||||
13
Infuse/Infuse-iOS/Makefile
Normal file
@@ -0,0 +1,13 @@
|
||||
TARGET = iphone:latest:14.0
|
||||
INSTALL_TARGET_PROCESSES = infuse
|
||||
ARCHS = arm64 arm64e
|
||||
|
||||
include $(THEOS)/makefiles/common.mk
|
||||
|
||||
TWEAK_NAME = Infuse
|
||||
|
||||
Infuse_FILES = Tweak.x
|
||||
Infuse_CFLAGS = -fobjc-arc
|
||||
Infuse_FRAMEWORKS = Foundation
|
||||
|
||||
include $(THEOS_MAKE_PATH)/tweak.mk
|
||||
81
Infuse/Infuse-iOS/Tweak.x
Normal file
@@ -0,0 +1,81 @@
|
||||
// changes : FCInAppPurchaseServiceFreemium block deleted, FCTraktIAPManager block deleted, layoutSubviews -> awakeFromNib on FCVersionView, and the dead return %orig lines after return statements cleaned up (they were unreachable in the old version too)
|
||||
|
||||
#import <substrate.h>
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
%hook FCIAPGUIHelper
|
||||
+(bool) isProAvailable {
|
||||
return TRUE;
|
||||
}
|
||||
+(bool) isSubscriptionBought {
|
||||
return TRUE;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook FCInAppPurchaseServiceBase
|
||||
- (bool)isFeaturePurchased:(long long)arg1 tillDate:(id*)arg2 {
|
||||
return 1;
|
||||
}
|
||||
- (bool)isFeaturePurchased:(long long)arg1 {
|
||||
return 1;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook FCInAppPurchaseServiceDummy
|
||||
- (bool)isFeaturePurchased:(long long)arg1 tillDate:(id*)arg2 {
|
||||
return 1;
|
||||
}
|
||||
%end
|
||||
|
||||
// REMOVED: FCInAppPurchaseServiceFreemium (class gone from binary, replaced by SK2)
|
||||
|
||||
// SK2 IAP backend
|
||||
%hook _TtC6infuse31InAppPurchaseServiceFreemiumSK2
|
||||
- (bool)isFeaturePurchased:(long long)arg1 tillDate:(id*)arg2 {
|
||||
return 1;
|
||||
}
|
||||
- (long long)iapVersionStatus {
|
||||
// FCUpgradeToProViewController.featureHasBought checks iapVersionStatus > 0
|
||||
return 1;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook FCProductCollectionCell
|
||||
-(bool) featurePurchased {
|
||||
return TRUE;
|
||||
}
|
||||
%end
|
||||
|
||||
// REMOVED: FCTraktIAPManager (class gone from binary)
|
||||
|
||||
%hook FCUpgradeToProViewController
|
||||
-(bool) featureHasBought {
|
||||
return TRUE;
|
||||
}
|
||||
%end
|
||||
|
||||
// Add credits
|
||||
@interface FCVersionView : UIView
|
||||
@property (nonatomic, strong) UILabel *label;
|
||||
@end
|
||||
|
||||
%hook FCVersionView
|
||||
- (void)awakeFromNib {
|
||||
%orig;
|
||||
UILabel *label = (UILabel *)[self valueForKey:@"label"];
|
||||
if ([label.text containsString:@"Infuse Pro"] && ![label.text hasPrefix:@"Infuse Team •"]) {
|
||||
label.text = [NSString stringWithFormat:@"Infuse Team • %@", label.text];
|
||||
}
|
||||
}
|
||||
%end
|
||||
|
||||
// iOS 16 Crash Fix
|
||||
%hook CKContainer
|
||||
+ (id)defaultContainer {
|
||||
return nil;
|
||||
}
|
||||
+ (id)containerWithIdentifier:(id)arg1 {
|
||||
return nil;
|
||||
}
|
||||
%end
|
||||
10
Infuse/Infuse-iOS/control
Normal file
@@ -0,0 +1,10 @@
|
||||
Package: io.infuseteam.infuserootless
|
||||
Name: Infuse (Rootless)
|
||||
Version: 2.0
|
||||
Architecture: iphoneos-arm
|
||||
Description: Unlock the full potential of Infuse
|
||||
Maintainer: Infuse Team
|
||||
Author: Infuse Team
|
||||
Section: Tweaks
|
||||
Depends: firmware (>= 18.3)
|
||||
Conflicts: io.infuseteam.infuse, io.infuseteam.infuseroothide, io.infuseteam.infuselegacy, xyz.eshaydev.ignition, com.ippteam.infuse, com.strejda603.infuse6pro, xyz.eshaydev.infuse
|
||||
26
Infuse/Infuse-iOS/index.md
Normal file
@@ -0,0 +1,26 @@
|
||||
# Infuse (iOS)
|
||||
|
||||
Unlock the full potential of Infuse.
|
||||
|
||||
- **App**: [Infuse](https://apps.apple.com/fr/app/infuse/id1136220934)
|
||||
- **Tested version**: 8.4.2
|
||||
- **Target**: iOS 18+ (tested on iOS 18.7.1 using LiveContainer)
|
||||
|
||||
## Build
|
||||
|
||||
```sh
|
||||
make package FINALPACKAGE=1
|
||||
```
|
||||
|
||||
## Inject
|
||||
|
||||
```sh
|
||||
cyan -i infuse-8.4.2.ipa \
|
||||
-o infuse-8.4.2_patched.ipa \
|
||||
-f io.infuseteam.infuserootless_2.0_iphoneos-arm.deb \
|
||||
-u
|
||||
```
|
||||
|
||||
## Screenshots
|
||||
|
||||

|
||||
3
Infuse/Infuse-tvOS/.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
.theos/
|
||||
packages/
|
||||
.DS_Store
|
||||
7
Infuse/Infuse-tvOS/Infuse.plist
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
Filter = {
|
||||
Bundles = (
|
||||
"com.firecore.infuse",
|
||||
);
|
||||
};
|
||||
}
|
||||
17
Infuse/Infuse-tvOS/Makefile
Normal file
@@ -0,0 +1,17 @@
|
||||
TARGET = appletv:latest:18.3
|
||||
ARCHS = arm64
|
||||
INSTALL_TARGET_PROCESSES = infuse
|
||||
THEOS_PACKAGE_SCHEME = rootless
|
||||
|
||||
include $(THEOS)/makefiles/common.mk
|
||||
|
||||
TWEAK_NAME = Infuse
|
||||
|
||||
Infuse_FILES = Tweak.x
|
||||
Infuse_CFLAGS = -fobjc-arc
|
||||
Infuse_FRAMEWORKS = Foundation UIKit
|
||||
|
||||
include $(THEOS_MAKE_PATH)/tweak.mk
|
||||
test-print:
|
||||
@echo "ARCH is $(THEOS_PACKAGE_ARCH)"
|
||||
@echo "CONTROL is $(_THEOS_DEB_PACKAGE_CONTROL_PATH)"
|
||||
81
Infuse/Infuse-tvOS/Tweak.x
Normal file
@@ -0,0 +1,81 @@
|
||||
// changes : FCInAppPurchaseServiceFreemium block deleted, FCTraktIAPManager block deleted, layoutSubviews -> awakeFromNib on FCVersionView, and the dead return %orig lines after return statements cleaned up (they were unreachable in the old version too)
|
||||
|
||||
#import <substrate.h>
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
%hook FCIAPGUIHelper
|
||||
+(bool) isProAvailable {
|
||||
return TRUE;
|
||||
}
|
||||
+(bool) isSubscriptionBought {
|
||||
return TRUE;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook FCInAppPurchaseServiceBase
|
||||
- (bool)isFeaturePurchased:(long long)arg1 tillDate:(id*)arg2 {
|
||||
return 1;
|
||||
}
|
||||
- (bool)isFeaturePurchased:(long long)arg1 {
|
||||
return 1;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook FCInAppPurchaseServiceDummy
|
||||
- (bool)isFeaturePurchased:(long long)arg1 tillDate:(id*)arg2 {
|
||||
return 1;
|
||||
}
|
||||
%end
|
||||
|
||||
// REMOVED: FCInAppPurchaseServiceFreemium (class gone from binary, replaced by SK2)
|
||||
|
||||
// SK2 IAP backend
|
||||
%hook _TtC6infuse31InAppPurchaseServiceFreemiumSK2
|
||||
- (bool)isFeaturePurchased:(long long)arg1 tillDate:(id*)arg2 {
|
||||
return 1;
|
||||
}
|
||||
- (long long)iapVersionStatus {
|
||||
// FCUpgradeToProViewController.featureHasBought checks iapVersionStatus > 0
|
||||
return 1;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook FCProductCollectionCell
|
||||
-(bool) featurePurchased {
|
||||
return TRUE;
|
||||
}
|
||||
%end
|
||||
|
||||
// REMOVED: FCTraktIAPManager (class gone from binary)
|
||||
|
||||
%hook FCUpgradeToProViewController
|
||||
-(bool) featureHasBought {
|
||||
return TRUE;
|
||||
}
|
||||
%end
|
||||
|
||||
// Add credits
|
||||
@interface FCVersionView : UIView
|
||||
@property (nonatomic, strong) UILabel *label;
|
||||
@end
|
||||
|
||||
%hook FCVersionView
|
||||
- (void)awakeFromNib {
|
||||
%orig;
|
||||
UILabel *label = (UILabel *)[self valueForKey:@"label"];
|
||||
if ([label.text containsString:@"Infuse Pro"] && ![label.text hasPrefix:@"Infuse Team •"]) {
|
||||
label.text = [NSString stringWithFormat:@"Infuse Team • %@", label.text];
|
||||
}
|
||||
}
|
||||
%end
|
||||
|
||||
// iOS 16 Crash Fix
|
||||
%hook CKContainer
|
||||
+ (id)defaultContainer {
|
||||
return nil;
|
||||
}
|
||||
+ (id)containerWithIdentifier:(id)arg1 {
|
||||
return nil;
|
||||
}
|
||||
%end
|
||||
10
Infuse/Infuse-tvOS/control
Normal file
@@ -0,0 +1,10 @@
|
||||
Package: io.infuseteam.infuserootless
|
||||
Name: Infuse (Rootless)
|
||||
Version: 2.0
|
||||
Architecture: appletvos-arm64
|
||||
Description: Unlock the full potential of Infuse
|
||||
Maintainer: Infuse Team
|
||||
Author: Infuse Team
|
||||
Section: Tweaks
|
||||
Depends: firmware
|
||||
Conflicts: io.infuseteam.infuse, io.infuseteam.infuseroothide, io.infuseteam.infuselegacy, xyz.eshaydev.ignition, com.ippteam.infuse, com.strejda603.infuse6pro, xyz.eshaydev.infuse
|
||||
26
Infuse/Infuse-tvOS/index.md
Normal file
@@ -0,0 +1,26 @@
|
||||
# Infuse tvOS
|
||||
|
||||
Unlock pro features in Infuse.
|
||||
|
||||
- **App**: [Infuse](https://apps.apple.com/fr/app/infuse/id1136220934)
|
||||
- **Tested version**: 8.2.4
|
||||
- **Target**: tvOS 18.3 (tested on tvOS 18.3)
|
||||
|
||||
## Build
|
||||
|
||||
```sh
|
||||
make package FINALPACKAGE=1
|
||||
```
|
||||
|
||||
## Inject
|
||||
|
||||
```sh
|
||||
cyan -i infuse-8.2.4.ipa \
|
||||
-o infuse-8.2.4_patched.ipa \
|
||||
-f io.infuseteam.infuserootless_2.0_tvos-arm64.deb \
|
||||
-u
|
||||
```
|
||||
|
||||
## Screenshots
|
||||
|
||||

|
||||
@@ -5,9 +5,16 @@ iOS tweaks built with [Theos](https://theos.dev), injected into IPAs via [cyan](
|
||||
## 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 |
|
||||
| [TextasticPro](TextasticPro/index.md) | Textastic 10.9.2 | iOS 18+ |
|
||||
| [BusinessJB](BusinessJB/index.md) | Business 2.3.000 | iOS 15 |
|
||||
| [CreditAgricoleJB](CreditAgricoleJB/index.md) | Ma Banque 47.0.0 | iOS 15.8.6 |
|
||||
| [Infuse](Infuse/Infuse-tvOS/index.md) | Infuse 8.2.4 | tvOS 18.3 |
|
||||
| [Infuse (iOS)](Infuse/Infuse-iOS/index.md) | Infuse 8.4.2 | iOS 18+ |
|
||||
| [TF1+ (tvOS)](TF1Plus/TF1Plus-tvOS/index.md) | TF1+ 11.36.0 | tvOS |
|
||||
| [TF1+ (iOS)](TF1Plus/TF1Plus-iOS/index.md) | TF1+ 11.36.0 | iOS 14+ |
|
||||
|
||||
## Build
|
||||
|
||||
|
||||
@@ -7,8 +7,9 @@
|
||||
#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() {
|
||||
static int (*orig_isPremiumActive)(void);
|
||||
|
||||
static int hook_isPremiumActive(void) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -30,10 +31,7 @@ static int hook_isPremiumActive() {
|
||||
+ (id)defaultContainer {
|
||||
return nil;
|
||||
}
|
||||
|
||||
+ (id)containerWithIdentifier:(id)arg1 {
|
||||
arg1 = nil;
|
||||
+ (id)containerWithIdentifier:(id) arg1 {
|
||||
return nil;
|
||||
return %orig;
|
||||
}
|
||||
%end
|
||||
@@ -1,4 +1,4 @@
|
||||
Package: xyz.nohamr
|
||||
Package: xyz.nohamr.servercatpremium
|
||||
Name: ServerCatPremium (Latest)
|
||||
Version: 1.0.0
|
||||
Architecture: iphoneos-arm
|
||||
|
||||
@@ -7,8 +7,9 @@
|
||||
#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() {
|
||||
static int (*orig_isPremiumActive)(void);
|
||||
|
||||
static int hook_isPremiumActive(void) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
Package: xyz.nohamr
|
||||
Package: xyz.nohamr.servercatpremiumlegacy
|
||||
Name: ServerCatPremium (Legacy)
|
||||
Version: 1.0.0
|
||||
Architecture: iphoneos-arm
|
||||
|
||||
3
TF1Plus/TF1Plus-iOS/.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
.theos/
|
||||
packages/
|
||||
.DS_Store
|
||||
12
TF1Plus/TF1Plus-iOS/Makefile
Normal file
@@ -0,0 +1,12 @@
|
||||
TARGET = iphone:latest:14.0
|
||||
ARCHS = arm64 arm64e
|
||||
INSTALL_TARGET_PROCESSES = mytf1
|
||||
|
||||
include $(THEOS)/makefiles/common.mk
|
||||
|
||||
TWEAK_NAME = TF1Plus
|
||||
|
||||
TF1Plus_FILES = Tweak.x
|
||||
TF1Plus_CFLAGS = -fobjc-arc
|
||||
|
||||
include $(THEOS_MAKE_PATH)/tweak.mk
|
||||
10
TF1Plus/TF1Plus-iOS/TF1Plus.plist
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
Filter = {
|
||||
Bundles = (
|
||||
"com.tf1.applitf1",
|
||||
);
|
||||
Executables = (
|
||||
App,
|
||||
);
|
||||
};
|
||||
}
|
||||
16
TF1Plus/TF1Plus-iOS/Tweak.x
Normal file
@@ -0,0 +1,16 @@
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
%hook FWRequestConfiguration
|
||||
- (id)initWithServerURL:(id)arg1 playerProfile:(id)arg2 {
|
||||
return self;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook VSSubscriptionRegistrationCenter
|
||||
- (void)setCurrentSubscription:(id)subscription
|
||||
{
|
||||
NSLog(@"Blocked VSSubscriptionRegistrationCenter");
|
||||
NSLog(@"Subscription: %@", subscription);
|
||||
return;
|
||||
}
|
||||
%end
|
||||
9
TF1Plus/TF1Plus-iOS/control
Normal file
@@ -0,0 +1,9 @@
|
||||
Package: xyz.nohamr.tf1plus
|
||||
Name: TF1+ (iOS)
|
||||
Version: 1.0
|
||||
Architecture: iphoneos-arm64
|
||||
Description: TF1+ Ads blocker hook for iOS
|
||||
Maintainer: NohamR
|
||||
Author: NohamR
|
||||
Section: Tweaks
|
||||
Depends: mobilesubstrate (>= 0.9.5000)
|
||||
22
TF1Plus/TF1Plus-iOS/index.md
Normal file
@@ -0,0 +1,22 @@
|
||||
# TF1+ iOS
|
||||
|
||||
Block ads initialization on TF1+.
|
||||
|
||||
- **App**: [TF1+ : Streaming, TV en Direct](https://apps.apple.com/fr/app/tf1-streaming-tv-en-direct/id407248490)
|
||||
- **Tested version**: 23.3.1
|
||||
- **Target**: iOS
|
||||
|
||||
## Build
|
||||
|
||||
```sh
|
||||
make package FINALPACKAGE=1
|
||||
```
|
||||
|
||||
## Inject
|
||||
|
||||
```sh
|
||||
cyan -i tf1plus.ipa \
|
||||
-o tf1plus_patched.ipa \
|
||||
-f xyz.nohamr.tf1plus_1.0_iphoneos-arm64.deb \
|
||||
-u
|
||||
```
|
||||
3
TF1Plus/TF1Plus-tvOS/.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
.theos/
|
||||
packages/
|
||||
.DS_Store
|
||||
13
TF1Plus/TF1Plus-tvOS/Makefile
Normal file
@@ -0,0 +1,13 @@
|
||||
TARGET = appletv:latest:18.3
|
||||
ARCHS = arm64
|
||||
INSTALL_TARGET_PROCESSES = mytf1
|
||||
THEOS_PACKAGE_SCHEME = rootless
|
||||
|
||||
include $(THEOS)/makefiles/common.mk
|
||||
|
||||
TWEAK_NAME = TF1Plus
|
||||
|
||||
TF1Plus_FILES = Tweak.x
|
||||
TF1Plus_CFLAGS = -fobjc-arc
|
||||
|
||||
include $(THEOS_MAKE_PATH)/tweak.mk
|
||||
10
TF1Plus/TF1Plus-tvOS/TF1Plus.plist
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
Filter = {
|
||||
Bundles = (
|
||||
"com.tf1.applitf1",
|
||||
);
|
||||
Executables = (
|
||||
mytf1,
|
||||
);
|
||||
};
|
||||
}
|
||||
7
TF1Plus/TF1Plus-tvOS/Tweak.x
Normal file
@@ -0,0 +1,7 @@
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
%hook FWRequestConfiguration
|
||||
- (id)initWithServerURL:(id)arg1 playerProfile:(id)arg2 {
|
||||
return self;
|
||||
}
|
||||
%end
|
||||
9
TF1Plus/TF1Plus-tvOS/control
Normal file
@@ -0,0 +1,9 @@
|
||||
Package: xyz.nohamr.tf1plus
|
||||
Name: TF1+ (Rootless)
|
||||
Version: 1.0
|
||||
Architecture: appletvos-arm64
|
||||
Description: TF1+ Ads blocker hook
|
||||
Maintainer: NohamR
|
||||
Author: NohamR
|
||||
Section: Tweaks
|
||||
Depends: firmware
|
||||
22
TF1Plus/TF1Plus-tvOS/index.md
Normal file
@@ -0,0 +1,22 @@
|
||||
# TF1+ tvOS
|
||||
|
||||
Block ads initialization on TF1+.
|
||||
|
||||
- **App**: [TF1+ : Streaming, TV en Direct](https://apps.apple.com/fr/app/tf1-streaming-tv-en-direct/id407248490)
|
||||
- **Tested version**: 11.36.0
|
||||
- **Target**: tvOS
|
||||
|
||||
## Build
|
||||
|
||||
```sh
|
||||
make package FINALPACKAGE=1
|
||||
```
|
||||
|
||||
## Inject
|
||||
|
||||
```sh
|
||||
cyan -i tf1plus.ipa \
|
||||
-o tf1plus_patched.ipa \
|
||||
-f com.yourname.tf1plus_1.0_tvos-arm64.deb \
|
||||
-u
|
||||
```
|
||||
3
TextasticPro/.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
.theos/
|
||||
packages/
|
||||
.DS_Store
|
||||
13
TextasticPro/Makefile
Normal file
@@ -0,0 +1,13 @@
|
||||
TARGET = iphone:latest:14.0
|
||||
INSTALL_TARGET_PROCESSES = Textastic
|
||||
ARCHS = arm64 arm64e
|
||||
|
||||
include $(THEOS)/makefiles/common.mk
|
||||
|
||||
TWEAK_NAME = TextasticPro
|
||||
|
||||
TextasticPro_FILES = Tweak.x
|
||||
TextasticPro_CFLAGS = -fobjc-arc
|
||||
TextasticPro_FRAMEWORKS = Foundation
|
||||
|
||||
include $(THEOS_MAKE_PATH)/tweak.mk
|
||||
7
TextasticPro/TextasticPro.plist
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
Filter = {
|
||||
Bundles = (
|
||||
"com.textasticapp.textastic-universal",
|
||||
);
|
||||
};
|
||||
}
|
||||
32
TextasticPro/Tweak.x
Normal file
@@ -0,0 +1,32 @@
|
||||
#import <substrate.h>
|
||||
#import <mach-o/dyld.h>
|
||||
#import <string.h>
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
%hook TextasticStore
|
||||
- (bool)textasticProActive {
|
||||
return TRUE;
|
||||
}
|
||||
- (bool)isVPPReceipt {
|
||||
return FALSE;
|
||||
}
|
||||
- (bool)isLegacyPurchase {
|
||||
return TRUE;
|
||||
}
|
||||
- (bool)isLegacyPurchaseOrProActive {
|
||||
return TRUE;
|
||||
}
|
||||
- (bool)isLegacyPurchaseOrProActiveOrTestFlight {
|
||||
return TRUE;
|
||||
}
|
||||
%end
|
||||
|
||||
// iOS 16 Crash Fix
|
||||
%hook CKContainer
|
||||
+ (id)defaultContainer {
|
||||
return nil;
|
||||
}
|
||||
+ (id)containerWithIdentifier:(id) arg1 {
|
||||
return nil;
|
||||
}
|
||||
%end
|
||||
9
TextasticPro/control
Normal file
@@ -0,0 +1,9 @@
|
||||
Package: xyz.nohamr.textasticpro
|
||||
Name: TextasticPro
|
||||
Version: 1.0.0
|
||||
Architecture: iphoneos-arm
|
||||
Description: Unlocks premium features in Textastic app.
|
||||
Maintainer: NohamR
|
||||
Author: NohamR
|
||||
Section: Tweaks
|
||||
Depends: mobilesubstrate (>= 0.9.5000)
|
||||
28
TextasticPro/index.md
Normal file
@@ -0,0 +1,28 @@
|
||||
# TextasticPro
|
||||
|
||||
Unlocks premium features in Textastic.
|
||||
|
||||
- **App**: [Textastic](https://apps.apple.com/fr/app/textastic/id572491815?l=en-GB&mt=12)
|
||||
- **Tested on**: Textastic 10.9.2, iOS iOS 18.3
|
||||
|
||||
## Build
|
||||
|
||||
```sh
|
||||
make clean && make package THEOS_PACKAGE_SCHEME=rootless DEBUG=0
|
||||
```
|
||||
|
||||
## Inject
|
||||
|
||||
```sh
|
||||
cyan -i com.textasticapp.textastic-universal-10.9.2.ipa \
|
||||
-o com.textasticapp.textastic-universal-10.9.2_patched.ipa \
|
||||
-f xxyz.nohamr.textasticpro_1.0.0-1_iphoneos-arm64.deb \
|
||||
-u
|
||||
```
|
||||
|
||||
## Screenshots
|
||||
|
||||

|
||||

|
||||

|
||||

|
||||
BIN
docs/screens/BusinessJB/jailbreak.png
Normal file
|
After Width: | Height: | Size: 282 KiB |
BIN
docs/screens/CreditAgricoleJB/undetected.png
Normal file
|
After Width: | Height: | Size: 833 KiB |
BIN
docs/screens/Infuse/mobile.png
Normal file
|
After Width: | Height: | Size: 232 KiB |
BIN
docs/screens/Infuse/settings.png
Normal file
|
After Width: | Height: | Size: 1.1 MiB |
BIN
docs/screens/TextasticPro/pro.png
Normal file
|
After Width: | Height: | Size: 64 KiB |
BIN
docs/screens/TextasticPro/search.png
Normal file
|
After Width: | Height: | Size: 93 KiB |
BIN
docs/screens/TextasticPro/shh1.png
Normal file
|
After Width: | Height: | Size: 61 KiB |
BIN
docs/screens/TextasticPro/ssh2.png
Normal file
|
After Width: | Height: | Size: 274 KiB |
71
scripts/patch_and_serve.sh
Executable file
@@ -0,0 +1,71 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
if [ "$#" -ne 2 ]; then
|
||||
echo "Usage: $0 <file.ipa> <file.deb>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
IPA=""
|
||||
DEB=""
|
||||
|
||||
for arg in "$@"; do
|
||||
case "$arg" in
|
||||
*.ipa)
|
||||
IPA="$arg"
|
||||
;;
|
||||
*.deb)
|
||||
DEB="$arg"
|
||||
;;
|
||||
*)
|
||||
echo "Unknown file type: $arg"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [ -z "$IPA" ] || [ -z "$DEB" ]; then
|
||||
echo "You must provide one .ipa and one .deb file."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# ---- Prepare output folder ----
|
||||
OUT_DIR="/tmp/ipa_patched"
|
||||
mkdir -p "$OUT_DIR"
|
||||
|
||||
IPA_NAME=$(basename "$IPA")
|
||||
OUTPUT_IPA="$OUT_DIR/$IPA_NAME"
|
||||
|
||||
echo "[+] Patching IPA with cyan..."
|
||||
cyan -i "$IPA" -o "$OUTPUT_IPA" -f "$DEB" -u --overwrite
|
||||
echo "[+] Patch complete."
|
||||
|
||||
LOCAL_IP=$(ipconfig getifaddr en0 2>/dev/null)
|
||||
|
||||
if [ -z "$LOCAL_IP" ]; then
|
||||
LOCAL_IP=$(hostname -I 2>/dev/null | awk '{print $1}')
|
||||
fi
|
||||
|
||||
if [ -z "$LOCAL_IP" ]; then
|
||||
echo "Could not detect local IP automatically."
|
||||
LOCAL_IP="YOUR_IP"
|
||||
fi
|
||||
|
||||
DOWNLOAD_LINK="http://$LOCAL_IP:8000/$IPA_NAME"
|
||||
|
||||
cd "$OUT_DIR"
|
||||
|
||||
echo ""
|
||||
echo "=========================================="
|
||||
echo "Download link:"
|
||||
echo "$DOWNLOAD_LINK"
|
||||
echo "=========================================="
|
||||
echo ""
|
||||
echo -n "$DOWNLOAD_LINK" | pbcopy
|
||||
echo "[+] Download link copied to clipboard."
|
||||
echo "[+] Starting HTTP server..."
|
||||
echo "Press Ctrl+C to stop."
|
||||
echo ""
|
||||
|
||||
python3 -m http.server 8000
|
||||