Skip to content

Commit

Permalink
Merge branch 'opa334:2.x' into 2.x
Browse files Browse the repository at this point in the history
  • Loading branch information
m1337v authored May 18, 2024
2 parents b5a6830 + dc1a1a3 commit ddc11e8
Show file tree
Hide file tree
Showing 13 changed files with 127 additions and 75 deletions.
4 changes: 2 additions & 2 deletions Application/Dopamine.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -2229,7 +2229,7 @@
"$(PROJECT_DIR)/Dopamine/Dependencies",
"$(PROJECT_DIR)/Dopamine/Resources",
);
MARKETING_VERSION = 2.1.2;
MARKETING_VERSION = 2.1.4;
PRODUCT_BUNDLE_IDENTIFIER = com.opa334.Dopamine;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_EMIT_LOC_STRINGS = YES;
Expand Down Expand Up @@ -2266,7 +2266,7 @@
"$(PROJECT_DIR)/Dopamine/Dependencies",
"$(PROJECT_DIR)/Dopamine/Resources",
);
MARKETING_VERSION = 2.1.2;
MARKETING_VERSION = 2.1.4;
PRODUCT_BUNDLE_IDENTIFIER = com.opa334.Dopamine;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_EMIT_LOC_STRINGS = YES;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,11 +56,13 @@ int IOGPU_get_command_queue_extra_refills_needed(void)
// iPhone 11
// iPhone 12
// iPhone 13
// iPad mini 6
if (
strstr(u.machine, "iPhone9,")
|| strstr(u.machine, "iPhone12,")
|| strstr(u.machine, "iPhone13,")
|| strstr(u.machine, "iPhone14,")
|| strstr(u.machine, "iPad14,")
)
{
return 1;
Expand Down
14 changes: 1 addition & 13 deletions Application/Dopamine/Jailbreak/DOBootstrapper.m
Original file line number Diff line number Diff line change
Expand Up @@ -525,19 +525,7 @@ - (void)prepareBootstrapWithCompletion:(void (^)(NSError *))completion
[[NSFileManager defaultManager] createDirectoryAtPath:mobilePreferencesPath withIntermediateDirectories:YES attributes:attributes error:nil];
}

// Dopamine 2.0 - 2.0.4 would bootstrap with wrong permissions
// Try to detect and fix it
NSString *mobilePath = NSJBRootPath(@"/var/mobile");
struct stat s;
stat(mobilePath.fileSystemRepresentation, &s);
if (s.st_uid != 501 || s.st_gid != 501) {
chown(mobilePath.fileSystemRepresentation, 501, 501);
NSURL *mobileURL = [NSURL fileURLWithPath:mobilePath];
NSDirectoryEnumerator *enumerator = [[NSFileManager defaultManager] enumeratorAtURL:mobileURL includingPropertiesForKeys:nil options:0 errorHandler:nil];
for (NSURL *fileURL in enumerator) {
chown(fileURL.fileSystemRepresentation, 501, 501);
}
}
JBFixMobilePermissions();

completion(nil);
};
Expand Down
33 changes: 16 additions & 17 deletions Application/Dopamine/vi.lproj/Localizable.strings
Original file line number Diff line number Diff line change
Expand Up @@ -41,19 +41,19 @@
"Settings_Tweak_Injection" = "Cho phép chạy Tweak";
"Settings_iDownload" = "iDownload (nhà phát triển)";
"Settings_Verbose_Logs" = "Hiện Log dạng phức tạp";
/*Settings_Apps_JIT*/
"Settings_Apps_JIT" = "Bật JIT";

// Settings Buttons
"Button_Remove_Jailbreak" = "Gỡ Jailbreak";
"Button_Hide_Jailbreak" = "Ẩn Jailbreak";
"Button_Unhide_Jailbreak" = "Bỏ ẩn Jailbreak";
"Button_Refresh_Jailbreak_Apps" = "Làm mới các app Jailbreak";
"Button_Reinstall_Package_Managers" = "Cài lại các trình quản lý gói";
/*Button_Change_Mobile_Password*/
"Button_Change_Mobile_Password" = "Đổi mật khẩu \"mobile\"";

