আমি যদি চাই যে আমার অ্যাপ্লিকেশনটি জেলব্রোকড আইফোনটিতে অন্যরকম আচরণ করতে পারে, তবে আমি কীভাবে এটি নির্ধারণ করব?
আমি যদি চাই যে আমার অ্যাপ্লিকেশনটি জেলব্রোকড আইফোনটিতে অন্যরকম আচরণ করতে পারে, তবে আমি কীভাবে এটি নির্ধারণ করব?
উত্তর:
এটি জেলব্রেক বলতে কী বোঝায় তা নির্ভর করে। সাধারণ ক্ষেত্রে, আপনি সিডিয়া ইনস্টল করা আছে কিনা তা দেখতে সক্ষম হওয়া উচিত এবং এরকম কিছু করা উচিত something
NSString *filePath = @"/Applications/Cydia.app";
if ([[NSFileManager defaultManager] fileExistsAtPath:filePath])
{
// do something useful
}
হ্যাক করা কার্নেলগুলির জন্য, এটি আরও কিছুটা জড়িত involved
fileExistsAtPath:
এবং আপনার NO
যে নির্দিষ্ট পথটি পরীক্ষা করে তা ফিরিয়ে আনতে পারে ।
এটি এমন একটি কোড যা এই প্রয়োজনের জন্য আমি পেয়েছি এমন কয়েকটি জবাব একত্রিত করে এবং আপনাকে অনেক বেশি সাফল্যের হার দেবে:
BOOL 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 YES;
}
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 YES;
}
fclose(f);
NSError *error;
NSString *stringToBeWritten = @"This is a test.";
[stringToBeWritten writeToFile:@"/private/jailbreak.txt" atomically:YES encoding:NSUTF8StringEncoding error:&error];
[[NSFileManager defaultManager] removeItemAtPath:@"/private/jailbreak.txt" error:nil];
if(error == nil)
{
return YES;
}
#endif
return NO;
}
isJailbroken
+(BOOL)isJailbroken {
NSURL* url = [NSURL URLWithString:@"cydia://package/com.example.package"];
return [[UIApplication sharedApplication] canOpenURL:url];
}
/Applications/Cydia.app
একটি সাধারণ ফোনে ফাইলের পাথ চেক করার অনুমতি নেই? আমি অ্যাপল এটি সনাক্ত করার জন্য এবং এর জন্য একটি অ্যাপ্লিকেশনটি প্রত্যাখ্যান করার কথা কখনও শুনিনি, তবে অ্যাপল অনির্দেশ্য। হয় Cydia হয়েছে //: একটি URL স্কিম Cydia যা আইনত UIApplication সাথে চেক করা যাবেcanOpenURL:
কার্নেলটি নষ্ট হয়ে গেছে কিনা তা পরীক্ষা করা আরও বেশি জড়িত নয়।
জেলব্রেকিং কর্নেলের স্বাক্ষরিত কোডের স্বাক্ষর চেককে সর্বদা রিপোর্ট করে যে কোডটি সঠিকভাবে স্বাক্ষরিত হয়েছে, অখণ্ডিত ফোনগুলি একটি খারাপ স্বাক্ষর সহ কোড চালাতে পারে না।
সুতরাং, খারাপ স্বাক্ষর সহ অ্যাপ্লিকেশনটিতে একটি পৃথক নির্বাহযোগ্যকে অন্তর্ভুক্ত করুন। এটি কেবলমাত্র একটি 3-লাইনের প্রোগ্রাম হতে পারে যার মূল () এবং একটি ফেরতের মান থাকে। কোড সাইনিং ছাড়াই এক্সিকিউটেবলকে কম্পাইল করুন (এটিকে প্রজেক্ট সেটিংস-> বিল্ডে বন্ধ করুন) এবং "কোডসাইন" কমান্ডলাইন ইউটিলিটিটি ব্যবহার করে এটি একটি ভিন্ন কী দিয়ে সাইন করুন।
আপনার অ্যাপ্লিকেশনটি পৃথক সম্পাদনযোগ্যকে কার্যকর করুন। খারাপ সিগের সাথে পৃথক এক্সিকিউটেবল চলার সময় যদি আপনার প্রোগ্রামটি রিটার্নের মানটি না পান তবে অবশ্যই জেল হয়ে গেছে। পৃথক এক্সিকিউটেবল যদি এ-ওকে ফেরত দেয় তবে ফোনটি অবশ্যই জেলব্রোকেড।
BOOL isJailbroken()
{
#if TARGET_IPHONE_SIMULATOR
return NO;
#else
FILE *f = fopen("/bin/bash", "r");
if (errno == ENOENT)
{
// device is NOT jailbroken
fclose(f);
return NO;
}
else {
// device IS jailbroken
fclose(f);
return YES;
}
#endif
}
নিম্নলিখিত ডিভাইসগুলি পরীক্ষা করে কোনও ডিভাইস জেলব্রোকন কিনা তা আপনি সনাক্ত করতে পারেন:
আমি বিভিন্ন নিবন্ধ এবং বই থেকে তৈরি একটি ওপেন সোর্স লাইব্রেরি আছে। গিটহাবে এটি ব্যবহার করে দেখুন !
আমি সুইট ২.৩-এ পুনরায় কাজ করেছি @ ইয়াসি দ্বারা প্রদত্ত সমাধানটি
public static func jailbroken(application: UIApplication) -> Bool {
guard let cydiaUrlScheme = NSURL(string: "cydia://package/com.example.package") else { return isJailbroken() }
return application.canOpenURL(cydiaUrlScheme) || isJailbroken()
}
static func isJailbroken() -> Bool {
if isSimulator {
return false
}
let fileManager = NSFileManager.defaultManager()
if fileManager.fileExistsAtPath("/Applications/Cydia.app") ||
fileManager.fileExistsAtPath("/Library/MobileSubstrate/MobileSubstrate.dylib") ||
fileManager.fileExistsAtPath("/bin/bash") ||
fileManager.fileExistsAtPath("/usr/sbin/sshd") ||
fileManager.fileExistsAtPath("/etc/apt") ||
fileManager.fileExistsAtPath("/usr/bin/ssh") {
return true
}
if canOpen("/Applications/Cydia.app") ||
canOpen("/Library/MobileSubstrate/MobileSubstrate.dylib") ||
canOpen("/bin/bash") ||
canOpen("/usr/sbin/sshd") ||
canOpen("/etc/apt") ||
canOpen("/usr/bin/ssh") {
return true
}
let path = "/private/" + NSUUID().UUIDString
do {
try "anyString".writeToFile(path, atomically: true, encoding: NSUTF8StringEncoding)
try fileManager.removeItemAtPath(path)
return true
} catch {
return false
}
}
static func canOpen(path: String) -> Bool {
let file = fopen(path, "r")
guard file != nil else { return false }
fclose(file)
return true
}
আমি জানি সবচেয়ে পরিশীলিত পদ্ধতি হ'ল objc_copyImageNames()
ফাংশন ব্যবহার করা। এটি বর্তমানে লোড হওয়া লাইব্রেরিগুলির একটি তালিকা ফেরত দেয় এবং যেহেতু বেশিরভাগ লোকেরা জেলব্রোকেন ডিভাইসে মোবাইলসুবস্ট্রেট রয়েছে এবং বেশিরভাগ আইএপি ক্র্যাক সরঞ্জাম এটির উপর নির্ভরশীল, তাই কমপক্ষে কিছু মোবাইলসবস্ট্রেট লাইব্রেরি প্রদর্শিত হবে।
deb
মোবাইলসাবস্ট্রেটের ফাইলটি সন্ধান করতে পারেন , এটি আনপ্যাক এবং ব্ল্যাকলিস্টে (প্রায়) সমস্ত কিছু .dylib
এটি প্যাক করা আছে।
আমি এর জন্য বিদ্যমান কোন "এপিআই" সম্পর্কে অবগত নই। যদি সেখানে থাকে, তবে একটি জেলব্র্যাক-মাস্কিং পণ্যগুলি তাদের তাড়াতাড়ি coverেকে রাখে।
যেহেতু প্রচুর লোক দেখায়, এটি একটি বিড়াল এবং মাউস খেলা। এবং উভয় খেলোয়াড়ই বিশেষজ্ঞ হওয়ার পরে, সবার প্রথমে কে নেমে আসে প্রথম পদক্ষেপটি পান। (ডিভাইসটি ধারণকারী ব্যক্তি))
জেডজিয়ার্সকির নতুন বই "হ্যাকিং এবং সুরক্ষা আইওএস অ্যাপস" -তে জেলব্রেক সনাক্তকরণের জন্য আমি অনেক ভাল পরামর্শ পেয়েছি। (ব্যক্তিগতভাবে আমি ও'রিলি ইবুকের জন্য আরও বেশি অর্থ প্রদান করেছি কারণ তারা অনুলিপি এবং পেস্টের অনুমতি দেয়))
না, আমি প্রকাশকদের সাথে অনুমোদিত নয়। তবে আমি এটি একটি ভাল বই পেয়েছি। আমি কেবল হ্যাকারদের ভুলগুলি প্রকাশ করতে পছন্দ করি না যাতে তারা সেগুলি ঠিক করতে পারে, তাই আমি ভেবেছিলাম বইটিতে ইঙ্গিত করব।
আপনার অ্যাপ্লিকেশন মাধ্যমে স্বাক্ষরবিহীন কোড কার্যকর করার চেষ্টা করুন।
জেলব্রোকড ডিভাইসে সাধারণত নিম্নলিখিত বৈশিষ্ট্য থাকে:
জেলব্রেক সনাক্তকরণের জন্য কেবল ফাইলের অস্তিত্ব পরীক্ষা করা ব্যর্থ হওয়ার সাথে সাথে ডুমমড। এই চেকগুলি বাইপাস করা সহজ।
পরীক্ষা করার জন্য কয়েকটি সাধারণ ফাইল:
/Library/MobileSubstrate/MobileSubstrate.dylib
/Applications/Cydia.app
/var/cache/apt
/var/lib/apt
/var/lib/cydia
/var/log/syslog
/var/tmp/cydia.log
/bin/bash
/bin/sh
/usr/sbin/sshd
/usr/libexec/ssh-keysign
/etc/ssh/sshd_config
/etc/apt
সাইডিয়া সম্পর্কিত ফাইলগুলির সর্বাধিক পরীক্ষা করুন।
আমি এমন ফাইলগুলি সন্ধান করার পরামর্শ দেব যা "ভ্যানিলা" আইফোনে উপস্থিত নেই। সমস্ত জালব্রেক কিট আমি ইনস্টল ssh দেখেছি। এটি জেলব্রোকড ফোনের একটি ভাল সূচক হতে পারে।
আমরা যা করেছি তা হ'ল, আমাদের ব্যবহারকারীদের ( স্টকস লাইভ ) সাথে যোগাযোগের জন্য ইতিমধ্যে আমাদের কাছে আরএসএস ফিড রয়েছে , আমরা একটি নিউজ আইটেম রাখি যাতে এরকম কিছু বলা আছে:
কিছু জেলব্রোকন ডিভাইসগুলির ব্লে ব্ল্যাক ব্লকের সমস্যা রয়েছে, আমরা এই সমস্যাগুলি সমাধান করার জন্য একটি হ্যাক তৈরি করেছি তবে আমাদের এটি জানতে হবে এটি জেলব্রোকন ডিভাইস কিনা বা না, এখানে চাপুন যাতে অ্যাপটি সমস্যার সমাধান করে। আপনি যদি কখনও স্বাভাবিক অবস্থায় ফিরে যান, অর্থাত্ জেলবন্ধটি সরিয়ে ফেলেন তবে এখানে টিপুন।
তারপরে আপনি ব্যবহারকারীর মিথস্ক্রিয়া প্রক্রিয়াকরণ করুন এবং যথাযথ করুন যা বিভিন্ন ইত্যাদি আচরণ করার মতো ...
কোন ফাইলটি সাইডিয়া বা জেলব্রোকড ডিভাইস তৈরি করে তা সন্ধান করার চেষ্টা করুন। অথবা অ্যাপ্লিকেশনটির ব্ল্যাকবক্সের বাইরে কোনও ফাইলে লেখার চেষ্টা করুন। আপনি যদি এটি করতে সফল হন তবে ডিভাইসটি আপোস / জেলব্রোকড :)
- (BOOL)jailbroken
{
NSFileManager * fileManager = [NSFileManager defaultManager];
return [fileManager fileExistsAtPath:@"/private/var/lib/apt/"];
}
দয়া করে সুইফট 4 এবং তদূর্ধ্বের জন্য নিম্নলিখিত কোডটি ব্যবহার করুন: অ্যাপিলেজিতে নিম্নলিখিত কোড যুক্ত করুন:
private func getJailbrokenStatus() -> Bool {
if TARGET_IPHONE_SIMULATOR != 1 {
// Check 1 : existence of files that are common for jailbroken devices
if FileManager.default.fileExists(atPath: "/Applications/Cydia.app")
|| FileManager.default.fileExists(atPath: "/Library/MobileSubstrate/MobileSubstrate.dylib")
|| FileManager.default.fileExists(atPath: "/bin/bash")
|| FileManager.default.fileExists(atPath: "/usr/sbin/sshd")
|| FileManager.default.fileExists(atPath: "/etc/apt")
|| FileManager.default.fileExists(atPath: "/private/var/lib/apt/")
|| UIApplication.shared.canOpenURL(URL(string:"cydia://package/com.example.package")!) {
return true
}
// Check 2 : Reading and writing in system directories (sandbox violation)
let stringToWrite = "Jailbreak Test"
do {
try stringToWrite.write(toFile:"/private/JailbreakTest.txt", atomically:true, encoding:String.Encoding.utf8)
//Device is jailbroken
return true
} catch {
return false
}
}
else {
return false
}
}
ফানক অ্যাপ্লিকেশনডিডকোম্যাক্টিভ (_ অ্যাপ্লিকেশন: ইউআইএএপ্লিকেশন) {
if getJailbrokenStatus() {
let alert = UIAlertController(title: LocalizedKeys.Errors.jailbreakError, message: LocalizedKeys.Errors.jailbreakErrorMessage, preferredStyle: UIAlertController.Style.alert)
let jailBrokenView = UIViewController()
jailBrokenView.view.frame = UIScreen.main.bounds
jailBrokenView.view.backgroundColor = .white
self.window?.rootViewController = jailBrokenView
jailBrokenView.present(alert, animated: true, completion: nil)
}
if #available(iOS 11.0, *) {
if !UIScreen.main.isCaptured {
DispatchQueue.main.async {
self.blockImageView.removeFromSuperview()
}
}
}
}
এখানে আমার সমাধানগুলি: পদক্ষেপ 1
extension UIDevice {
func isJailBroken() -> Bool {
let cydiaPath = "/Applications/Cydia.app"
let aptPath = "/private/var/lib/apt/"
if FileManager.default.fileExists(atPath: cydiaPath) || FileManager.default.fileExists(atPath: aptPath) {
return true
}
return false
}
}
পদক্ষেপ 2: viewDidLoad()
আপনার লঞ্চ স্ক্রিন ভিউ কন্ট্রোলারের ভিতরে এটি কল করুন (বা আপনি যে ভিসি প্রথমবারের জন্য কল করছেন):
// show a blank screen or some other view controller
let viewController = UIDevice.current.isJailBroken() ? JailBrokenViewController() : NextViewController()
self.navigationController?.present(viewController, animated: true, completion:nil)
অ্যাক্সেস / অ্যাপ্লিকেশন / প্রিফারেন্স.অ্যাপ / জেনারেল.পিলিস্টে চেষ্টা করার চেষ্টা করুন আপনার জেলব্রোকড আইফোন নন-জেবি ফোনে এটি করতে সক্ষম হওয়া উচিত আপনি এতে অ্যাক্সেস করতে সক্ষম হবেন না