ν°μ€ν 리 λ·°
What Functions?
iOS μ±μ μ§λ¨νλ€ λ³΄λ©΄ νμ₯μ νμ§νλ νΉμ λ²μ μ΄ μμ μλ μκ³ μ΄λ€ ν¨μλ₯Ό ν΅ν΄ λλ°μ΄μ€ λ΄λΆλ₯Ό κ²μ¬νλμ§ μ‘°κΈμ© λ€λ¦ λλ€. κ·Έμ€μμ λνμ μΌλ‘ NSFileManager ν΄λμ€μ "fileExistsAtpath:"λ₯Ό ν΅ν΄ νμ¬ μ€νλ λλ°μ΄μ€ λ΄λΆμ νμ₯κ³Ό κ΄λ ¨λ λλ ν 리 λλ νμΌμ΄ μ‘΄μ¬νλμ§ μ²΄ν¬ ν Boolean λ°νμ μ§ννλ λ°©λ²κ³Ό UIApplication ν΄λμ€μ "canOpenURL:" ν¨μλ₯Ό ν΅ν΄ νμ₯κ³Ό κ΄λ ¨λ μ±μ΄ μ‘΄μ¬νλμ§ URL Scheme νΈμΆνλ 2κ°μ§ λ°©μμ΄ μ‘΄μ¬ν©λλ€.
Example μ½λ
NSString *filePath = @"/Applications/Cydia.app";
if ([[NSFileManager defaultManager] fileExistsAtPath:filePath])
{
//νμ₯λ λ¨λ§μ
λλ€.
}
if([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"cydia://package/com.example.package"]]){
//νμ₯λ λ¨λ§μ
λλ€.
}
μμ μ½λλ₯Ό 보면 κ°κ°μ ν¨μμ νΉμ±μ μ΄μ©ν΄ μ μμ μΈ λ¨λ§κΈ°μΈμ§ κ²μ¦μ νκ² λ©λλ€. ν¨ν΄μ ν€μλλ λνμ μΌλ‘ cydia, chimera, frida, cycript, ssh, su λ± λ΄λΆμ μ‘΄μ¬νλ μ±, νμΌ, λλ ν 리 μ 무λ₯Ό ν΅ν΄ νλ³νκ² λ©λλ€.
Objectionμ ν΅ν΄ ν μ€νΈνκ³ μ νλ μ±μ spawnνκ³ νμ₯ μ°νλ₯Ό μ€νμν€λ©΄ μμ κ°μ΄ κ²μ¦νκ³ μλ ν¨ν΄μ κ²½λ‘λ₯Ό 보μ¬μ£Όκ³ λ°νλ Boolean κ°μ λ¦¬ν΄ μμΌ μ€λλ€. νμ§λ§ λλΆλΆμ μ±μ κ²½μ° Objectionμμ μ°νμμΌμ£Όλ λΈλ리μ€νΈμ κ²½λ‘ μ΄μΈμλ λ€μν νμ§ μ²΄ν¬λ₯Ό νκ³ μμ΄ μ°νκ° λΆκ°λ₯νμ΅λλ€.
NSAμ λ°°ν¬ν κΈ°λλΌλ₯Ό ν΅ν΄ λμ λ°μ΄λ리 νμΌμ λΆμνμ¬ λλ½λ μ²΄ν¬ κ²½λ‘κ° μλμ§ νμΈν΄λ΄μΌ λ©λλ€. μΌν λ³΄κΈ°λ§ ν΄λ λ€μμ νμ₯κ²μ¦μ νκ³ μμ΅λλ€.
λμ»΄νμΌλ μμ€λ‘μ§μ 보면 UIApplication ν΄λμ€λ₯Ό ν΅ν΄ canOpenURL ν¨μλ₯Ό νΈμΆνκ³ μμ§λ§ cydia://package. μ±μ΄ μ ννκ² λͺ μλμ΄ μμ§ μμ΅λλ€. λ³΄ν΅ Array νμμΌλ‘ νμ§νκ³ μ νλ 리μ€νΈλ₯Ό νΈμΆνκΈ°λ νμ§λ§ μ°Έμ‘° νμμΌλ‘ ν€μλλ₯Ό νΈμΆνλ κ²½μ°λ μμ΅λλ€.
λ λ²μ§Έ λμ»΄νμΌ λΆμμμλ NSFileManager ν΄λμ€μ fileExistsAtPath ν¨μλ₯Ό νΈμΆνκ³ μμ§λ§ λ§μ°¬κ°μ§λ‘ μμ€ λ΄λΆμ μ§μ λͺ μλ ν€μλλ λμ€μ§ μκΈ° λλ¬Έμ KeyWord Search -> μμλλ‘ μ°Έμ‘°νκ³ μλ ν€μλ κ²½λ‘ μμ§ ννλ‘ μΆμΈ‘μ ν΄μΌ λ©λλ€.
νμΌ κ²½λ‘ κΈ°λ° νμ₯ μ¬λΆλ₯Ό 체ν¬νλ ν¨ν΄μ ν¬κ² /Applications/, /private/, /usr/sbin/, /usr/bin/, /System/Library/LaunchDaemons/, /etc/, /bin/λ±μΌλ‘ λλ©λλ€.
/private/λλ ν 리μμλ λ§μ°¬κ°μ§λ‘ μλλ°μ€ μμμ μ νμ΄ νλ¦° κ²½λ‘λ‘ λμ΄κ° ν΄λΉ νμΌμ΄ μ‘΄μ¬νλμ§ μ²΄ν¬ν©λλ€. λν JailbreakTest.txtκ° νμΈλλλ° μ΄κ²μ ν΄λΉ κ²½λ‘μ root κΆνμ ν΅ν νμΌ μμ±μ μλνμ¬ μμ°μ€λ λλ°μ΄μ€μ κΆνμ΄ μ΄λ»κ² λμ΄ μλμ§λ 체ν¬νλ κ²μ΄λΌ λ³Ό μ μμ΅λλ€. μ μμ μΈ λ¨λ§μ΄λΌλ©΄ /private/κ²½λ‘μ μμ νμΌμ μμ±νλ€λ κ²μ λΆκ°λ₯νκΈ° λλ¬Έμ λλ€.
μ΄λ¬ν λͺ¨λ λλ ν 리λ₯Ό λͺ¨λ κ²μνμ¬ μμ§νλ λ°©λ²μ μκ°μ΄ μ€λ μμλλ―λ‘ νΌμ§ 리μ€νΈλ₯Ό λ§λ€μ΄ μΌκ΄ 체ν¬νλ κ²μ΄ ν¨μ¬ μ ννκ³ λΉ λ¦ λλ€.
var fileExistsAtPath = ObjC.classes.NSFileManager["- fileExistsAtPath:"];
var hideFile = 0;
var paths = [
"/Applications/blackra1n.app",
"/Applications/crackerxi.app",
"/Applications/Cydia.app",
"/Applications/FakeCarrier.app",
"/Applications/Icy.app",
"/Applications/IntelliScreen.app",
"/Applications/MxTube.app",
"/Applications/RockApp.app",
"/Applications/SBSettings.app",
"/Applications/WinterBoard.app",
"/bin/bash",
"/bin/sh",
"/bin/su",
"/etc/alternatives/sh",
"/etc/apt/",
"/etc/apt",
"/etc/apt/sources.list.d/cydia.list",
"/etc/apt/sources.list.d/electra.list",
"/etc/apt/sources.list.d/sileo.sourcs",
"/etc/apt/undecimus/undecimus.list",
"/etc/ssh/sshd_config",
"/jb/amfid_payload.dylib",
"/jb/jailbreakd.plist",
"/jb/libjailbreak.dylib",
"/jb/lzma",
"/jb/offsets.plists",
"/Library/MobileSubstrate/CydiaSubstrate.dylib",
"/Library/MobileSubstrate/DynamicLibraries/*",
"/Library/MobileSubstrate/DynamicLibraries/LiveClock.plist",
"/Library/MobileSubstrate/DynamicLibraries/Veency.plist",
"/Library/MobileSubstrate/MobileSubstrate.dylib",
"/pguntether",
"/private/var/cache/apt",
"/private/var/lib/apt",
"/private/var/lib/cydia",
"/private/var/log/syslog",
"/private/var/mobile/Library/SBSettings/Themes",
"/private/var/stash",
"/private/var/tmp/cydia.log",
"/private/var/tmp/frida-*.dylib",
"/private/var/Users",
"/System/Library/LaunchDaemons/com.ikey.bbot.plist",
"/System/Library/LaunchDaemons/com.saurik.Cydia.Startup.plist",
"/usr/bin/cycript",
"/usr/bin/ssh",
"/usr/bin/sshd",
"/usr/lib/libjailbreak.dylib",
"/usr/libexec/cydia/firmware.sh",
"/usr/libexec/sftp-server",
"/usr/libexec/sshd-keygen-wrapper",
"/usr/libexec/ssh-keysign",
"/usr/sbin/frida-server",
"/usr/sbin/sshd",
"/usr/share/jailbreak/injectme.plist",
"/var/cache/apt",
"/var/lib/apt",
"/var/lib/cydia",
"/var/lib/dpkg/info/mobilesubstrate.dylib",
"/var/log/apt",
"/var/mobile/Library/Caches/com.saurik.Cydia/sources.list",
"/var/mobile/Media/.evasi0n7_installed",
"/var/tmp/cydia.log",
"/.bootstrapped_electra",
"/.cydia_no_stash",
"/.installed_unc0ver"
];
Interceptor.attach(fileExistsAtPath.implementation, {
onEnter: function(args) {
var path = ObjC.Object(args[2]);
if (paths.indexOf(path.toString()) > -1) {
console.log("Found Jailbreak Check: " + path.toString());
hideFile = 1;
}},
onLeave: function(retval) {
if (hideFile) {
console.log("Return Value!!(0x0)");
retval.replace(0);
hideFile = 0;
}}
});
κ°λ¨νκ² μ½λλ₯Ό μ€λͺ νμλ©΄pathsλΌλ λ³μμ ꡬκΈμμ μμ§ν νμ₯ μ²΄ν¬ κ²½λ‘λ₯Ό μΆκ° ν Interceptorλ₯Ό ν΅ν΄ ꡬλ μ€μΈ νλ‘μΈμ€μ ννΉμ μμν©λλ€.
ννΉμ΄ μμλλ©΄ indexOf ν¨μλ₯Ό ν΅ν΄ pathsμ μ λ ₯ν΄λ λ¬Έμμ΄μ μ°ΎκΈ° μμνλλ°, λ§μ½ μ°Ύλ λ¬Έμμ΄μ΄ μκ±°λ ν¬ν¨λκΈ°λΌλ νμ κ²½μ° 0 λλ 1μ μΆλ ₯νμ¬ Consoleμ μ°νκ² νλ λμμ Valueλ₯Ό Return μμΌ νμΌ μμ€ν κ²½λ‘λ₯Ό 체ν¬λ₯Ό μ°νμμΌμ€λλ€.
μμ μ½λλ₯Ό ν΅ν΄ μ±μ spawn νμ¬ κ²½λ‘ μ²΄ν¬λ₯Ό μ§νν΄λ³΄λ©΄ μ€μκ°μΌλ‘ κ²μ¬ν μ μλ€. λ§μ½ μμ μ½λλ₯Ό ν΅ν΄ μ²΄ν¬ λ° μ°νλ₯Ό μ§νν΄λ νμ§μ κ±Έλ¦°λ€λ©΄ canOpenURL μ²΄ν¬ λλ νμ§νλ μλ‘μ΄ κ²½λ‘κ° μ‘΄μ¬νλ€λ κ²μ μμ¬ν΄μΌλ©λλ€.
νμ§νκ³ μλ ν€μλλ₯Ό paths λ³μμ λ£μ΄μ£Όκ³ ν΄λΉ κ²½λ‘λ₯Ό μ²΄ν¬ μ Return Value μμΌμ£Όλ κ³Ό λμμ canOpnURL ν¨μμ λ΄κΈ΄ cydia νΈμΆκΉμ§ Return Value νμ¬ μ΅μ’ μ μΌλ‘ νμ₯ κ²μ¦μ νΌν μ μμ΅λλ€.
var paths = [
"/Applications/Cydia.app",
"/Applications/blackra1n.app",
"/Applications/FakeCarrier.app",
"/Applications/Icy.app",
"/Applications/IntelliScreen.app",
"/Applications/MxTube.app",
"/Applications/RockApp.app",
"/Applications/SBSettings.app",
"/Applications/WinterBoard.app",
"/Library/MobileSubstrate/DynamicLibraries/LiveClock.plist",
"/Library/MobileSubstrate/DynamicLibraries/Veency.plist",
"/private/var/lib/apt",
"/private/var/lib/apt/",
"/private/var/lib/cydia",
"/private/var/mobile/Library/SBSettings/Themes",
"/private/var/stash",
"/private/var/tmp/cydia.log",
"/System/Library/LaunchDaemons/com.ikey.bbot.plist",
"/System/Library/LaunchDaemons/com.saurik.Cydia.Startup.plist",
"/usr/bin/sshd",
"/usr/libexec/sftp-server",
"/usr/sbin/sshd",
"/etc/apt",
"/bin/bash",
"/Library/MobileSubstrate/MobileSubstrate.dylib"
];
try {
var resolver = new ApiResolver('objc');
resolver.enumerateMatches('*[* fileExistsAtPath*]', {
onMatch: function(match) {
var ptr = match["address"];
Interceptor.attach(ptr, {
onEnter: function(args) {
var path = ObjC.Object(args[2]).toString();
this.jailbreakCall = false;
for (var i = 0; i < paths.length; i++) {
if (paths[i] == path) {
this.jailbreakCall = true;
}
}
},
onLeave: function(retval) {
if (this.jailbreakCall) {
retval.replace(0x0);
}
}
});
},
onComplete: function() {}
});
resolver.enumerateMatches('*[* canOpenURL*]', {
onMatch: function(match) {
var ptr = match["address"];
Interceptor.attach(ptr, {
onEnter: function(args) {
var url = ObjC.Object(args[2]).toString();
this.jailbreakCall = false;
if (url.indexOf("cydia") >= 0) {
this.jailbreakCall = true;
}
},
onLeave: function(retval) {
if (this.jailbreakCall) {
retval.replace(0x0);
}
}
});
},
onComplete: function() {}
});
var response = {
type: 'sucess',
data: {
message: "[!] Jailbreak Bypass success"
}
};
send(response);
} catch (e) {
var message = {
type: 'exception',
data: {
message: '[!] Jailbreak bypass script error: '
}
};
send(message);
}
μ΅μ’ ννΉ μ½λλ₯Ό 보면. 첫λ²μ§Έλ‘ 체ν¬νλ νμΌ κ²½λ‘μ λ¬Έμμ΄μ pathsλ³μμ λͺ¨λ μΆκ°νλ€. μ°Έκ³ λ‘ indexOf μμ΄ κ²½λ‘ μ²΄ν¬λ₯Ό ν κ²½μ° λ¬Έμμ΄μ λμλ¬Έμλ₯Ό ꡬλΆνλ©° “/” κΈ°νΈλ μ ννκ² κΈ°μ ν΄μΌ λ©λλ€.
ν΄λΉ μ±μ νμΌ κ²½λ‘ μ²΄ν¬ μ΄μΈμ canOpenURL λ©μλ ν¨μλ₯Ό ν΅ν΄ URL Schemeμ μ€ννμ¬ μλμ νΈμ μ νΈμΆνλ λΆλΆλ μ‘΄μ¬νμ΅λλ€. μ΄λΆλΆμ enumerateMatche(query, callbacks) ν¨μλ₯Ό ν΅ν΄ μ§μ λ ν¨μλ₯Ό λ¨Όμ νΈμΆμμΌ “cydia”λΌλ λ¬Έμμ΄μ΄ μ‘΄μ¬νκ±°λ ν¬ν¨λμ΄ μμ κ²½μ° 0 λλ 1μ μΆλ ₯μν€λ©° κ·Έ μ΄ν retvalλ‘ κ°μ λ³μ‘°(true -> false(0x0))νμ¬ μ°νν©λλ€.
frida -U -f "Identifier" -l jailbreak.js --no-pause
ν리λ€λ₯Ό ν΅ν΄ μ±μ νΈμΆνλ λ°©λ²μ 2κ°μ§ μ‘΄μ¬ν©λλ€. 첫 λ²μ§Έλ‘ App Nameμ ν΅ν΄ νΈμΆνμ¬ μ½λλ₯Ό ννΉ νκΈ° μν΄μλ νμ₯μ νμ§νκΈ° μ΄μ μ 곡백 νμ΄λ°μ΄ νμν©λλ€(ex: κ΄κ³ μ± μ¬λΆ, μλ¦Ό μ¬λΆ, κΆν λμ λ±) μ΅μ΄ μ± μ€ν μ 곡백 νμ΄λ°μ΄ μ‘΄μ¬νλ€λ©΄ ν΄λΉ μμ μ μ½λλ₯Ό μ€νμν€λ©΄ λμ§λ§ μ΅μ΄ μ€ννμλ§μ λ°λ‘ μ²΄ν¬ ν μ’ λ£μν€λ©΄ "-f" μ΅μ μ μ΄μ©νμ¬ μ±μ μ€ννμλ§μ λ°λ‘ μ½λ μ€νμ ν μ μλλ‘ ν΄μΌ λ©λλ€.
νμ₯ νμ§λ₯Ό μλ²½νκ² μνν μ μλ λ°©λ²μ κ΅μ₯ν νλ€λ€κ³ μκ°λ©λλ€. μ무리 λ€μμ 체ν¬λ₯Ό μ§ννλ€ νλλΌλ μλ ¨λ ν΄μ»€λ λμ»΄νμΌλ μμ€λ₯Ό ν΅ν΄ μ μ λΆμμ΄ κ°λ₯νλ―λ‘ λλ ν λΆλΆλ μ€μν μλ°©λ²μ μν©λλ€. λν μΆμΈ‘μ΄ κ°λ₯ν λ©μλ isJailbroken κ°μ ν€μλλ λλλ‘ μ¬μ©νμ§ μλ κ²μ΄ μ’μ΅λλ€. μλνλ©΄ Objectionμ΄λ cycript κ°μ κΈ°λ₯λ€μ΄ ν¨μ Tracingμ μ΅μ νλμ΄μκΈ° λλ¬Έμ μμ½κ² λ³μ‘°κ° κ°λ₯ν΄μ§λ―λ‘ μλ²½ν μ μμ΄λ νΌλμ€λ½κ² ꡬνν΄λλ κ²μ΄ μ¬λ°λ₯Έ λ°©ν₯μ΄λΌκ³ λ³Ό μ μκ² μ΅λλ€.
'MOBILE' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[iOS] FairPlay DRM 볡νΈν (0) | 2021.09.26 |
---|---|
[iOS] Shared Clipboard μ·¨μ½μ (0) | 2021.09.25 |
[iOS] Objection μ£Όμ λͺ λ Ήμ΄ (0) | 2021.02.14 |
[Android] Data Storage(Plain/Encryption) μ·¨μ½μ (0) | 2021.02.13 |
[Android] Content Provider μ·¨μ½μ (2) | 2021.02.10 |