Unix

Quick Unix Reference

เผอิญดูวีดีโอสาธิตการ Jailbreak iPad เห็นเขาเล่น Terminal พร้อมด้วยคำสั่ง !ตัวเลข ก็เลยเกิดอาการสงสัยว่ามีวิธีสั่งแบบนี้ด้วยเหรอก็เลยลองค้นดูก็พบกับ Quick Unix Reference อันนี้

มีที่น่าสนใจเช่นคำสั่ง history ที่เอาไว้แสดงว่าเคยพิมพ์อะไรใน Command บ้าง ถ้าจะล้างก็ใส่พารามิเตอร์ -c เข้าไป เกลี้ยงหายในพริบตา (เอาไว้ปิดงาน เวลาไม่อยากให้เขารู้ว่าสั่งอะไรไปในเครื่องเขาบ้าง)

หมวด ! นี่ก็มีที่น่าสนใจคือ !! เอาไว้อ้างถึงคำสั่งล่าสุดทั้งก้อน ถ้าลืม sudo ก็จับ sudo ไว้ข้างหน้าแล้วแล้วพ่วงท้ายด้วย !! หรือถ้าตกพารามิเตอร์บางอย่างก็นำหน้าด้วย !! แล้วต่อท้ายด้วยพารามิเตอร์ที่ต้องการ

ดู Symbol ใน executable ต่างๆ

เราเห็นเว็บข่าวลือแมคต่างประเทศมีการพูดคุยถึงฟังก์ชั่นซ่อนของโปรแกรมต่างๆ เช่น iTunes เราก็อยากรู้ว่าเขาทำอย่างไร สรุปก็คือเขาใช้วิธีตรวจหา Symbol ต้องสงสัยใน executable ของโปรแกรมที่สนใจ แล้วมันทำได้อย่างไรล่ะ?

ต้องเข้าใจก่อนว่าโปรแกรม executable ต่างๆ มันเป็น binary แต่แน่นอนว่าใน binary นี้ มันต้องมีอะไรที่เราพอจะแกะมาอ่านได้ วิธีพื้นๆ ที่เขาใช้กันคือ ใช้คำสั่ง strings ซึ่งคำสั่งนี้จะทำการสกัดเอา String ที่พอจะอ่านได้จาก binary ออกมาให้เราดูคำละบรรทัด

แต่ก็มันก็มีอีกส่วนที่เราอ่านไม่ออก (แต่คอมมันอ่านออก) นั่นก็คือ Symbol ซึ่งหลงเหลือจากการแปลงโปรแกรม ซึ่งส่วนนี้จะทำให้ได้เห็นชื่อตัวแปรหรือชื่อคลาสบ้าง คำสั่งที่ใช้เป็นอีกคำสั่งคือคำสั่ง nm พอสั่งปุ๊บก็จะเห็นเลยว่ามีชื่อตัวแปรอะไรน่าสนใจให้เราพอจะเดาได้ว่าโปรแกรมนี้มันใช้อะไร ทำอะไร (แต่ไม่รู้หรอกว่าทำงานอย่างไร เว้นแต่จะไปแกะดูคำสั่งในระดับ assembly)

ทำให้ iPhone แสดงค่าแบตเตอรี่ที่เหลือ

เกิดอาการมันเคี้ยว iPhone ของตัวเอง อยากให้มันแสดงว่า Battery ตอนนี้เหลืออยู่กี่เปอร์เซ็นต์แต่ไม่อยาก Jailbreak (เพราะยังทำไม่ได้)

จำได้ว่าเมื่อก่อน มีคนเคยทำ FakeCarrier กับ FakeTimeString โดยไม่ต้องทำการ Jailbreak แถมยังใช้โปรแกรมบนฝั่ง Mac ทำเสียด้วย ก็เลยลองค้นดูหลักการว่าเขาทำอย่างไร ผลก็คือจริงๆ เขาแค่แก้ไฟล์ com.apple.springboard.plist ที่จริงๆ แล้วไฟล์นี้อยู่ในเครื่องที่ใช้ Sync เจ้า iPhone นั่นแหละ แต่ปัญหาคือวิธีที่ iTunes ทำการ Backup ตัวข้อมูลในเครื่อง มันจะถูกเก็บเป็นไฟล์ที่เราอ่านชื่อไม่ออกจำนวนมากมาย (ก็คือทุกอย่างใน /var/mobile) แต่ตัวข้อมูลไม่ได้มีการดัดแปลงให้พิสดารแต่ประการใด!

ทีนี้ปัญหาก็คือ เออแล้วไฟล์ที่เราต้องการมันคือไฟล์ไหนล่ะ? Spotlight ช่วยได้ไหม? ไม่ได้ แล้วจะทำอย่างไรก็เลยลองค้นหาวิธีก็พบว่า ใช้แค่สองคำสั่งผสมกันคือ ใช้คำสั่ง find ในการวิ่งไปตามไฟล์ใน Folder ที่ต้องการผสมกับคำสั่ง grep ซึ่งใช้ในการค้นหา String ได้ดีอยู่แล้ว ทีนี้ก็ต้องไปดูว่าแล้ว com.apple.springboard.plist มีอะไรที่น่าสนใจพอจะให้เดาได้ว่าคือมัน ตอนแรกลองค้นหาคำว่า SB ก็เจอบานตะไทเลย เลยเปลี่ยนเป็นอะไรที่เจาะจงขึ้นเลยค้นคำว่า SBLanguageRestart ก็พบไฟล์ที่ต้องการ

find . -type f -name "*.mddata" -exec grep -il "SBLanguageRestart" {} \;

เสร็จแล้วก็จัดแจง ใช้ Property List Editor แก้ซะจนเรียบร้อย (น่าแปลกใจตรงที่ Apple ได้ใส่ค่า SBShowBatteryLevel มาให้แล้ว แต่กลับยังไม่มีช่องทางในการเปลี่ยนค่านี้ให้จากโปรแกรมในตัว iPhone) แล้วทำการ Restore เครื่องกลับ ปรากฏว่าเหมือนเดิม!

ก็เลยค้นต่อไปพบว่า จริงๆ แล้วเราต้องเพิ่ม SBShowBatteryPercentage เข้าไปอีกอัน ก็เลยทำใหม่อีกรอบ จัดการ Restore ก็ยังใช้ไม่ได้ อะไรของมันหว่า? (หรือมัน Restore ลงไปยังที่ที่มันไม่ควรอยู่?)

ประหลาดใจตรงที่ iPhone Simulator ใส่แค่ SBShowBatteryLevel มันก็ใช้ได้แล้วนะ ทำไมเครื่องจริงต้องใส่เพิ่มเข้าไปอีกอัน?

มีคนพูดถึงเรื่องนี้ไว้ด้วยแฮะ ทำไปคนละทิศคนละทางเลย!

Syndicate content