// Settings Hints
"Hint_Hide_Jailbreak" = "Tùy chọn \"Ẩn Jailbreak\" sẽ tạm thời xóa các tệp liên quan đến jailbreak và khôi phục lại các tệp này khi bạn jailbreak vào lần tới.";
"Hint_Hide_Jailbreak_Jailbroken" = "Tùy chọn \"Ẩn Jailbreak\" sẽ tắt một số chức năng đặc biệt nhằm tránh phát hiện jailbreak trong các ứng dụng. Tuy nhiên, tính năng này không phải là hoàn hảo và không thể hoàn toàn ẩn jailbreak khỏi mọi ứng dụng.";
"Hint_Hide_Jailbreak_Jailbroken" = "Tùy chọn \"Ẩn Jailbreak\" sẽ tắt một số chức năng nhằm tránh phát hiện jailbreak trong các ứng dụng. Tuy nhiên, tính năng này không phải là hoàn hảo và không thể hoàn toàn ẩn jailbreak khỏi mọi ứng dụng.";
"Section_Jailbreak_Settings" = "Thiết đặt Jailbreak";
"Section_Actions" = "Tác vụ";
"Section_Customization" = "Tùy biến";
Expand All @@ -65,27 +65,27 @@
"Alert_Tweak_Injection_Toggled_Reboot_Now" = "Khởi động lại ngay";
"Alert_Tweak_Injection_Toggled_Reboot_Later" = "Để sau";
"Alert_Remove_Jailbreak_Title" = "Gỡ bỏ Jailbreak";
"Alert_Remove_Jailbreak_Pressed_Body" = "Việc gỡ bỏ jailbreak sẽ xóa toàn bộ các tệp liên quan đến jailbreak. Các ứng dụng, tệp và dữ liệu thông thường sẽ vẫn được giữ nguyên. Bạn sẽ không thể hoàn tác việc gỡ jailbreak sau khi nhấn \"Tiếp tục\".";
"Alert_Remove_Jailbreak_Enabled_Body" = "Tùy chọn \"Gỡ Jailbreak\" sẽ xóa toàn bộ các tệp liên quan đến jailbreak khi bạn thực hiện jailbreak vào lần tới. Các ứng dụng, tệp và dữ liệu thông thường sẽ vẫn được giữ nguyên. Bạn sẽ không thể hoàn tác việc gỡ jailbreak sau khi nhấn \"Tiếp tục\".";
/*Alert_Change_Mobile_Password_Body*/
/*Password_Placeholder*/
/*Repeat_Password_Placeholder*/
/*Button_Change*/
"Alert_Remove_Jailbreak_Pressed_Body" = "Việc này sẽ xóa toàn bộ các tệp liên quan đến jailbreak. Các ứng dụng, tệp và dữ liệu thông thường sẽ vẫn được giữ nguyên. Bạn sẽ không thể hoàn tác sau khi nhấn \"Tiếp tục\".";
"Alert_Remove_Jailbreak_Enabled_Body" = "Tùy chọn này sẽ xóa toàn bộ các tệp liên quan đến jailbreak khi bạn thực hiện jailbreak vào lần tới. Các ứng dụng, tệp và dữ liệu thông thường sẽ vẫn được giữ nguyên. Bạn sẽ không thể hoàn tác sau khi nhấn \"Tiếp tục\".";
"Alert_Change_Mobile_Password_Body" = "Thiết đặt mật khẩu của người dùng \"mobile\", có thể sử dụng để lấy quyền root thông qua sudo. Nếu muốn đặt mật khẩu root, bạn có thể thực hiện bằng lệnh \"sudo passwd root\" trong terminal.";
"Password_Placeholder" = "Nhập mật khẩu";
"Repeat_Password_Placeholder" = "Nhập lại mật khẩu";
"Button_Change" = "Đổi";
"Button_Cancel" = "Hủy bỏ";
"Button_Continue" = "Tiếp tục";

// Duplicate Apps Errors
"Duplicate_Apps_Error_Dopamine_App" = "Có nhiều ứng dụng với tên định danh \"%@\" trùng nhau trong thư mục ứng dụng của Dopamine (\"%@\"). Không thể tiếp tục.";
"Duplicate_Apps_Error_User_App" = "Ứng dụng với tên định danh \"%@\" đã tồn tại trong thư mục ứng dụng của Dopamine (\"%@\"), nhưng đồng thời cũng được cài đặt tách biệt trên hệ thống. Không thể tiếp tục.";
"Duplicate_Apps_Error_Icon_Cache" = "Ứng dụng với tên định danh \"%@\" đã tồn tại trong thư mục ứng dụng của Dopamine (\"%@\"), nhưng lại được ghi bên trong icon cache với một tên đường dẫn khác (\"%@\"). Không thể tiếp tục.";
"Duplicate_Apps_Error_Dopamine_App" = "Có nhiều ứng dụng với cùng một tên định danh \"%@\" được cài đặt trong thư mục ứng dụng của Dopamine (\"%@\"). Không thể tiếp tục.";
"Duplicate_Apps_Error_User_App" = "Ứng dụng tên định danh \"%@\" đã được cài đặt trong thư mục ứng dụng của Dopamine (\"%@\"), nhưng đồng thời cũng đã được cài đặt trên hệ thống. Không thể tiếp tục.";
"Duplicate_Apps_Error_Icon_Cache" = "Ứng dụng tên định danh \"%@\" đã được cài đặt trong thư mục ứng dụng của Dopamine (\"%@\"), nhưng lại được ghi bên trong icon cache với một đường dẫn khác (\"%@\"). Không thể tiếp tục.";

