애플사 아이폰의 잠금장치 해제여부를 체크하는 소스이며, 향후 보안모듈로 배포할 예정입니다.
– 탈옥된 폰에서는 ROOT 권한으로 접근이 가능하므로 앱의 주요정보가 유출될 수 있으며, 잠금장치가 해제된 경우 앱을 강제로 종료합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
// Objective-C (iOS) @implementation NativeAgent RCT_EXPORT_MODULE(); RCT_EXPORT_METHOD(getJailbroken:(RCTResponseSenderBlock)callback) { callback(@[[NSNull null], isJailbroken ()]); } NSString *isJailbroken () { #if !(TARGET_IPHONE_SIMULATOR) if ([[NSFileManager defaultManager] fileExistsAtPath:@"/Applications/Cydia.app"] || [[NSFileManager defaultManager] fileExistsAtPath:@"/Library/MobileSubstrate/MobileSubstrate.dylib"] || [[NSFileManager defaultManager] fileExistsAtPath:@"/bin/bash"] || [[NSFileManager defaultManager] fileExistsAtPath:@"/usr/sbin/sshd"] || [[NSFileManager defaultManager] fileExistsAtPath:@"/etc/apt"] || [[NSFileManager defaultManager] fileExistsAtPath:@"/private/var/lib/apt/"] || [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"cydia://package/com.example.package"]]) { return @"Y"; } FILE *f = NULL; if ((f = fopen("/bin/bash", "r")) || (f = fopen("/Applications/Cydia.app", "r")) || (f = fopen("/Library/MobileSubstrate/MobileSubstrate.dylib", "r")) || (f = fopen("/usr/sbin/sshd", "r")) || (f = fopen("/etc/apt", "r"))) { fclose(f); return @"Y"; } fclose(f); NSError *error; [@"Jailbreak Test" writeToFile:@"/private/jailbreak.txt" atomically:YES encoding:NSUTF8StringEncoding error:&error]; if(error == nil) { return @"Y"; } else { [[NSFileManager defaultManager] removeItemAtPath:@"/private/jailbreak.txt" error:nil]; } #endif return @"N"; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
import { NativeModules, Platform } from 'react-native' export default class HomeScreen extends React.Component<Props, {estimation:number}> { ... ... async componentDidMount() { const NativeAgent = NativeModules.NativeAgent if (Platform.OS == "ios") { await NativeAgent.getJailbroken ((err: any, result: string) => { if (result == "Y") { Alert.alert( "Help", "[MNU-002] 탈옥폰에서는 서비스 사용이 불가능합니다.", [ { text: "확인", onPress: () => { RNExitApp.exitApp() } } ], { cancelable: false } ); } }) } } } |