Skip to content
/ shadow Public

Commit 7a0f7f1

Browse files
committed
Support RootHide
1 parent 3a54917 commit 7a0f7f1

File tree

8 files changed

+77
-8
lines changed

8 files changed

+77
-8
lines changed

Shadow.dylib/Makefile

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
INSTALL_TARGET_PROCESSES = SpringBoard
1+
# INSTALL_TARGET_PROCESSES = SpringBoard
2+
INSTALL_TARGET_PROCESSES =
23
# LOGOS_DEFAULT_GENERATOR = internal
34

45
include $(THEOS)/makefiles/common.mk
@@ -11,7 +12,7 @@ Shadow_FRAMEWORKS = Foundation
1112
Shadow_EXTRA_FRAMEWORKS = Shadow HookKit RootBridge
1213
Shadow_PRIVATE_FRAMEWORKS = MobileCoreServices
1314
Shadow_CFLAGS = -fobjc-arc -I../Shadow.framework/Headers -I../vendor/HookKit.framework/Headers -I../vendor/RootBridge.framework/Headers
14-
Shadow_LDFLAGS = -rpath /Library/Frameworks -rpath /var/jb/Library/Frameworks -rpath /usr/lib -rpath /var/jb/usr/lib
15+
Shadow_LDFLAGS = -rpath /Library/Frameworks -rpath /var/jb/Library/Frameworks -rpath @loader_path/.jbroot/Library/Frameworks -rpath /usr/lib -rpath /var/jb/usr/lib -rpath @loader_path/.jbroot/usr/lib
1516
Shadow_LDFLAGS += -F../ -F../vendor
1617
Shadow_LDFLAGS += -weak_framework CydiaSubstrate
1718

Shadow.dylib/hooks/dyld.x

Lines changed: 61 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
#pragma clang diagnostic ignored "-Wunused-function"
2+
#pragma clang diagnostic ignored "-Wframe-address"
3+
14
#import "hooks.h"
25

36
static NSMutableArray<NSDictionary *>* _shdw_dyld_collection = nil;
@@ -9,6 +12,52 @@ static BOOL _shdw_dyld_error = NO;
912

1013
// todo: maybe hook this private symbol
1114
// extern void call_funcs_for_add_image(struct mach_header *mh, unsigned long vmaddr_slide);
15+
#include <os/log.h>
16+
#undef isCallerTweak
17+
bool isCallerTweak() {
18+
// NSLog(@"%@", NSThread.callStackSymbols);
19+
// os_log(OS_LOG_DEFAULT, "%{public}@", NSThread.callStackSymbols);
20+
// return true;
21+
NSArray* _dyld_collection = [_shdw_dyld_collection copy];
22+
void *retaddrs[] = {
23+
__builtin_return_address(0),
24+
__builtin_return_address(1),
25+
__builtin_return_address(2),
26+
__builtin_return_address(3),
27+
__builtin_return_address(4),
28+
__builtin_return_address(5),
29+
__builtin_return_address(6),
30+
__builtin_return_address(7),
31+
};
32+
for (int i = 0; i < 8; i++) {
33+
void *addr = __builtin_extract_return_addr(retaddrs[i]);
34+
if (![_shadow isAddrExternal:addr]) { // address is belong to app
35+
return false;
36+
}
37+
38+
const char* image_path = dyld_image_path_containing_address(addr);
39+
40+
for (NSDictionary *img in _dyld_collection) {
41+
if (!strcmp([img[@"name"] UTF8String], image_path)) {
42+
return false; // is in safe module list
43+
}
44+
}
45+
// if (![_shadow isAddrRestricted:addr]) { // address is belong to tweak
46+
// return true;
47+
// }
48+
}
49+
return true;
50+
// for (NSString *sym in NSThread.callStackSymbols) {
51+
// // do something with object
52+
// if ([sym containsString:@"libinjector.dylib"]) { // RootHide's injector
53+
// return true;
54+
// }
55+
// if ([sym containsString:@"tweaks_iterate"] || [sym containsString:@"injection_init"]) { // RootHide's injector
56+
// return true;
57+
// }
58+
// }
59+
// return false;
60+
}
1261

