วิธีการแกะดูข้อมูลที่ส่งในแอพไทยชนะ

Artiya
3 min readMay 30, 2020

--

หลังจากที่ผมเล่าว่าแอพไทยชนะส่งข้อมูลเราอะไรออกไปแล้ว ผมก็จะเล่าวิธีการแกะแอพออกมา ว่าจะทำการ Man In The Middle (MITM) แอพไทยชนะนั้น มีขั้นตอนการทำอย่างไร ค่อนข้างเทคนิคนิดนึง แต่ก็ไม่ยากนัก สามารถประยุกต์ใช้กับแอพอื่นได้เช่นกัน

การเตรียมแอพให้ Man In The Middle ได้

ในขั้นตอนนี้เราจะทำการเตรียมแอพให้พร้อมสำหรับการ MITM โดยจะทำการเปิดให้แอพใช้ Certificate ที่ติดตั้งจากผู้ใช้เองได้เพื่อให้ใช้ของพร็อกซี่ที่เราจะให้ข้อมูลวิ่งผ่านแล้วเอาข้อมูลมาดูกัน และปิดการทำงานการล็อค certificate ที่แอพบังคับให้คุยกับเซิร์ฟเวอร์ผ่าน certificate ที่กำหนดไว้เท่านั้น

1. ดาวน์โหลดไฟล์ APK ของแอพไทยชนะจากการหาด้วย Google นี่แหละครับ โดยสังเกตชื่อ package จากหน้า Play Store นี่แหละ ในที่นี้คือ com.ktb.thaichana.prod เอาไปค้นหาใน Google ในที่นี้เจอในเว็บ APK Pure ดาวน์โหลดลงมาเก็บจะได้ไฟล์ .apkx

2. แตกไฟล์ .apkx จะได้โฟลเดอร์ที่มีไฟล์ .apk หลายไฟล์ ที่สนใจได้แก่ com.ktb.thaichana.prod.apk
config.arm64_v8a.apk
config.en.apk

3. ติดตั้งโปรแกรม APKtool ตามวิธีการในเว็บไชต์

4. รันโปรแกรม Apktool เพื่อ decompile ไฟล์ APK แต่ละไฟล์ จะได้โฟลเดอร์ชื่อเหมือนไฟล์ทั้งสามไฟล์ออกมา

apktool d com.ktb.thaichana.prod.apk -f
apktool d config.arm64_v8a.apk -f
apktool d config.en.apk -f

5. เข้าไปที่โฟลเดอร์แรก com.ktb.thaichana.prod และเพิ่มไฟล์ res/xml/network_security_config.xml โดยข้อมูลในไฟล์มีเนื้อหาดังนี้

<network-security-config>
<base-config>
<trust-anchors>
<certificates src="system" />
<certificates src="user" />
</trust-anchors>
</base-config>
</network-security-config>

ไฟล์นี้จะทำให้แอพสามารถใช้งาน certificate ที่ติดตั้งโดยผู้ใช้เองได้

6. เข้าไปแก้ไขไฟล์ AndroidManifest.xml ตรงแท็ก <application เพิ่มบรรทัดนี้

android:networkSecurityConfig="@xml/network_security_config"

และแก้ตรง android:extractNativeLibs ให้เป็น true

7. แก้ไฟล์ assets/index.android.bundle ค้นหาคำว่า sslPinning ใส่ disableAllSecurity: true, ก่อนหน้า sslPinning เพื่อทำการยกเลิกการล็อกไม่ให้ใช้ Certificate อื่นในแอพ

8. ทำการแพคไฟล์ APK ใหม่โดยเข้าไปเพ็คที่แต่ละโฟลเดอร์ดังนี้

cd com.ktb.thaichana.prod
apktool b -f
cd ../config.arm64_v8a
apktool b -f
cd ../config.en
apktool b -f

ไฟล์ apk ใหม่ที่ได้ทั้งหมดจะอยู่ในโฟลเดอร์ dist

9. ทำการย้ายไฟล์ apk ที่สร้างมาใหม่ทั้งหมดไปไว้ในโฟลเดอร์เดียว ในทีนี้จะตั้งว่า apk_all

mkdir apk_all
mv com.ktb.thaichana.prod/dist/com.ktb.thaichana.prod.apk apk_all
mv config.arm64_v8a/dist/config.arm64_v8a.apk apk_all
mv config.en/dist/config.en.apk apk_all

10. ทำการสร้างคีย์เพื่อการ sign แอพใหม่ ตอบอะไรไปก็ได้ครับ

cd apk_allkeytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000

11. ทำการ sign ไฟล์ apk ทุกไฟล์ใน apk_all ด้วย jarsigner ที่ได้จากการติดตั้ง JDK อยู่แล้ว ถ้าไม่มีก็ไปหา JDK มาลงก่อน

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore com.ktb.thaichana.prod.apk alias_namejarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore config.arm64_v8a.apk alias_namejarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore config.en.apk alias_name

12. ติดตั้ง Android sdk และตั้งค่าให้สามารถเรียกใช้งาน adb ได้

