[สารบัญ]
บทความนี้ขับเคลื่อนด้วยความสนใจของฉันในด้านวิศวกรรมย้อนกลับ ฉันอ่าน "วิศวกรรมย้อนกลับของแอปพลิเคชัน iOS" และนำฟังก์ชันที่น่าสนใจไปใช้ BTW iOS Reverse Forum iOSRe เป็นชุมชนการสื่อสารย้อนกลับของ iOS ที่ดี
โค้ดและเครื่องมือทั้งหมดสำหรับตัวอย่างนี้โฮสต์อยู่บน GitHub โปรดตรวจสอบ https://github.com/jackrex/FakeWeChatLoc
บทความนี้ทั้งหมดมีไว้เพื่อความบันเทิงส่วนบุคคลและคุณค่าในการเรียนรู้เท่านั้น เทคโนโลยีที่เกี่ยวข้องมีไว้เพื่อการเรียนรู้และการสื่อสารเท่านั้น โปรดอย่าใช้เพื่อวัตถุประสงค์ที่ผิดกฎหมายหรือเพื่อวัตถุประสงค์ทางการค้าอื่นใด! - -
ถ้าพูดกันตรงๆ การเจลเบรกระบบ iOS นั้นคล้ายคลึงกับ Android Root เลย ซึ่งเทียบเท่ากับการเพิ่มสิทธิ์อนุญาตของโทรศัพท์มือถือ ทำให้คุณสามารถควบคุมสิ่งที่คุณไม่สามารถควบคุมได้มาก่อน
เนื่องจาก Objective-C เป็นภาษาระดับสูงเชิงวัตถุ รูปแบบไฟล์ Mach-O ที่ใช้โดย iOS จึงมีข้อมูลเมตาดาต้าจำนวนมาก ทำให้เราสามารถใช้ class-dump เพื่อกู้คืนไฟล์ส่วนหัวได้ นี่เป็นการเริ่มต้นที่ดีสำหรับ iOS วิศวกรรมย้อนกลับ
MobileSubstrate เป็นเฟรมเวิร์กที่ช่วยให้การพัฒนา iOS อำนวยความสะดวกในการเชื่อมต่อกับ MobileSubstrate ประกอบด้วยสามส่วนต่อไปนี้:
พื้นผิวมือถือ
ระบบปฏิบัติการประเภทนี้ที่ได้มาจาก Unix โดยทั่วไปมีลำดับชั้นไดเรกทอรีเดียวกัน คุณอาจเปรียบเทียบ Android และ MacOS ได้เช่นกัน และคุณจะพบว่าชื่อไดเรกทอรีจำนวนมากเหมือนกัน เรามาเลือกบางส่วนและอธิบายสั้น ๆ กัน
`/bin binnary` ,系统常用的基本二进制文件 例如 cd, ls, ps 等
`/usr` 包含大多用户工具库
`/var variable` 存放经常更改的东西,例如 logs,用户数据,/var/mobile/Applications 是纺织AppStore 下载的 App
`/Applications` 存放所有系统App,以及从Cydia下载的App路径
`/Library` 存放了系统App的数据,其中有一个/Library/MobileSubstrate 目录,MobileSubstrate 是一个hook 功能开发平台,其中内容如下图所示,我们所开发的插件都被放置到这个里面
`/Library/MobileSubstrate` 里面文件类型主要有 dylib,plist
dylib 是动态加载库,就是tweak
plist 配合dylib 使用的filter 文件,指定注入目标,及hook的目标
`/System` 存放iOS 各种系统framework
`/User` 指向 /var/mobile 即是我们一般用户的主目录
จริงๆ แล้วโครงสร้าง Deb เป็นไฟล์ควบคุมใน Library Applications gzip data.tar.gz และวางไว้ใน control.tar.gz
เครื่องมือที่ใช้กันทั่วไปสำหรับการดีบักแบบไดนามิกและการวิเคราะห์แบบคงที่ในวิศวกรรมย้อนกลับ:
class-dump เป็นเครื่องมือที่ใช้ในการดัมพ์ไฟล์ส่วนหัวทั้งหมดของแอปที่เจลเบรคแล้ว
IDA เป็นเครื่องมือถอดรหัสที่ดีที่สุด ที่จริงแล้ว การทำวิศวกรรมย้อนกลับอย่างง่ายสามารถทำได้โดยใช้ IDA เพียงอย่างเดียว
Hopper Disassembler สามารถใช้งานได้ภายใต้ OS X โดยเสียค่าธรรมเนียมใบอนุญาตต่ำ
เครื่องมืออันทรงพลังสำหรับการดีบักแบบไดนามิกทำงานร่วมกับ IDA เพื่อให้ทุกอย่างเคลื่อนไหวและอยู่นิ่ง
เครื่องมือแก้ไขข้อบกพร่องที่อำนวยความสะดวกในการดีบัก UI และการวางตำแหน่ง เราสามารถระบุอินเทอร์เฟซของแอปที่สอดคล้องกับคลาสที่ต้องการได้อย่างรวดเร็ว
ซอฟต์แวร์ช่วยจัดการไฟล์ที่สะดวกสบาย
OpenSSH ช่วยให้คอมพิวเตอร์ของคุณเข้าสู่ระบบโทรศัพท์ของคุณจากระยะไกล
เครื่องมือที่ทรงพลังมากที่ช่วยให้นักพัฒนาสามารถโต้ตอบกับแอปพลิเคชันจากบรรทัดคำสั่ง และดูและแก้ไขแอปพลิเคชันขณะรันไทม์
ซอฟต์แวร์ที่จัดการระบบไฟล์บนโทรศัพท์มือถือได้อย่างสะดวก เช่น iFunbox และ Re manager ของ Android ซึ่งสามารถแก้ไขไฟล์และติดตั้ง Deb binaries ได้อย่างง่ายดาย
APPsync เป็นแพตช์ที่ติดตั้งบ่อยที่สุดหลังจากการเจลเบรค iPhone, iPad และ iPod touch หลังจากการติดตั้ง คุณสามารถข้ามการตรวจสอบลายเซ็นของระบบ และติดตั้งและรันซอฟต์แวร์ ipa ที่แคร็กได้ตามต้องการ
ตามความเข้าใจข้างต้น เนื่องจากเราต้องการจำลองตำแหน่งใน WeChat เราจึงใช้ WeChat เป็นวัตถุในการวิเคราะห์ของเรา ใช้ class-dump เพื่อส่งออกไฟล์ส่วนหัวของ WeChat แม้ว่าเราจะเห็นวิธีการส่งออกโดยตรง class-dump -H xxx -o output/ บนเว็บไซต์อย่างเป็นทางการของ class-dump แต่ก็ไม่สามารถขยายขนาด wechat ใน ipa ได้โดยตรง ทิ้งมัน เราจะพบว่ามีเพียงไฟล์ CDStructures.h ในโฟลเดอร์เอาต์พุตและว่างเปล่า
สาเหตุเป็นเพราะหลังจากอัปโหลดไปยัง AppStore แล้ว AppStore จะเข้ารหัส ipas ทั้งหมดโดยอัตโนมัติ ดังนั้นเราจึงจำเป็นต้องเชลล์ไบนารี WeChat ก่อนที่จะทิ้ง
เราควรลองใช้คลัชที่สะดวกกว่านี้ก่อน
เมื่อ Clutch ล้มเหลว ให้ลองทำตามขั้นตอนต่อไปนี้ เราต้องการเครื่องมืออย่าง dumpdecrypted.dylib เพื่อดัมพ์เชลล์บนแอปของเรา ก่อนอื่นเรา ssh ไปที่โทรศัพท์ iOS ของเรา จากนั้นเราจะจบโปรแกรมทั้งหมด เปิด WeChat และดำเนินการ
ps - e //列出当前运行的进程
สิ่งที่ต้องทำ คุณจะเห็นว่ากระบวนการที่แสดงเริ่มต้นด้วย /var/mobile/Containers/ เป็นกระบวนการของ WeChat เรารู้ว่าเส้นทางแซนด์บ็อกซ์ของแอพทั้งหมดคือ /var/mobile/Containers/Bundle/Application/03B61840-2349-4559-B28E - 0E2C6541F879/ แต่เราไม่รู้ว่า App 03B61840-2349-4559-B28E-0E2C6541F879 คืออะไร คงเป็นเรื่องยากมากถ้าเราไปที่ไดเร็กทอรีเพื่อค้นหาทีละรายการ
ในเวลานี้ cycript มีประโยชน์ในการดำเนินการ
cycript -p WeChat
cy# [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask][0]
#"file:///var/mobile/Containers/Data/Application/D41C4343-63AA-4BFF-904B-2146128611EE/Documents/"
ด้วยวิธีนี้เราจะได้รับไดเร็กทอรีเอกสาร WeChat จากนั้นใช้ scp หรือ ifunbox เพื่อคัดลอก dumpdecrypted.dylib ไปยังไดเร็กทอรี Documents ของ WeChat
เริ่มแตกเปลือก
DYLD_INSERT_LIBRARIES=/path/to/dumpdecrypted.dylib /path/to/executable
WeChat.decrypted จะถูกสร้างขึ้นในไดเรกทอรีปัจจุบัน นี่คือ WeChat ที่ถูกเชลล์ เราสามารถถ่ายโอนข้อมูลได้ ก่อนที่จะทิ้ง เราสามารถใช้เครื่องมือ otool เพื่อดูข้อมูลไฟล์ของ Match-o
otool -H WeChat.ถอดรหัสแล้ว
ใช้ otool -l WeChat.decrypted เพื่อค้นหา cryptid และใช้ lipo เพื่อแยกโครงสร้างที่ถอดรหัสออก
ดำเนินการ
./class-dump -H WeChat.decrypted --arch armv7 -o output/
สร้างโฟลเดอร์ Output ในไดเร็กทอรีปัจจุบัน ซึ่งมีไฟล์ส่วนหัวทั้งหมดที่ส่งออกโดย WeChat รวมถึง SDK ของบุคคลที่สาม ฯลฯ เราใส่ไฟล์ส่วนหัวเหล่านี้ทั้งหมดลงในโปรเจ็กต์ Xcode ที่ว่างเปล่าเพื่อให้ดูได้ง่าย
จากสัญชาตญาณ เราพบว่า Appdelegate คือ MircoMessengerAppDelegate ของ WeChat เราสามารถเห็นโครงสร้างโปรเจ็กต์ของ WeChat อย่างคร่าว ๆ ได้ เป็นต้น อันที่จริง การทำวิศวกรรมย้อนกลับก็เป็นอีกวิธีหนึ่งของการเรียนรู้เช่นกัน
จากนั้นลองคิดถึงฟังก์ชั่นที่เราต้องการนำไปใช้ เราต้องการเปลี่ยนตำแหน่งของเราเพื่อเปลี่ยนคนใกล้เคียง เราสามารถเดาคร่าวๆ ได้ว่าคลาสนี้ควรถูกส่งไปยังตำแหน่งใกล้เคียงหรือที่คล้ายกัน และเราสามารถค้นหาไฟล์ส่วนหัวที่เกี่ยวข้องได้
เราพบว่ามีมากมายหลังจากค้นหา Near แล้วอันไหนล่ะ?
ในความเป็นจริงนอกเหนือจากวิธีการกำจัดและการเก็งกำไรทีละคนแล้วเรายังใช้เครื่องมืออันทรงพลัง Reveal เพื่อช่วยเราค้นหา
อาจกล่าวได้ว่า class-dump ช่วยให้เราแสดงรายการไฟล์ส่วนหัวทั้งหมด ทำให้เราเข้าใจทั่วไปเกี่ยวกับโครงสร้างโดยรวมของโครงการ แต่แผนการดำเนินงานที่เกี่ยวข้องใน .m ยังคงเป็นกล่องดำสำหรับเรา ในเวลานี้ เราจำเป็นต้องใช้เครื่องมืออันทรงพลังของ IDA ในการวิเคราะห์
เปิด IDA และเลือกใหม่
เรานำไบนารี WeChat ออกจาก Wechat.app แล้วลากไปที่ IDA ด้านบน เนื่องจากฉันใช้ itouch 5 CPU และสถาปัตยกรรมคือ armv7 ฉันจึงใช้อันแรกหากใช้ไม่ถูกต้อง ค่าชดเชยที่ได้รับจากจุดพัก จะผิดพลาดจึงไม่สามารถ debg ได้ตามปกติ
เมื่อประมวลผลเสร็จแล้วจะได้ดังรูปด้านล่าง
ในหมู่พวกเขาเราสามารถเห็นการใช้งานวิธีการเฉพาะใน MicroMessengerAppDelegate ได้อย่างง่ายดาย กดแป้นเว้นวรรคเพื่อขยายไปยังโหมดดู
ที่นี่เราจะเห็นการใช้งานในรูปแบบ .m
การดีบักแบบไดนามิกคือเมื่อเราไม่มีซอร์สโค้ด เราใช้ lldb เพื่อตั้งค่าเบรกพอยต์ที่ตำแหน่งของโค้ดสำหรับการดีบัก วัตถุประสงค์หลักคือการคำนวณที่อยู่การดำเนินการของโค้ดที่เกี่ยวข้อง และวิธีการดีบักเพื่อให้ได้ค่าที่เราต้องการ . ตามที่กล่าวไว้ข้างต้น เราใช้ผลการคอมไพล์ของ IDA
iOS เปิด debugserver และฟังพอร์ต 1234 debugserver *:1234 -a "WeChat"
เรียกใช้ lldb บน Mac และเชื่อมต่อกับเซิร์ฟเวอร์ iOS ต่อไป เรียกใช้กระบวนการ lldb เชื่อมต่อ เชื่อมต่อ://iOSIP:1234
ออฟเซ็ตคือ 0xd000
รับที่อยู่เบรกพอยต์ br s -a 0xd000+0x649D8 // เบรกพอยต์ที่ต่ำกว่า
เริ่มการดีบัก ni po และคำสั่งการดีบักอื่นๆ
เริ่มแอปโดยตรง: debugserver -x backboard *:1234 /path/to/app/executable
libsubstrate.dylib
Tweak หมายถึง "การปรับแต่ง" ในคำนี้ จริงๆ แล้วมันคือ dylib ไลบรารีลิงก์บุคคลที่สามของบุคคลที่สาม
Theos เป็นชุดเครื่องมือพัฒนา Jailbreak วิธีการนี้ยังถูกนำมาใช้ใน "iOS Application Reverse Engineering Book" แต่โดยส่วนตัวแล้วฉันชอบใช้ iOSOpenDev เพื่อสร้างโปรเจ็กต์ (ปล. หลังจากคุ้นเคยกับบรรทัดคำสั่ง git แล้ว ฉันคิดว่าจะใช้ sourceTree More โดยสัญชาตญาณ) ดังนั้นฉันจะพูดถึงมันสั้น ๆ ที่นี่ รู้สึกว่า iOSOpenDev เปลี่ยนเทมเพลต NIC บรรทัดคำสั่งให้เป็นแบบภาพ ที่จริงแล้วมันแทบจะไม่ยากเลย
การติดตั้งทำได้ง่ายมาก ดาวน์โหลดตัวติดตั้งและติดตั้ง
หลังจากการติดตั้งเสร็จสมบูรณ์ ให้สร้างโปรเจ็กต์ใหม่และ iOSOpenDev จะปรากฏในเทมเพลต iOS
ที่นี่เราเลือก Logos Tweak และการสร้างเสร็จสมบูรณ์ดังนี้
มีไฟล์ fakeloc.xm ซึ่งเป็นที่ที่เราต้องการเขียนโค้ด เปิดไฟล์ fakeloc.xm แล้วเราจะเห็นว่าโค้ดภายในนั้นสมบูรณ์โดยใช้โลโก้ สำหรับโลโก้ ซึ่งเป็นภาษาใหม่ คุณไม่ต้องกังวล ความสนใจ:
ไวยากรณ์พื้นฐานของโลโก้: %hook ระบุคลาสที่ต้องถูก hook โดยจะต้องลงท้ายด้วย %log เขียนข้อมูลฟังก์ชันไปยัง syslog เพื่อพิมพ์ข้อมูล .
fakeloc.xm สอดคล้องกับ fakeloc.mm
เราอยู่เหนือ
ดังที่คุณเห็นในการตั้งค่าบิลด์ มีคอลัมน์ที่ด้านล่างเรียกว่า User-Define นี่คือส่วนที่กำหนดเองของเรา ในตำแหน่ง iOSOpenDevDevice ให้เขียนที่อยู่ IP ของอุปกรณ์ iOS ของเรา (ที่อยู่ LAN เช่น 192.168.1.103) หลักฐานก็คืออุปกรณ์ iOS ได้รับการติดตั้ง OpenSSH
ข้อผิดพลาดการรับรองความถูกต้อง ssh iosod sshkey -h 192.168.1.109
ตอนแรกฉันคิดว่าการสร้างแอปเจลเบรคจะต้องเขียนด้วยไวยากรณ์ของโลโก้ซึ่งทำให้ฉันกลัวแทบตาย การพัฒนาแอปเจลเบรก iOS นั้นเกือบจะเหมือนกับแอปทั่วไปทุกประการ
อันดับแรก เรายังคงสร้างโปรเจ็กต์ เช่นเดียวกับการสร้างโปรเจ็กต์ปกติ คุณยังสามารถใช้ CocoaPods เพื่อจัดการไลบรารีบุคคลที่สามของคุณได้
ขั้นแรกให้สร้างโปรเจ็กต์ใหม่ตามปกติ กำหนดค่าดังต่อไปนี้ จากนั้นเปลี่ยนการตั้งค่า Build
เพิ่ม Run Script และลบการควบคุมออกจากทรัพยากรชุดการคัดลอก
โครงสร้างโดยรวมของโครงการ
สร้างสำหรับผู้ดำเนินการสร้างโปรไฟล์
หลังจากสร้าง App และ Tweak แล้ว เราจะเรียก Tweak ใน App ของเราได้อย่างไร คำตอบคือใช้ dlopen
void *handle = dlopen(TWEAK_PATH, RTLD_LAZY); //TWEAK_PATH 是dylib 的地址
if (handle) {
NSLog(@"handle");
if (0 != dlclose(handle)) {
printf("dlclose failed! %sn", dlerror());
}else {
}
} else {
NSLog(@"nohandle");
printf("dlopen failed! %sn", dlerror());
}
จากนั้นรับคลาสแบบกำหนดเองที่เกี่ยวข้องแบบไดนามิก
คลาส TweakBridge = NSClassFromString(@"TweakBridge");
ในตอนแรกฉันรู้สึกงุนงงกับปัญหานี้ และในที่สุดก็นำวิธีที่เสถียรและง่ายที่สุดมาใช้ นั่นคือการอ่านและเขียนข้อมูลลงในไฟล์เดียวกัน แต่ในตอนแรกฉันใส่ไฟล์ไว้ใน /var/mobile/xxx.plist แต่ tweak ไม่สามารถอ่านค่าได้ เหตุผลก็คือ tweak และ App ของเรามีสิทธิ์ที่แตกต่างกัน ดังนั้นเราจึงต้องหาที่ที่มันสามารถทำได้ เขียนแบบสาธารณะ สถานที่นี้คือ **/var/mobile/Library/Preferences/ ** ดังนั้นการโต้ตอบข้อมูลแอปและปรับแต่งของเราจึงใช้วิธีการเขียนวิธีหนึ่งและวิธีการอ่านอื่นเพื่อให้บรรลุวัตถุประสงค์ของการส่งข้อมูล หากคุณมีวิธีที่ดีกว่าและมากขึ้น วิธีตรงก็เสนอได้นะครับ
ดังนั้นรหัสสุดท้ายคือ:
- (void)setLocWithLat:(double)lat andLng:(double)lng {
NSLog(@"set lat & lng is %f &&&& %f", lat, lng);
Class TweakBridge = NSClassFromString(@"TweakBridge");
void *handle = dlopen(TWEAK_PATH, RTLD_LAZY);
if (handle) {
NSLog(@"handle");
TweakBridge = NSClassFromString(@"TweakBridge");
NSDictionary *dict = @{@"lat":[NSNumber numberWithDouble:lat], @"long":[NSNumber numberWithDouble:lng]};
BOOL isSuccess = [dict writeToFile:LOCATION_PATH atomically:YES];
NSLog(@"isSuccess, %d", isSuccess);
CLLocation *location = [[TweakBridge shareInstance] getCoreLocation];
if (0 != dlclose(handle)) {
printf("dlclose failed! %sn", dlerror());
}else {
}
} else {
NSLog(@"nohandle");
printf("dlopen failed! %sn", dlerror());
}
}
แล้วเราจะรวม Tweak เข้ากับ App ของเราเพื่อให้ผู้ใช้สามารถใช้งานโดยตรงหลังการติดตั้งได้อย่างไร เมื่อพิจารณาจากรูปแบบ deb ที่เรากล่าวถึงข้างต้น วิธีการและโครงสร้างการบรรจุจะเหมือนกับ zip และสามารถติดตั้งได้โดยระบบ iOS เราได้อธิบายรูปแบบและโครงสร้างแพ็คเกจข้างต้นแล้ว ในตอนนี้คือวิธีสร้างแพ็คเกจ Deb
เรานำไดเร็กทอรีที่สร้างขึ้นของ dylib และแอปออกตามลำดับ
ใส่ทั้งหมดลงในไดเร็กทอรี Package แยกกัน โครงสร้างไดเร็กทอรีสุดท้ายจะเป็นดังนี้:
เราจัดเรียงไฟล์ทั้งหมดตามโครงสร้างไดเร็กทอรีที่ Deb จัดเรียงตามลำดับชั้นที่แสดงด้านล่าง จากนั้นใช้วิธี dpkg-deb เพื่อจัดทำแพ็กเกจ โปรดทราบว่าวิธีที่ดีที่สุดคือไม่มีไฟล์ .DS_Store ใน deb สคริปต์ต่อไปนี้เพื่อลบออก สร้างไฟล์ Deb ในเวลาเดียวกัน
#!/bin/bash
find ./Package -name ".DS_Store" -depth -exec rm {} ;
dpkg-deb -Zgzip -b Package fakeLoc.deb
แพ็คเกจการติดตั้งที่สร้างขึ้นมีดังนี้ จากนั้นเราจะสแกนมันลงในอุปกรณ์
เราใช้ iFunbox เพื่อลาก fakeLoc .deb ที่สร้างขึ้นไปยังไดเร็กทอรีราก จากนั้นเปิด iFile บนโทรศัพท์และคลิก fakeLoc.deb เพื่อติดตั้งโปรแกรม หลังจากติดตั้ง เราจะติดตั้ง AppSync ใหม่และรีสตาร์ทโทรศัพท์ จากนั้นเราก็สามารถเปิดแอปของเราได้ และยังพบว่า App ของเราไม่สามารถถอนการติดตั้งได้โดยการกดค้างเอาไว้ เช่นเดียวกับแอปพลิเคชันระบบ Cydia เป็นต้น ทั้งนี้น่าจะเป็นเพราะว่าเราติดตั้งไว้ภายใต้ /Applications หากต้องการถอนการติดตั้ง เราสามารถใช้บรรทัดคำสั่งเพื่อลบออกได้ หรือ ใช้ไซเดีย
หลังจากการติดตั้งเสร็จสิ้น เพียงรีสตาร์ทอุปกรณ์
เปิดแอป ให้เราป้อนความแม่นยำและละติจูด จากนั้นดำเนินการ สุดท้าย เปิด WeChat People Near เพื่อดูว่าผู้คนใกล้เคียงเปลี่ยนไปหรือไม่ หากเราทำได้ดีขึ้น ให้เลือกละติจูดที่แม่นยำบนแผนที่ และปล่อยให้ฟังก์ชันหลักของเรา คำอธิบายสิ้นสุดที่นี่
เราสามารถเลือกสถานที่ที่แตกต่างกันในตัวเลือกที่อยู่แผนที่สำหรับการทดสอบ
จะเห็นได้ว่าคนส่วนใหญ่มาจากปักกิ่ง
จำลองผู้คนใกล้เคียงบน WeChat ได้สำเร็จ
สิ่งนี้ไม่เหมือนกับการเผยแพร่บน AppStore ก่อนอื่นคุณต้องมีแหล่งที่มาของโฮสติ้ง หากคุณไม่ต้องการสร้างมันขึ้นมาเอง คุณสามารถใช้ thebigboss.org/hosting-repository-cydia/submit-your-app
กรอกข้อมูลที่เกี่ยวข้อง สิ่งเหล่านี้จะไม่ถูกอธิบายอีก
บทความนี้เป็นการแนะนำหัวข้อนี้ ฉันหวังว่าคุณจะมีความเข้าใจเบื้องต้นเกี่ยวกับการเจลเบรก iOS สามารถใช้งานแอปของคุณเองให้เสร็จสมบูรณ์ และพัฒนา Tweaks ที่สนุกสนานยิ่งขึ้นได้ เช่น ปลั๊กอินสำหรับจับอั่งเปาบน WeChat ดูเหมือนว่าจะนำไปใช้ได้ไม่ยาก
ที่อยู่โครงการ: https://github.com/jackrex/FakeWeChatLoc
重新安装下AppSync 并重启SpringBoard
由于iOS7之后引入一些新的类库等,在iOS6设备上的兼容性一般,所以在工程的framework 中把 require 改为 option
root密码文件存放地方: / etc / master . passwd
用iFile的文本编辑功能打开master . passwd ,更改之前记得权限
你会找到类似这样的一行字符—— root : UlD3amElwHEpc : 0 : 0 :: 0 : 0 : System
UlD3amElwHEpc就是加密过的密码
把它更替为ab3z4hnHA5WdU ,这是对应的密码就是abc123 。
保存,重启。
有了密码abc123你就可以进一步修改成其它的密码了