// Settings Lists
"Theme" = "Chủ đề";
"Kernel Exploit" = "Lỗ hổng Kernel";
"PPL Bypass" = "Lỗ hổng PPL";
"PAC Bypass" = "Lỗ hổng PAC";
/*None*/
/*Recommended*/
"None" = "Không có";
"Recommended" = "Đề xuất";

// Credits
"Credits_Button_Discord" = "Discord";
Expand All @@ -94,7 +94,7 @@

// Logs
"Initializing Environment" = "Khởi tạo môi trường Jailbreak";
/*Initializing Protection*/
"Initializing Protection" = "Khởi tạo quy trình bảo vệ";
"Loading BaseBin TrustCache" = "Đang tải TrustCache BaseBin";
"Applying Bind Mount" = "Đang gắn Bind Mount";
"Removing Jailbreak" = "Đang gỡ bỏ Jailbreak";
Expand All @@ -109,6 +109,5 @@

// Package Manager selection
"Status_Title_Select_Package_Managers" = "Chọn trình quản lý gói";
"Select_Package_Managers_Install_Message" = "Nếu bạn không biết nên chọn trình quản lý gói nào, hãy chọn Sileo (sẽ không bao giờ có Cydia cho bạn chọn)";
"Select_Package_Managers_Install_Message" = "Nếu bạn không biết nên nhấn vào lựa chọn nào, hãy chọn Sileo (sẽ không bao giờ có Cydia cho bạn chọn)";
"Continue" = "Tiếp tục";