13. เสียบสาย USB ไปยังมือถือและเปิด Developer Mode ให้เรียบร้อย ลบแอพไทยชนะออกก่อนถ้าติดตั้งอยู่แล้ว

14. ติดตั้งไฟล์ apk ทั้งหมดด้วยคำสั่ง

adb install-multiple com.ktb.thaichana.prod.apk config.arm64_v8a.apk config.en.apk

14 เปิดดูว่าแอพเปิดใช้งานได้หรือเปล่า ถ้าทำงานได้เป็นอันเสร็จขั้นตอนการเตรียมแอพให้ Man in the middle ได้

ขั้นตอนการ Man in the middle

1. ติดตั้งโปรแกรม mitmproxy มาติดตั้งในคอม โหลดได้ที่ https://mitmproxy.org/

2. เปิดโปรแกรม mitmproxy ในที่นี้ผมจะใช้เว็บ mitmweb เพราะเข้าดูข้อมูลได้จากหน้าเว็บที่ http://127.0.0.1:8081/

3. เข้าไปตั้งค่าเว็บ proxy ได้ที่ WiFi ในมือถือแอนดรอยด์ที่ลงแอพ โดยตั้ง IP ไปที่เครื่องคอมเรา port 8080

4. เปิดเว็บบราวเซอร์ในมือถือไปที่เว็บ mitm.it และกดดาวน์โหลด certificate ไฟล์และติดตั้งลงมือถือ

5. เปิดแอพไทยชนะใช้งานตามปกติ ถ้าใช้แอพค้างให้ไปทำขั้นตอน 7 ของการเตรียมแอพให้ดีๆ แล้วแพคแอพใหม่และติดตั้งแอพใหม่ทั้งหมด

6. เราก็จะเห็นข้อมูลที่ส่งผ่านในแอพแล้ว

ข้อมูลที่ส่งในแอพและเห็นบน mitmproxy

ขั้นตอนการดู Source Code ทั้งหมดของแอพ

เราได้เห็นข้อมูลทั้งหมดที่ส่งในแอพแล้ว แต่บางครั้งเราอาจจะไม่ได้ใช้งานครบทั้งหมดทุกฟังก์ชั่นหรือมีบางฟังก์ชั่นที่อาจจะซ่อนอยู่แล้วทำงานบางเวลาเท่านั้น ถ้าเราอยากรู้ทั้งหมดเราก็จะมาดูที่ source code ของแอพกัน เนื่องจากว่าแอพไทยชนะพัฒนาด้วย React-native ที่เป็นเฟรมเวิร์คที่ช่วยให้นักพัฒนาสามารถพัฒนาแอพได้ทั้งแอนดรอยด์และไอโอเอสพร้อมๆ กัน โดยจะเขียนโค้ดทุกอย่างเป็นภาษา JavaScript แค่ทีเดียวและเวลาทำงานมันก็จะไปเรียกโค้ดของแต่ละระบบปฏิบัติการมาทำงานของใครของมัน เนื่องจากภาษา JavaScript มันเป็นภาษาที่ไม่ต้องคอมไฟล์เพื่อแปลงโค้ดให้เป็นภาษาเครื่องไว้ก่อน ทำให้เราอ่านโค้ดมันออกได้โดยง่าย วิธีการมีดังนี้

  1. สร้างไฟล์ index.html มาง่ายๆ ดังนี้
<!DOCTYPE html>
<html>
<head>
<title>Show App JavaScript</title>
<script src="index.js"></script>
</head>
<body>
<h1>Display App source code</h1>
<p>Inspect This Page</p>
<p>Go to tab 'Source'</p>
<p>Select file index.js</p>
<p>Click "Pretty-print" button</p>
</body>
</html>

2. ก๊อปปี้ไฟล์ assets/index.android.bundle มาแล้วเปลี่ยนชื่อเป็น index.js

3. เปิดไฟล์ index.html ด้วย Google Chrome

4. เปิดหน้าต่าง Inspect หน้าเว็บ index.html และไปที่แท็บ Sources และเลือกไฟล์ index.js

5. กดปุ่ม Pretty-print เพื่อจัดระเบียบโค้ดให้อ่านง่ายๆ

6. ลองค้นหาในโค้ดตามสิ่งที่สนใจ อย่างเช่น API_URL สามารถไล่ไปดูได้ว่าแอพคอนฟิกอะไรไว้เป็นต้น

7. สามารถแก้และทำการแพ็คแอพใหม่ลองตามขั้นตอนแรกได้เลย

สรุป การแกะแอพไทยชนะนั้นไม่ได้ยากมากนัก ในอนาคตเราก็สามารถเอาความรู้นี้ไปประยุกต์ใช้กับแอพอื่นที่น่าสงสัยว่าจะเก็บข้อมูลอะไรเราไปหรือเปล่าโดยไม่ต้องมานั่งเดาเอาจาก permission หรือเชื่อจากผู้เชี่ยวชาญทางไอทีที่อาจจะไม่ได้เอาแอพมานั่งวิเคราะห์จริงๆ ก็ได้

--

--

Artiya
Artiya

No responses yet