1362
static uint32_t (*original_dyld_image_count)();
1463
static uint32_t replaced_dyld_image_count() {
@@ -42,12 +91,15 @@ static intptr_t replaced_dyld_get_image_vmaddr_slide(uint32_t image_index) {
4291

4392
static const char* (*original_dyld_get_image_name)(uint32_t image_index);
4493
static const char* replaced_dyld_get_image_name(uint32_t image_index) {
94+
// NSLog(@"_dyld_get_image_name from %p (%d): %@", __builtin_extract_return_addr(__builtin_return_address(0)), isCallerTweak(), NSThread.callStackSymbols);
4595
if(isCallerTweak()) {
4696
return original_dyld_get_image_name(image_index);
4797
}
4898

4999
NSArray* _dyld_collection = [_shdw_dyld_collection copy];
50-
return image_index < [_dyld_collection count] ? [_dyld_collection[image_index][@"name"] fileSystemRepresentation] : NULL;
100+
const char *ret = image_index < [_dyld_collection count] ? [_dyld_collection[image_index][@"name"] UTF8String] : NULL;
101+
// NSLog(@"_dyld_get_image_name -> %s", ret ? ret: "");
102+
return ret;
51103
}
52104

53105
static void* (*original_dlopen)(const char* path, int mode);
@@ -177,6 +229,7 @@ void shadowhook_dyld_updatelibs(const struct mach_header* mh, intptr_t vmaddr_sl
177229
if(image_path) {
178230
NSString* path = [NSString stringWithUTF8String:image_path];
179231

232+
NSLog(@"%@: %@: %@", @"dyld", @"checking lib", path);
180233
if([path hasPrefix:@"/System"] || ![_shadow isPathRestricted:path options:@{kShadowRestrictionEnableResolve : @(NO)}]) {
181234
NSLog(@"%@: %@: %@", @"dyld", @"adding lib", path);
182235

@@ -304,14 +357,20 @@ void shadowhook_dyld(HKSubstitutor* hooks) {
304357
_dyld_register_func_for_remove_image(shadowhook_dyld_updatelibs_r);
305358

306359
MSHookFunction(_dyld_get_image_name, replaced_dyld_get_image_name, (void **) &original_dyld_get_image_name);
360+
361+
// !! err in ellekit's substrate, because _dyld_image_count uses x16, conflicts with ellekit
307362
MSHookFunction(_dyld_image_count, replaced_dyld_image_count, (void **) &original_dyld_image_count);
363+
308364
MSHookFunction(_dyld_get_image_header, replaced_dyld_get_image_header, (void **) &original_dyld_get_image_header);
309365
MSHookFunction(_dyld_get_image_vmaddr_slide, replaced_dyld_get_image_vmaddr_slide, (void **) &original_dyld_get_image_vmaddr_slide);
310366
MSHookFunction(_dyld_register_func_for_add_image, replaced_dyld_register_func_for_add_image, (void **) &original_dyld_register_func_for_add_image);
311367
MSHookFunction(_dyld_register_func_for_remove_image, replaced_dyld_register_func_for_remove_image, (void **) &original_dyld_register_func_for_remove_image);
312368

313369
MSHookFunction(task_info, replaced_task_info, (void **) &original_task_info);
314-
MSHookFunction(dlopen_preflight, replaced_dlopen_preflight, (void **) &original_dlopen_preflight);
370+
371+
// !! will cause err in Dobby if directly hook using import address, must use findSymbol
372+
void *p_dlopen_preflight = MSFindSymbol(MSGetImageByName("/usr/lib/system/libdyld.dylib"), "_dlopen_preflight");
373+
MSHookFunction(p_dlopen_preflight, replaced_dlopen_preflight, (void **) &original_dlopen_preflight);
315374

316375
MSHookFunction(dlerror, replaced_dlerror, (void **) &original_dlerror);
317376
}

Shadow.framework/Core+Utilities.m

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ + (NSString *)getStandardizedPath:(NSString *)path {
4949
}
5050
}
5151

52+
//path = [RootBridge getJBPath:path]; // RootHide jb have the same layout as rootful jb, we need to manually convert the path
53+
5254
if([path hasPrefix:@"/private/var"] || [path hasPrefix:@"/private/etc"]) {
5355
NSMutableArray* pathComponents = [[path pathComponents] mutableCopy];
5456
[pathComponents removeObjectAtIndex:1];

Shadow.framework/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,6 @@ Shadow_EXTRA_FRAMEWORKS = RootBridge
88
Shadow_INSTALL_PATH = /Library/Frameworks
99
Shadow_CFLAGS = -fobjc-arc -IHeaders -I../vendor/RootBridge.framework/Headers
1010
Shadow_LDFLAGS = -F../vendor/ -install_name @rpath/Shadow.framework/Shadow
11-
Shadow_LDFLAGS += -rpath /Library/Frameworks -rpath /var/jb/Library/Frameworks -rpath /usr/lib -rpath /var/jb/usr/lib
11+
Shadow_LDFLAGS += -rpath /Library/Frameworks -rpath /var/jb/Library/Frameworks -rpath @loader_path/.jbroot/Library/Frameworks -rpath /usr/lib -rpath /var/jb/usr/lib -rpath @loader_path/.jbroot/usr/lib
1212

1313
include $(THEOS_MAKE_PATH)/framework.mk

Shadow.framework/layout/Library/Shadow/Rulesets/JailbreakMisc.plist

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@
5858
<string>SELF LIKE[c] '/usr/lib/*substitute*'</string>
5959
<string>SELF LIKE[c] '/usr/lib/*substrate*'</string>
6060
<string>SELF LIKE[c] '/usr/lib/*ellekit*'</string>
61+
<string>SELF LIKE[c] '/usr/lib/*systemhook*'</string>
62+
<string>SELF LIKE[c] '/var/containers/Bundle/Application/.jbroot-*/*'</string>
6163
</array>
6264
<key>BlacklistURLSchemes</key>
6365
<array>

ShadowSettings.bundle/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ ShadowSettings_EXTRA_FRAMEWORKS = Shadow AltList HookKit RootBridge
1010
ShadowSettings_PRIVATE_FRAMEWORKS = Preferences
1111
ShadowSettings_INSTALL_PATH = /Library/PreferenceBundles
1212
ShadowSettings_CFLAGS = -fobjc-arc -I../Shadow.framework/Headers -I../vendor/HookKit.framework/Headers -I../vendor/RootBridge.framework/Headers
13-
ShadowSettings_LDFLAGS = -rpath /Library/Frameworks -rpath /var/jb/Library/Frameworks -rpath /usr/lib -rpath /var/jb/usr/lib
13+
ShadowSettings_LDFLAGS = -rpath /Library/Frameworks -rpath /var/jb/Library/Frameworks -rpath @loader_path/.jbroot/Library/Frameworks -rpath /usr/lib -rpath /var/jb/usr/lib -rpath @loader_path/.jbroot/usr/lib
1414
ShadowSettings_LDFLAGS += -F../ -F../vendor
1515

1616
include $(THEOS_MAKE_PATH)/bundle.mk

build.sh

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,12 @@ mkdir -p $PWD/build
1010

1111
# build main project (rootless ver.)
1212
make clean &&
13-
THEOS_PACKAGE_SCHEME=rootless ARCHS="arm64 arm64e" TARGET=iphone:clang:latest:14.0 make package FINALPACKAGE=1 &&
13+
THEOS_PACKAGE_SCHEME=rootless ARCHS="arm64 arm64e" TARGET=iphone:clang:14.5:14.0 make package FINALPACKAGE=1 &&
14+
cp -p "`ls -dtr1 packages/* | tail -1`" $PWD/build/
15+
16+
# build main project (roothide ver.)
17+
make clean &&
18+
THEOS_PACKAGE_SCHEME=roothide ARCHS="arm64 arm64e" TARGET=iphone:clang:14.5:14.0 make package FINALPACKAGE=1 &&
1419
cp -p "`ls -dtr1 packages/* | tail -1`" $PWD/build/
1520

1621
rm -rf $THEOS/lib/Shadow.framework

shdw/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ TOOL_NAME = shdw
44

55
shdw_FILES = main.m
66
shdw_CFLAGS = -fobjc-arc -I../Shadow.framework/Headers -I../vendor/RootBridge.framework/Headers
7-
shdw_LDFLAGS = -rpath /Library/Frameworks -rpath /var/jb/Library/Frameworks -rpath /usr/lib -rpath /var/jb/usr/lib
7+
shdw_LDFLAGS = -rpath /Library/Frameworks -rpath /var/jb/Library/Frameworks -rpath @loader_path/.jbroot/Library/Frameworks -rpath /usr/lib -rpath /var/jb/usr/lib -rpath @loader_path/.jbroot/usr/lib
88
shdw_LDFLAGS += -F../ -F../vendor/
99
shdw_CODESIGN_FLAGS = -Sentitlements.plist
1010
shdw_INSTALL_PATH = /usr/local/bin

0 commit comments

Comments
 (0)