2 changes: 1 addition & 1 deletion BaseBin/ChOma
Submodule ChOma updated 1 files
+1 −1 src/MachO.c
2 changes: 1 addition & 1 deletion BaseBin/XPF
Submodule XPF updated 1 files
+5 −15 src/common.c
2 changes: 1 addition & 1 deletion BaseBin/_external/basebin/.version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
2.1.2
2.1.4
19 changes: 13 additions & 6 deletions BaseBin/launchdhook/src/jbserver/jbdomain_systemwide.c
Original file line number Diff line number Diff line change
Expand Up @@ -112,9 +112,14 @@ static int systemwide_process_checkin(audit_token_t *processToken, char **rootPa
{
// Fetch process info
pid_t pid = audit_token_to_pid(*processToken);
uint64_t proc = proc_find(pid);
char procPath[4*MAXPATHLEN];
if (proc_pidpath(pid, procPath, sizeof(procPath)) < 0) {
if (proc_pidpath(pid, procPath, sizeof(procPath)) <= 0) {
return -1;
}

// Find proc in kernelspace
uint64_t proc = proc_find(pid);
if (!proc) {
return -1;
}

Expand All @@ -123,7 +128,6 @@ static int systemwide_process_checkin(audit_token_t *processToken, char **rootPa
systemwide_get_boot_uuid(bootUUIDOut);

// Generate sandbox extensions for the requesting process

char *sandboxExtensionsArr[] = {
// Make /var/jb readable and executable
sandbox_extension_issue_file_to_process("com.apple.app-sandbox.read", JBRootPath(""), 0, *processToken),
Expand All @@ -134,12 +138,15 @@ static int systemwide_process_checkin(audit_token_t *processToken, char **rootPa
};
int sandboxExtensionsCount = sizeof(sandboxExtensionsArr) / sizeof(char *);
*sandboxExtensionsOut = combine_strings('|', sandboxExtensionsArr, sandboxExtensionsCount);
for (int i = 0; i < sandboxExtensionsCount; i++) free(sandboxExtensionsArr[i]);
for (int i = 0; i < sandboxExtensionsCount; i++) {
if (sandboxExtensionsArr[i]) {
free(sandboxExtensionsArr[i]);
}
}

bool fullyDebugged = false;
if (stringStartsWith(procPath, "/private/var/containers/Bundle/Application") || stringStartsWith(procPath, JBRootPath("/Applications"))) {
// This is an app
// Enable CS_DEBUGGED based on user preference
// This is an app, enable CS_DEBUGGED based on user preference
if (jbsetting(markAppsAsDebugged)) {
fullyDebugged = true;
}
Expand Down
2 changes: 2 additions & 0 deletions BaseBin/launchdhook/src/update.m
Original file line number Diff line number Diff line change
Expand Up @@ -202,4 +202,6 @@ void jbupdate_finalize_stage2(const char *prevVersion, const char *newVersion)
arm64_kcall_init();
#endif
}

JBFixMobilePermissions();
}
20 changes: 10 additions & 10 deletions BaseBin/libjailbreak/src/kcall_Fugu14.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,14 @@ void pac_loop(void);

uint64_t mapKernelPage(uint64_t addr)
{
uint64_t page = addr & ~0x3FFFULL;
uint64_t off = addr & 0x3FFFULL;
uint64_t translated = kvtophys(page);
void *map = NULL;
if (kmap(translated, 0x4000, &map) == 0) {
return ((uint64_t)map) + off;
}
return -1;
uint64_t page = addr & ~0x3FFFULL;
uint64_t off = addr & 0x3FFFULL;
uint64_t translated = kvtophys(page);
void *map = NULL;
if (kmap(translated, 0x4000, &map) == 0) {
return ((uint64_t)map) + off;
}
return -1;
}

uint64_t getUserReturnThreadContext(void)
Expand Down Expand Up @@ -130,8 +130,8 @@ int fugu14_kcall_init(int (^threadSigner)(mach_port_t threadPort))

// Write register values
uint64_t str_x8_x9_gadget = kgadget(str_x8_x9);
uint64_t exception_return_after_check = kgadget(exception_return_after_check);
uint64_t brX22 = kgadget(br_x22);
uint64_t exception_return_after_check = kgadget(exception_return_after_check);
uint64_t brX22 = kgadget(br_x22);
kwrite64(actContext + offsetof(kRegisterState, pc), str_x8_x9_gadget);
kwrite32(actContext + offsetof(kRegisterState, cpsr), CPSR_KERN_INTR_DIS);
kwrite64(actContext + offsetof(kRegisterState, lr), exception_return_after_check);
Expand Down
54 changes: 30 additions & 24 deletions BaseBin/libjailbreak/src/kernel.c
Original file line number Diff line number Diff line change
Expand Up @@ -151,34 +151,40 @@ int pmap_cs_allow_invalid(uint64_t pmap)

int cs_allow_invalid(uint64_t proc, bool emulateFully)
{
uint64_t task = proc_task(proc);
uint64_t vm_map = kread_ptr(task + koffsetof(task, map));
uint64_t pmap = kread_ptr(vm_map + koffsetof(vm_map, pmap));

// For non-pmap_cs (arm64) devices, this should always be emulated.
if (proc) {
uint64_t task = proc_task(proc);
if (task) {
uint64_t vm_map = kread_ptr(task + koffsetof(task, map));
if (vm_map) {
uint64_t pmap = kread_ptr(vm_map + koffsetof(vm_map, pmap));
if (pmap) {
// For non-pmap_cs (arm64) devices, this should always be emulated.
#ifdef __arm64e__
if (emulateFully) {
if (emulateFully) {
#endif
// Fugu15 Rootful
//proc_csflags_clear(proc, CS_EXEC_SET_ENFORCEMENT | CS_EXEC_SET_KILL | CS_EXEC_SET_HARD | CS_REQUIRE_LV | CS_ENFORCEMENT | CS_RESTRICT | CS_KILL | CS_HARD | CS_FORCED_LV);
//proc_csflags_set(proc, CS_DEBUGGED | CS_INVALID_ALLOWED | CS_GET_TASK_ALLOW);

// XNU
proc_csflags_clear(proc, CS_KILL | CS_HARD);
proc_csflags_set(proc, CS_DEBUGGED);

task_set_memory_ownership_transfer(task, true);
vm_map_flags flags = { 0 };
kreadbuf(vm_map + koffsetof(vm_map, flags), &flags, sizeof(flags));
flags.switch_protect = false;
flags.cs_debugged = true;
kwritebuf(vm_map + koffsetof(vm_map, flags), &flags, sizeof(flags));
// Fugu15 Rootful
//proc_csflags_clear(proc, CS_EXEC_SET_ENFORCEMENT | CS_EXEC_SET_KILL | CS_EXEC_SET_HARD | CS_REQUIRE_LV | CS_ENFORCEMENT | CS_RESTRICT | CS_KILL | CS_HARD | CS_FORCED_LV);
//proc_csflags_set(proc, CS_DEBUGGED | CS_INVALID_ALLOWED | CS_GET_TASK_ALLOW);

// XNU
proc_csflags_clear(proc, CS_KILL | CS_HARD);
proc_csflags_set(proc, CS_DEBUGGED);

task_set_memory_ownership_transfer(task, true);
vm_map_flags flags = { 0 };
kreadbuf(vm_map + koffsetof(vm_map, flags), &flags, sizeof(flags));
flags.switch_protect = false;
flags.cs_debugged = true;
kwritebuf(vm_map + koffsetof(vm_map, flags), &flags, sizeof(flags));
#ifdef __arm64e__
}

// For pmap_cs (arm64e) devices, this is enough to get unsigned code to run
pmap_cs_allow_invalid(pmap);
}
// For pmap_cs (arm64e) devices, this is enough to get unsigned code to run
pmap_cs_allow_invalid(pmap);
#endif
}
}
}
}
return 0;
}

Expand Down
2 changes: 2 additions & 0 deletions BaseBin/libjailbreak/src/util.h
Original file line number Diff line number Diff line change
Expand Up @@ -80,4 +80,6 @@ NSString *NSJBRootPath(NSString *relativePath);
NSString *NSPrebootUUIDPath(NSString *relativePath);
#endif

void JBFixMobilePermissions(void);

#endif
46 changes: 46 additions & 0 deletions BaseBin/libjailbreak/src/util.m
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#include "info.h"
#import <Foundation/Foundation.h>
#import "util.h"
#import <sys/stat.h>

NSString *NSJBRootPath(NSString *relativePath)
{
Expand All @@ -14,4 +15,49 @@
@autoreleasepool {
return [NSString stringWithUTF8String:prebootUUIDPath(relativePath.UTF8String)];
}
}

void _JBFixMobilePermissionsOfDirectory(NSString *directoryPath, BOOL recursive)
{
struct stat s;
NSURL *directoryURL = [NSURL fileURLWithPath:directoryPath];

if (stat(directoryURL.fileSystemRepresentation, &s) == 0) {
if (s.st_uid != 501 || s.st_gid != 501) {
chown(directoryURL.fileSystemRepresentation, 501, 501);
}
}

if (recursive) {
NSDirectoryEnumerator *enumerator = [[NSFileManager defaultManager] enumeratorAtURL:directoryURL includingPropertiesForKeys:nil options:0 errorHandler:nil];
for (NSURL *fileURL in enumerator) {
if (stat(fileURL.fileSystemRepresentation, &s) == 0) {
if (s.st_uid != 501 || s.st_gid != 501) {
chown(fileURL.fileSystemRepresentation, 501, 501);
}
}
}
}
}

void JBFixMobilePermissions(void)
{
@autoreleasepool {
NSDictionary *attributes = [[NSFileManager defaultManager] attributesOfItemAtPath:NSJBRootPath(@"/var") error:nil];
if ([attributes[NSFileType] isEqualToString:NSFileTypeSymbolicLink]) {
// /var/jb/var is a symlink, abort
return;
}
attributes = [[NSFileManager defaultManager] attributesOfItemAtPath:NSJBRootPath(@"/var/mobile") error:nil];
if ([attributes[NSFileType] isEqualToString:NSFileTypeSymbolicLink]) {
// /var/jb/var/mobile is a symlink, abort
return;
}

_JBFixMobilePermissionsOfDirectory(NSJBRootPath(@"/var/mobile"), NO);
_JBFixMobilePermissionsOfDirectory(NSJBRootPath(@"/var/mobile/Library"), NO);
_JBFixMobilePermissionsOfDirectory(NSJBRootPath(@"/var/mobile/Library/SplashBoard"), YES);
_JBFixMobilePermissionsOfDirectory(NSJBRootPath(@"/var/mobile/Library/Application Support"), YES);
_JBFixMobilePermissionsOfDirectory(NSJBRootPath(@"/var/mobile/Library/Preferences"), YES);
}
}

0 comments on commit ddc11e8

Please sign in to comment.