บทนำ (Overview)
บทความนี้จะกล่าวถึง “NSUserDefaults” เป็น “class” ซึ่งสามารถเก็บข้อมูลที่ไม่ซับซ้อน อาจจะเป็นค่า configuration ของโปรแกรม (ค่าของการ Save state) เป็นต้น ในเชิงการเขียนโปรแกรมนั้น NSUserDefaults สามารถเขียนได้ดังนี้
- การเขียนค่า
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject:@"value" forKey:@"key-value"];
- การดึงค่า
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString *value = [defaults objectForKey:@"key-value"]; NSLog(@"%@",value);
สามารถติดตามเพิ่มเติมได้จากบทความ How to test insecure data storage – NSUserDefaults ในบทความนี้กล่าวถึงการอ่าน NSUserDefaults จากเครื่องที่ไม่ได้ Jailbreak
ขั้นตอน (Steps)
ติดตั้งโปรแกรม (เปิด Terminal 1 สำหรับใช้งาน Appmon)
- ติดตั้ง Frida ดังบทความต่อไปนี้
- สำหรับเครื่อง Jailbreak How to setup AppMon on MacOS for jailbroken device
- สำหรับเครื่องไม่ Jailbreak How to setup AppMon on MacOS for non-jailbroken device
- ติดตั้งโปรแกรมที่ต้องการทดสอบ สำหรับเครื่องไม่ Jailbreak จะต้องได้ไฟล์ ipa มาเสียก่อน (สามารถติดตามได้จากบทความ How to convert .app from Xcode to .ipa)
python ipa_installer.py -ipa DVIA.ipa
- ติดตั้งโปรแกรม objection จากบทความ How to install “objection”
ใช้งาน Objection (เปิด Terminal 2 สำหรับใช้งาน Objection)
- จากโปรแกรมช่องโหว่ “DVIA” เลือกเมนู “NSUserDefaults”
- จะพบหน้าจอ ดังกล่าว ให้กรอกข้อมูลอะไรก็ได้ลงไปใน UITextbox แล้ว “Save in NSUserDefaults”
- ในการตรวจสอบเราจะพยายามไล่หาทุก “folder” ที่เก็บไฟล์ “plist” สำหรับตัวอย่างทดลองเข้า “folder” ที่ชื่อ “Documents” โดยใช้คำสั่งดังนี้ (สามารถติดตามเพิ่มเติมได้จากบทความ How to access iOS application file system on Non-jailbroken Physical Devices Using Objection) แตสำหรับ NSUserDefaults โปรแกรม Objection เตรียมคำสั่งให้ใช้งานดังนี้
//objection ถูกติดตั้งบน virtual-python3 จำเป็นต้องใช้คำสั่ง source ก่อน source ~/virtual-python3/bin/activate //เข้าถึง File system ของโปรแกรมที่กำลังทดสอบ โดยใช้โปรแกรม objection objection explore //อ่าน nsuserdefaults ios nsuserdefaults get