Sphero
เมื่อเร็วๆ นี้มีข่าวว่าผู้ใช้งาน iPhone ในเครือข่ายโทรศัพท์ dtac เมื่อนำเครื่องเชื่อมต่อกับ iTunes แล้วทำการ Check for Update จะมีการดาวน์โหลดไฟล์ตั้งค่าของเครือข่าย dtac เข้ามาในเครื่องคอมพิวเตอร์ของเรา แล้วจึงมีการติดตั้งไฟล์ดังกล่าวลงไปใน iPhone (เนื้อข่าว)
ซึ่งถ้าจำกันได้เรื่องนี้ก็เคยเกิดขึ้นกับผู้ใช้งานในเครือข่ายโทรศัพท์ truemove เหมือนกัน (เนื้อข่าว)
บังเอิญว่าประเทศไทยยังมึจำนวนผู้ให้บริการเครือข่ายโทรศัพท์เคลื่อนที่ไม่เยอะเท่าในต่างประเทศ (บางประเทศมีถึง 7 รายเลย) แถมตอนนี้ 2 ใน 3 ของผู้ให้บริการ (ไม่นับผู้ให้บริการที่ไม่จริงจังในการทำตลาดจนลูกค้าไม่รู้ว่ามีผู้ให้บริการรายนั้นนะ) ก็ได้รับการรับรองให้วางจำหน่าย iPhone จาก Apple (อย่างไม่เป็นทางการ) ไปแล้ว ตัวบทความนี้จึงอาจจะไม่ได้รับความสนใจกับผู้ใช้ทั่วไปเท่าไร แต่ก็อาจจะมีประโยชน์สำหรับผู้ใช้ที่จะเดินทางไปยังต่างประเทศในระยะเวลายาวๆ ที่จำเป็นต้องเปลี่ยนไปใช้บริการเครือข่ายโทรศัพท์เคลื่อนที่ในประเทศนั้น หรืออาจจะได้รับความสนใจกับผู้ใช้ที่อยากจะปรับแต่งการแสดงผลให้สวยงามหรือไม่พอใจกับค่าบางอย่างที่เครือข่ายโทรศัพท์กำหนดมาให้ (เช่น เพิ่มสิทธิ์ในการแก้ไขค่าการเชื่อมต่อเพื่อป้องกัน EDGE รั่วตามข่าวนี้) รวมถึงผู้ใช้ระดับองค์กรที่อยากจะเพิ่มค่าบางอย่างสำหรับองค์กรท่าน
ไม่ใช่เวทย์มนต์อะไรทั้งสิ้น กลไกของ Check for Update ทำหน้าที่สองอย่างคือ
ตัวอย่างจากเหตุการณ์จริง
Apple ใช้วิธีนี้ในการแพร่กระจายไฟล์ตั้งค่าเครือข่ายผู้ให้บริการที่เป็นพันธมิตรกับ Apple ซึ่งการใช้ไฟล์ตั้งค่าเครือข่ายนี้สะดวกกับผู้ใช้ เพราะไม่ต้องทำการกรอกค่าเกี่ยวกับ apn ของ cellular data/mms/internet tethering เอง และทำให้ผู้ให้บริการสามารถกำหนดค่าที่เหมาะสมสำหรับเรียกเก็บค่าบริการด้วย (ฮา)
จากจุดนี้ก็น่าจะเห็นข้อดีของมันแล้วว่ามันสะดวกกว่าการมาตั้งค่าเอง เพราะถ้าจำเป็นต้องเปลี่ยนซิมการ์ดของผู้ให้บริการต่างราย เราไม่จำเป็นต้องมาแก้ไขค่านี้เองเพราะตัว iPhone จะสลับค่าพวกนี้ให้เราโดยอัตโนมัติสำหรับผู้ให้บริการที่เป็นพันธมิตรกับ Apple
เข้าประเด็นกันเสียทีหลังจากหัวข้อแรกพาชมภาพรวมไปแล้ว ไฟล์ที่ iTunes โหลดมานี้มีนามสกุล .ipcc ซึ่งคิดว่าน่าจะย่อมาจาก iPhone Carrier Configuration (ต่อไปก็นำไปใช้กับ iPad ได้) จริงๆ มันเป็นเพียงแค่ไฟล์ ZIP ธรรมดานี่เอง ภายในมีโครงสร้างคือ มี Directory ชื่อ Payload
ซึ่งภายในจะมี Directory ย่อยชื่อ {ชื่อเครือข่าย}.bundle
ซึ่งภายในประกอบด้วยไฟล์แกนหลัก 2 ไฟล์คือ Info.plist
และ carrier.plist
ตัวที่น่าสนใจคือ carrier.plist
ไฟล์ plist เป็น xml รูปแบบหนึ่ง ที่มีโครงสร้างข้อมูลในลักษณะ key/value คือมีการกำหนด key ขึ้นเป็นชื่อใดๆ ตามด้วย value ของ key นั้นโดยการระบุชนิดของข้อมูลเป็น array, dictionary, boolean, data, date, number, หรือ string ซึ่งสามารถใช้ Text Editor ทั่วไปแก้ไขได้ แต่ถ้าไฟล์ plist ถูกจัดเก็บในรูปแบบบีบอัดเป็น binary ก็จำเป็นต้องแปลงกลับเป็น text ปกติจึงจะสามารถแก้ไขได้ บทความนี้จะไม่ลงรายละเอียดว่าแต่ละ key ใน carrier.plist
เป็นอะไรบ้าง แต่หวังว่าผู้ที่สนใจจะลองค้นคว้าเพิ่มเติมเพื่อทำการปรับแก้ไขให้เหมาะสมกับการใช้งานของท่าน
สำหรับเครื่องมือที่ใช้จัดการกับ plist ก็มีอยู่หลายตัว ถ้าเป็นรูปแบบของ Text Editor จะใช้อะไรแก้ก็ได้ แต่ถ้าเป็น Binary มา ตัวที่ฟรีและ Apple ให้มากับระบบคือโปรแกรม Property List Editor ซึ่งมาพร้อมกับชุดติดตั้ง XCode
ว่าแล้วเราก็ลองโหลด ipcc ของซักค่ายมาลองเปิดดูกัน สิ่งที่ Apple โม้เอาไว้ตาม HT1970
The carrier settings can include updates to the default APN (how iPhone accesses the carrier’s cellular data network), special dialing codes at Settings > Phone > [Carrier] Services, default settings for Stocks, Maps, Weather, and other items.
ตามที่ผมเคยเห็น ยังไม่เคยเห็นเรื่องเกี่ยวกับ Maps และ Weather นะ แต่ตัว Stocks นี่ดูได้จาก AT&T หรือ O2_UK ก็มีตัวอย่างการสร้างให้เห็นในส่วนของ StockSymboli
จากจุดนี้ก็ถือว่าน่าจะแก้อะไรได้เกือบทุกอย่างแล้ว แต่อย่างไรก็ตามคงต้องแยกค่า apn ไปพูดถึงในหัวข้อถัดไป สิ่งอื่นๆ นอกจากนั้นที่เราพอจะปรับแก้ไขได้ เช่น
AllowEDGEEditing
ให้ค่าเป็น boolean
MaxBluetoothModemConnections
ให้ค่าเป็น number
Services
SupportedSIMs
ShouldHideAllVoicemailUI
ให้ค่าเป็น boolean
StatusBarImages
ซึ่งหลักๆ จะมีไฟล์รูปสองไฟล์คือ ไฟล์สำหรับหน้าจอพื้นดำ (โปร่งใส) กับไฟล์สำหรับหน้าจอพื้นทึบ นอกจากนี้ยังสามารถเพิ่มโลโก้สำหรับผู้ให้บริการหลายๆ แบบในกรณีที่มีการแสดงชื่อเครือข่ายที่ต่างไปกับซิมที่ใช้ (เช่นอาจจะมีทั้งโลโก้ของ dtac และ happy อยู่ใน Carrier Configuration ไฟล์เดียวหากมีการตั้งข้อความที่จะแสดงบนเครือข่ายแยกกันไว้ ซึ่งผู้ให้บริการไม่ได้ทำเอาไว้)นี่ก็เป็นเพียงตัวอย่างเล็กๆ ที่พอจะแก้ไขได้ (ถ้าอยากจะทำอะไรมากกว่านี้คงต้องลองเปิดดู ipcc ของค่ายมือถืออื่นๆ เช่นของจีนที่แก้ให้ดูด sms ออกมาจากซิมเลย หรือตั้งให้สนทนาหลายสายได้มากที่สุดกี่สาย หรือตั้งให้ใช้เครื่อง internet tethering ได้พร้อมกันกี่เครื่อง) แต่ก็มีอีกส่วนที่ยังมีปัญหาในการแก้ไขคือ apns
ซึ่งเป็นจุดที่มีผลกับการใช้บริการเครือข่ายมากที่สุด
apns
ได้บ้าง?ถ้าเป็นเมื่อก่อนสมัยก่อนจะเป็น Firmware รุ่น 3.1 เราสามารถแก้ไขค่า apns ได้อย่างอิสระ (ไม่ขออธิบายว่าแก้อย่างไร ค่า type-mask
คืออะไร) แต่พอมาเป็น Firmware รุ่น 3.1 ทาง Apple ได้เพิ่ม key อุปสรรคขึ้นมา 1 อันคือ signature
ซึ่งจนปัจจุบันนี้ก็ยังไม่มีใครสามารถหาค่าของ key นี้ที่ถูกต้องได้ (ยกเว้น Apple) สำหรับค่า apns ของ cellular data และ mms นั้นไม่ได้มีความเข้มงวดในการตรวจสอบค่า signature ในระบบ iPhone เท่าใด ดังนั้นจึงไม่ค่อยเป็นปัญหาในการแก้ไข (แก้ไปอย่างไรก็ได้ ระบบจะไม่ปฏิเสธค่านั้น) แต่ส่วนของ internet tethering ซึ่งบางผู้ให้บริการไม่ได้อนุญาตให้ใช้งาน ตัวระบบจะตรวจสอบว่าค่า signature ที่ระบุไว้นี้ถูกต้องหรือไม่ หากไม่ถูกต้องก็จะไม่สามารถใช้งาน internet tethering ได้ รวมถึงไม่สามารถแก้ไขค่าดังกล่าวได้เองด้วย นี่จึงเป็นเหตุแห่งการโวยวายครั้งใหญ่ของผู้ใช้บริการในบางเครือข่ายที่ไม่สามารถทำ internet tethering บน iPhone ได้แต่กับโทรศัพท์มือถือรุ่นอื่นกลับทำได้ และเป็นปัญหากับผู้ใช้บริการเครือข่ายที่ไม่ได้เป็นพันธมิตรกับ Apple เพราะไม่สามารถกรอกค่า apn สำหรับส่วนนี้เองได้
ใน Firmware 3.1.3 ซึ่งมีผู้ค้นพบว่าขณะนี้ทาง Apple ยอมให้ผู้ใช้บริการในผู้ให้บริการที่ไม่ได้เป็นพันธมิตรกับทาง Apple สามารถกรอกค่า apn เพื่อการทำ internet tethering ได้เองแล้ว แต่เมื่อนำ ipcc ที่ทำเองไปใช้ก็ยังพบปัญหาเดิมคือไม่สามารถเปิดใช้งาน internet tethering ได้เพราะติดการตรวจสอบค่า signature เช่นเดิม
มีผู้ค้นพบว่าจริงๆ แล้ว กระบวนการตรวจสอบค่า signature นี้สามารถหลอกระบบได้ โดยตามความเข้าใจของผู้เขียนเข้าใจว่า ตัวระบบของ iPhone จะตรวจสอบ Carrier Configuration โดยดูว่าค่าประจำเครือข่ายบนซิมในขณะนั้น ต้องทำการตรวจสอบค่าของ signature หรือไม่ (ซึ่งจริงๆ มันไม่ควรทำหากไม่ได้ใช้งาน Unknown Carrier แต่มันก็ยังทำ เราก็เลยใช้ช่องโหว่นี้เสียเลย) หากต้องทำการตรวจสอบแล้วพบว่าค่าของ signature ไม่ถูกต้องก็จะไม่ยอมให้ใช้งาน internet tethering นอกเหนือจากกรณีนั้นจะอนุญาตให้ใช้งาน จึงมีการนำช่องโหว่นี้มาใช้ ทำให้ไฟล์ ipcc ที่ไม่ได้ถูกสร้างจาก Apple (ไม่มีการตั้งค่า signature ที่ถูกต้อง) สามารถตั้งค่า internet tethering เพื่อใช้งานได้! (รู้สึกว่าหลังจากที่มีการ Jailbreak เพื่อไปแก้ระบบให้ไม่ต้องตรวจสอบ signature จะทำให้การใช้วิธีการที่กล่าวถึงนี้ไม่ค่อยเป็นที่แพร่หลาย แต่ก็เป็นประโยชน์สำหรับผู้ใช้ที่ไม่ต้องการ Jailbreak เครื่อง)
ขั้นตอนง่ายๆ คือให้ทำการคัดลอกส่วนของ MandatoryVerify
จาก Unknown
(ต้องมี Firmware ของ iPhone รุ่น 3.1.3 ที่ทำการถอดรหัสเรียบร้อยแล้วโดยอาจจะใช้ Firmware สำหรับ Custom Restore ที่ได้จาก PwnageTool ก็ได้) เหตุที่ต้องคัดลอกทั้งหมดเพราะ Apple ได้วางยาไว้อีกจุดหนึ่งคือ เราไม่สามารถแก้ไขค่าภายใน MandatoryVerify ได้ เนื่องจากในส่วนนี้มีการตรวจสอบ signature เช่นกัน เหตุที่ให้ใช้ของ Firmware 3.1.3 เนื่องจากน่าจะเป็น Firmware ที่มีรายชื่อของค่าซิมในแต่ละเครือข่ายที่น้อยที่สุดเท่าที่จะเป็นไปได้แล้ว (จากการตรวจสอบ Firmware ก่อนหน้า 3.1.3 ไม่มีข้อมูลส่วนนี้ให้ใช้งาน)
ข้อจำกัดสำหรับวิธีนี้คือ หากเราใช้บริการในเครือข่ายที่ถูกระบุอยู่ในส่วนของ MandatoryVerify แล้วเราจะไม่สามารถข้ามกระบวนการตรวจสอบ signature ได้ (กรณีนี้คือไฟล์ดังกล่าวจะมี truemove แล้วแต่ยังไม่มี dtac/AIS ดังนั้นเราจะเปลี่ยนค่า internet tethering ของ truemove ไม่ได้เพราะจะตรวจสอบ signature แล้วไม่ผ่าน แต่เราจะสามารถสร้าง ipcc ที่มี internet tethering ของ dtac/AIS ใช้เองได้ เพราะจะบังคับไม่ให้มันตรวจสอบ signature ได้)
ที่ผ่านมาทั้งหมดเป็นขั้นตอนการแก้ไข แต่จะนำกลับไปใช้งานใน iPhone ได้อย่างไร ขั้นนี้เราต้องทำการ zip ไฟล์กลับเป็น .ipcc เช่นเดิม โดยข้อควรระวังคือ เราต้องจัดรูปแบบโครงสร้าง Directory ให้เหมือนเดิมดังที่ได้อธิบายไปในตอนต้น และให้ลบไฟล์ซ่อนที่ไม่เกี่ยวข้องออกทั้งหมด
สำหรับผู้ที่ต้องการอ่านอ้างอิงในส่วนนี้ผมแนะนำให้อ่านบทความนี้ (เป็นภาษาอังกฤษ) ซึ่งจำเป็นต้องใช้ Terminal เข้ามาเกี่ยวข้องด้วย
สำหรับวิธีติดตั้งแบบไม่จำเป็นต้อง Jailbreak เครื่องได้ถูกเรียบเรียงไว้อย่างดีแล้วในข่าวเตือนระวัง EDGE รั่วหลังอัพเดท dtac carrier (อัพเดทวิธีแก้)
เขียนมาซะยาวเยิ่นเย้อขนาดนี้ มีประเด็นที่ไม่อยากให้สับสนประเด็นหนึ่ง คือ เราสามารถสร้าง ipcc หรือไปแก้ไข ipcc ของ Apple ได้ แต่ปัญหาที่เกิดขึ้นส่วนหนึ่งเกิดจากการที่ผู้ให้บริการไม่อยากให้ผู้ใช้เข้าไปแก้ไขค่าพวกนี้เอง จริงมีกระบวนการป้องกันการแก้ไขค่า ทั้งจากบนหน้าจอ iPhone เอง (ฝั่งผู้ให้บริการเป็นคนกำหนด) และฝั่ง Apple เอง (ฝั่ง signature ลงในบางส่วนของไฟล์ ipcc เพื่อตรวจสอบค่า หากไม่ตรงก็จะใช้งานไม่ได้ ซึ่งก็เพิ่งจะมีบังคับตรวจสอบเฉพาะแค่ค่าของ internet tethering เท่านั้น)
การแก้ไขตราสัญลักษณ์ของผู้ให้บริการ (บางคนอยากเห็นตราสัญลักษณ์ของผู้ให้บริการมากกว่าข้อความพื้นๆ ของ Apple) สามารถทำได้โดยไม่มีปัญหาใดเพราะเป็นการแก้ไขไฟล์รูปภายนอกซึ่งไม่มีการตรวจสอบ signature และก็ค่อนข้างทำได้ง่ายแม้จะทำบน Windows เพราะโปรแกรมจัดการไฟล์ zip หลายๆ ตัวมีความสามารถในการปรับปรุงไฟล์เดิมที่อยู่ใน zip ได้โดยไม่ต้องทำการขยายออกมาใหม่ ช่วยให้โครงสร้างของไฟล์ ipcc เดิมไม่เสียหาย ทำให้ยังสามารถนำมาใช้งานได้เช่นเดิม (ขั้นตอน/โครงสร้างไฟล์ อ้างอิงบทความภาษาอังกฤษข้างต้น)
หวังว่าบทความนี้จะช่วยให้ผู้ที่ต้องสร้างไฟล์ ipcc ใช้เองด้วยเหตุผลใดๆ ก็ตามสามารถสร้างได้อย่างที่ต้องการ