ทดลองโกงเกมใน android ด้วยการแก้ไข Shared Preferences แบบไม่ต้อง Root เครื่องกัน
สวัสดีครับ ผมคมเดช ในวันนี้ผมก็กลับเข้ามาเขียนบล็อกอีกครั้งหนึ่งหลังจากห่างหายไปเป็นเวลานาน ต้องบอกก่อนนะครับว่าเวลาว่างส่วนใหญ่ในชีวิตของผมจะหมดไปกับการเล่นเกมมือถือซะส่วนมาก แล้วจะชอบเล่นเกมที่เป็นเกมออฟไลน์ฆ่าเวลา เช่น เกมยิงเป้า เกมตัวต่อ เกม Puzzle ต่าง ๆ หลายคนที่เคยเล่นเกมพวกนี้คงจะรู้สึกหงุดหงิดหัวร้อน เมื่อเล่นไม่ผ่านเป็นเวลานาน ๆ ผมก็เป็นหนึ่งในนั้นเช่นกันครับ 55++ ดังนั้นจึงเป็นที่มาของบทความวันนี้นี้ คือการเข้าแก้ไขฐานข้อมูลในเกมเหล่านี้เพื่อปลดล็อคความสามารถต่าง ๆ ครับ
เปิดปกติเกม Android ที่สามารถเล่นออฟไลน์ได้นั้นจะมีฐานข้อมูลเก็บไว้ในตัวแอพพลิเคชั่นซึ่งถ้าเขียนดี ๆ หน่อยก็จะเก็บไว้ในฐานข้อมูลที่เป็น sqlite หรือวิธีที่ง่ายกว่านั้นก็คือเก็บไว้ในไฟล์ xml ที่มีชื่อว่า Shared preference ดังนั้นถ้าเราเข้าถึงไฟล์เหล่านี้ได้ เราก็จะแก้ไขค่าในแอพพลิเคชั่นได้ เช่นค่าเงินค่า ค่า Level การปลดล็อคต่าง ๆ แต่ว่า เนื่องจากไฟล์นี้เป็นไฟล์ของระบบเราจะไม่สามารถเข้าไปแก้ไขได้ง่าย ๆ นอกจากเราจะได้รับสิทธิ์เป็น Root แก้ไขทุกไฟล์ในเครื่องได้ ซึ่งแน่นอนว่าการรูทเครื่องนั้นทำให้โทรศัพท์มือถือหมดประกัน และมีความเสี่ยงที่จะโดนโจมตีจากมัลแวร์ ไวรัส การขโมยข้อมูล รวมถึง แอพพลิเคชั่นบางอย่าง เช่น แอพธนาคาร จะไม่สามารถใช้ได้ในเครื่องที่มีการรูทได้ แน่นอนว่าบทความนี้ผมไม่ได้จะพามา root เครื่องครับ
วิธีที่ผมจะใช้วันนี้เป็นการ Backup and Restore ซึ่งวิธีนี้ไม่จำเป็นต้องรูทเครื่องแต่จะสามารถใช้ได้เฉพาะแอพพลิเคชั่นที่มีการอนุญาตให้ Backup ข้อมูลเท่านั้น ซึ่งส่วนใหญ่เกมในท้องตลาดก็มีฟังก์ชันนี้อยู่แล้ว Concept ง่าย ๆ ก็คือ เราจะใช้ adb เข้าไป Backup ข้อมูลในแอพพลิเคชั่นแล้วดาวน์โหลดไฟล์นั้นออกมา จากนั้นเราจะใช้เครื่องมือตัวนึงทำการถอดรหัสและแตกไฟล์นี้ออกมาแก้ไขแล้วทำการซิปไฟล์นี้ Restore กลับไปยังเครื่องโทรศัพท์เหมือนเดิม ซึ่งวิธีนี้ค่อนข้างปลอดภัยและไม่ทำให้แอพพลิเคชั่นพังด้วย (ถ้าคุณเก็บต้นฉบับของ Backup ไว้นะ)
ก่อนจะเริ่มต้องทำการเตรียมเครื่องมือที่จำเป็นก่อน ก็คือ
1โทรศัพท์มือถือ Android เครื่องที่ผมใช้นั้นจะเป็น Android 10 ซึ่งเวอร์ชั่นเก่ากว่านี้ก็น่าจะสามารถใช้งานได้ โดยจะต้อง “เปิดโหมดผู้พัฒนา” เสียก่อน ซึ่งหาวิธีได้จาก google ครับ
2Android Debug Bridge (adb) เครื่องมือตัวนี้จะเป็นโปรแกรมที่คอยเชื่อมต่อกับโทรศัพท์มือถือของเรา เช่น การดาวน์โหลดไฟล์ ทำการ Backup ข้อมูล ทำการติดตั้งแอพพลิเคชั่น เป็นต้น โดยสามารถหาโหลดได้จากจาก google เช่นเคย (ลองค้นว่า adb minimal)
3โปรแกรม Java ที่มีชื่อว่า Android Backup extractor (abe) โปรแกรมนี้จะมีหน้าที่ในการแตกไฟล์ Backup จาก Application เพื่อให้เราสามารถแก้ไขได้ (เครื่องที่จะรันไฟล์นี้ได้ต้องทำการลง Java Runtime ก่อน) โหลดได้จาก https://github.com/nelenkov/android-backup-extractor (ใน release นะ)
4Ubuntu OS เนื่องจากคำสั่งในการแตกไฟล์และรวมไฟล์จะมีการใช้คำสั่งจาก Ubuntu เป็นส่วนใหญ่ ดังนั้นจึงจำเป็นที่ต้องใช้ Ubuntu ร่วมด้วย ซึ่งผมแนะนำเป็น Windows Ubuntu Subsystem ครับ ลงใน windows ใช้สะดวกมาก ๆ ไม่ต้องสลับเครื่อง
สำหรับแอปพลิเคชันที่ผมจะนำมาเป็นตัวอย่างในวันนี้ จะเป็นเกมที่มีชื่อว่า Dust Settle เกมนี้สามารถเล่นออฟไลน์ได้ โดยเราจะแก้ไขปัจจัยหลักในเกมนี้ก็คือเงินและเพชรนั่นเอง นี่คือภาพก่อนจะมีการแก้ไขครับ เงิน 1.2K, energy 60, เพชรเป็น 0
สำหรับขั้นตอนในการทำมีดังนี้
1ก่อนที่เราจะเริ่มลงมือนั้นเราต้องรู้ก่อนว่าแอปพลิเคชันของเรานั้นชื่อ Package ว่าอะไร วิธีในการหาชื่อ Package ของแอปพลิเคชันก็คือเข้าไปที่ Google Play Store จากนั้นค้นหาชื่อแอพพลิเคชั่นที่ต้องการแล้วกดเข้าไป จะพบว่าใน URL ของแอปพลิเคชันนั้นจะมี ID ของชื่อของ Package อยู่ ให้เราเก็บค่านี้ไว้เพื่อใช้ในคำสั่งต่อไป ในตัวอย่างภาพจะเห็นว่าเกมที่ผมจะทำการแก้ไขนั้นจะมี Package name
ชื่อว่า : com.logame.eliminateintruder3d
2ในขั้นตอนต่อไปให้ทำการเชื่อมต่อโทรศัพท์มือถือ (ที่เปิดโหมดนักพัฒนาแล้วและเปิดใช้งานการแก้ไขข้อบกพร่อง USB แล้ว) เข้ากับคอมพิวเตอร์ ซึ่งเมื่อเปิด Command Line และใช้คำสั่ง adb devices ดูจะพบว่ามีรายการอุปกรณ์ที่เชื่อมต่อขึ้นมา (เครื่อง Android จะมี Pop Up ขึ้นมาให้ยอมรับการดีบักจากเครื่องคอมพิวเตอร์ก่อน)
คำสั่ง : adb devices -l
3ต่อไปเราจะใช้คำสั่ง adb backup เพื่อทำการสำรองข้อมูลในแอปพลิเคชัน ซึ่งคำสั่งนี้จะต้องใส่ชื่อไฟล์เก็บข้อมูล ตามตัวอย่างผมจะใส่เป็น backup.ab แล้วตามด้วยชื่อ Package ของแอพพลิเคชั่นที่จะ Backup โดยเราจะใช้ข้อมูลจากข้อที่ 1 ครับ
คำสั่ง : adb backup -f backup.ab com.logame.eliminateintruder3d
ในระหว่างนี้ในโทรศัพท์มือถือจะเด้ง Pop Up ขึ้นมาเพื่อทำการยืนยันการสำรองข้อมูลให้ทำการกดสำรองข้อมูลของฉันโดยไม่ต้องกรอกรหัสผ่านอะไรครับ
ผลลัพธ์จากคำสั่งนี้ในโฟลเดอร์ที่เรารันคำสั่ง ไปจะปรากฏไฟล์ชื่อ backup.ab ขึ้นมา และนี่คือไฟล์ข้อมูลในแอพพลิเคชั่นของเราทั้งหมด
4ให้ทำการดาวน์โหลดไฟล์ abe-all.jar แล้วนำไปใส่ไว้ในโฟลเดอร์เดียวกันกับไฟล์ backup.ab
5ใช้โปรแกรม abe-all.jar ทำการอันแพ็คข้อมูลออกมา (ต้องลง java ในเครื่องก่อนนะครับ) โดย
ใช้คำสั่ง : java -jar abe-all.jar unpack backup.ab backup.tar
และผลลัพท์จากคำสั่งนี้เราจได้ไฟล์ backup.tar โผล่ขึ้นมา
6ขั้นตอนต่อไปเราจะทำการแตกไฟล์ backup.tar ขั้นตอนนี้สำคัญมากเนื่องจากเราจำเป็นต้องคงโครงสร้างการเรียงลำดับชื่อไฟล์เอาไว้ให้เหมือนเดิมรวมไปถึง symbolic link ต่าง ๆ ด้วย ซึ่งแน่นอนว่าการกระทำเช่นนี้ได้เราต้องทำใน Ubuntu ผมจะใช้ Windows Ubuntu Subsystem มาใช้แตกไฟล์โดย
ใช้คำสั่ง : tar -xf backup.tar
จากนั้นทำการ list ชื่อไฟล์ทั้งหมดโดย
ใช้คำสั่ง : tar -tf backup.tar > files.list
ผลลัพธ์ที่ได้ในโฟลเดอร์ของเราจะปรากฏโฟลเดอร์ที่มีชื่อว่า apps ออกมาครับ
เมื่อเข้ามาในโฟลเดอร์นี้เรื่อย ๆ จะมีโฟลเดอร์ที่มีชื่อว่า sp ในนี้จะเก็บไฟล์ shared preference เอาไว้
7ไฟล์เหล่านี้จะเก็บข้อมูลในลักษณะของ xml text ไว้ ซึ่งเราสามารถแก้ไขโดยใช้ text editor ธรรมดาทั่วไปได้ แต่ว่าค่าเงินที่ต้องการจะแก้ไขอยู่ที่ไฟล์ไหนล่ะ เราสามารถไล่เปิดดูเช็คทุกไฟล์ได้ แต่ผมจะใช้ Sublime Text ค้นหาข้อความที่สำคัญใน folder นั้นแทน (ctrl + shift + f) เช่น คำว่า coin หรือ diamond ซึ่งก็พบว่ามีไฟล์ที่เก็บข้อมูล coin อยู่จริง ๆ ไฟล์นั้นชื่อว่า com.logame.eliminateintruder3d.v2.playerprefs.xml
จากนั้นก็ทำการแก้ไขค่าในไฟล์นี้ได้ตามใจชอบ
8เมื่อทำการแก้ไขจนหนำใจแล้ว เราจะทำการ pack โฟลเดอร์ apps กลับไปเป็น tar โดยต้องเรียงลำดับตามไฟล์ตามต้นฉบับด้วย วิธีการนี้ผม
ใช้คำสั่ง : cat files.list | pax -wd > edited.tar
จะพบไฟล์ที่มีชื่อว่า edited.tar โผล่ขึ้นมา
9ใช้โปรแกรม abe-all.jar แพ็ค edited.tar กลับไปเป็นไฟล์ของระบบ Backup ของ Android โดย
ใช้คำสั่ง : java -jar abe-all.jar pack edited.tar edited.ab
โดยจะมีไฟล์ edited.ab โผล่ขึ้นมา
ขั้นตอนสุดท้ายเราจะใช้ในการ Restore ไฟล์นี้กลับไปยังเครื่อง Android โดย
ใช้คำสั่ง : adb restore edited.ab
ในเครื่องโทรศัพท์จะปรากฏ popup ขึ้นมาเพื่อยืนยันการ Restore ข้อมูล ให้ทำการกดเลือก คืนค่าข้อมูลของฉัน โดยไม่ต้องกรอกรหัสผ่านแต่อย่างใด
================
เมื่อกลับมายังเกม ก็จะพบว่าเวทย์มนต์นั้นมีอยู่จริง 555 แค่นี้เป็นอันจบ เทคนิคนี้สามรถใช้ได้หลายเกมและหลาย ๆ โปรแกรมด้วยนะ ลองดูกันได้ แต่รับผิดชอบกันเองนะครับ 55 ได้ผลยังไงก็ลองเข้ามาพูดคุยกันได้ที่ fb.com/comdet