แกะแอพไทยชนะว่าเขาเก็บข้อมูลอะไรเราไปบ้าง

Artiya
3 min readMay 28, 2020

--

เนื่องจากว่าไทยชนะที่ออกมาเป็นเว็บจาก QR Code นั้นมีข้อจำกัดอยู่เช่น ต้องกรอกเบอร์ใหม่ทุกครั้งถ้าเซสชั่นหลุด กรอกเบอร์มั่วอะไรก็ได้ แต่ทางผู้พัฒนาไม่ได้นิ่งนอนใจ ได้พัฒนาแอพสำหรับสมาร์ทโฟนมาให้ใช้งาน ในฐานะที่ผมเป็นแฮกเกอร์โนเนมฐานะยากจน ในการพัฒนาแอพพลิเคชันจากรัฐบาลก็ไม่ค่อยน่าไว้ใจเท่าไหร่ว่าแอพจะเก็บข้อมูลอะไรเราไป แต่ก็พอเข้าใจได้ว่าถ้าพัฒนาด้วย react-native มันจะของ permission ต่างๆ มากมายไว้ก่อน ใช้ไม่ใช้ก็อีกเรื่องนึง จึงจะลองแกะข้อมูลที่แอพไทยชนะส่งไปเก็บดูว่ามีอะไรน่าเป็นห่วงบ้าง

ผมได้เอาไฟล์ APK มาจากเว็บไซต์นึง ซึ่งไม่ใช่ไฟล์เดียว เอามาแก้โปรแกรมใหม่เพื่อให้สามารถทำ Man in the middle ได้ ไม่ว่าจะเป็นการปลด SSL Pining เปิดให้ใช้ Certificate ปลอมเพื่อให้วิ่งผ่าน Proxy ได้เห็นข้อมูลข้างใน รายละเอียดวิธีการทำนั้นเดี๋ยวผมจะเล่าในโอกาสถัดไป ตอนนี้มาดูก่อนว่า แอพไทยชนะ เก็บข้อมูลอะไรเราไปบ้าง

1 มีการไปถามแอพ version ที่ https://api.thaichana.com/get-appversion เอาไว้ตรวจสอบถ้ามีแอพเวอร์ชั่นใหม่ แต่ไม่ได้ส่งข้อมูลอะไรเราออกไป มีเลขเวอร์ชั่นของแต่ละแพลตฟอร์ม

2 มีการตรวจสอบว่าเราซ้ำหรือเปล่าไปที่ https://api.thaichana.com/check-mobile-dup โดยจะส่งหมายเลขอุปกรณ์และเบอร์โทรศัพท์เราออกไป แล้วระบบก็จะตอบกลับมาว่าเป็นคนใหม่หรือเปล่า

3 ส่งไปขอ OTP ที่ https://api.thaichana.com/request-otp โดยส่งเบอร์โทรศัพท์เราอย่างเดียว ตอบกลับมาเป็น เวลาที่ OTP หมดอายุและรหัสอ้างอิง

4 เอา OTP ที่เราเอามาจาก SMS ไปกรอกไปเชคว่าถูกต้องหรือเปล่าที่ https://api.thaichana.com/confirm-otp ส่ง เบอร์โทรศัพท์ OTP และรหัสอ้างอิง OTP ตอบกลับมาเป็น Token ของ OTP

5 สร้างข้อมูลผู้ใช้ไปที่ https://api.thaichana.com/create-customer-info โดยข้อมูลที่ส่งไปได้แก่ AppID, ยี่ห้อของโทรศัพท์มือถือ, รุ่นของโทรศัพท์มือถือ, Token ของ OTP, หมายเลขอุปกรณ์, ระบบปฏิบัติการ , รูทเครื่องหรือเปล่า , เบอร์โทรศัพท์, และเวอร์ชั่นของระบบปฏิบัติการ ตอบกลับมาเป็น appUserId อย่างเดียว

6 มีการเก็บว่าผู้ใช้ยอมรับข้อตกลงการใช้งานเวอร์ชันไหน ในกรณีที่เป็นผู้ใช้ใหม่ ส่งไปที่ https://api.thaichana.com/stamptermbyuser ข้อมูลที่ส่งได้แก่ appUserId กับ เลขเวอร์ชั่นข้อตกลงที่เรายอมรับ

7 เอา appUserId ไปขอ token ที่ใช้เชคอินจริงๆ ที่ https://api.thaichana.com/token ส่งไปแค่ appUserId ตอบกลับมาเป็น JWT token ที่ใช้ check in ได้ มีข้อมูลข้างในเป็น id, issuerAppId, เวลาที่สร้าง Token และ เวลาที่ Token หมดอายุ

8 พอผลสแกน QR Code แล้วแอพก็จะเปิดหน้าเชคอินเลยโดยใช้ JWT token จากที่ได้ในขั้นตอนก่อนหน้า กับเลขร้านค้าที่ได้จากการสแกน QR Code ไปที่ https://qr.thaichana.com/callback?appId=0001&shopId=S0000106645&token=JWT_TOKEN&type=checkin

9 ในโค้ดหน้าเชคอินก็จะทำงานแบบเดิมคือไปยิงเชคอินที่ https://api-customer.thaichana.com/checkin?t=TIME_STAMP โดยจะส่งข้อมูล JWT token, หมายเลขร้านค้า, และเวลาที่เชคอินไป มีการเทรค Google Analytic ทุกๆ หน้าเว็บด้วย

10 ตอนเชคเอาท์ก็โหลดเว็บแล้วก็ไปที่ https://api-customer.thaichana.com/checkout?t=TIME_STAMP ส่งข้อมูลเหมือนตอนเชคอิน

11 ถ้าเราเชคเอาโดยทำแบบประเมิน ก็จะส่งผลการประเมินไปที่ https://api-customer.thaichana.com/rating?t=TIME_STAMP

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

นอกจากนี้ในโค้ดยังมีการเขียน https://api-customer.thaichana.com/log-device เอาไว้ แต่ในการใช้งานปกติไม่มีการเรียกใช้แต่อย่างใด เอาไว้ส่งข้อมูลรายละเอียดเครื่องเมื่อใช้งานบนเครื่องที่รูทเท่านั้น (root) ข้อมูลเครื่องที่ส่งไปก็เหมือนกับที่ส่งตอน create-customer เลย

ส่วนที่จะใช้งานตำแหน่ง GPS ก็คือการ ค้นหาร้าน นั่นเอง โดยแอพจะดึงตำแหน่งละติจูด ลองจิจูด ไปเปิดเว็บที่ https://merchant.thaichana.com/search?lat=13.7514584&lng=100.5788981&province=%E0%B9%83%E0%B8%81%E0%B8%A5%E0%B9%89%E0%B8%89%E0%B8%B1%E0%B8%99
เป็นอันว่าหมดแล้วการทำงานของแอพไทยชนะ

สรุป แอพไทยชนะไม่ได้มีการแอพดึงข้อมูลตำแหน่งตลอดเวลาอย่างที่ใครๆ หลายคนคิด ใช้งานได้สะดวกขึ้นกว่าเดิม แต่การให้เบอร์โทรศัพท์และข้อมูลโทรศัพท์เราแก่หน่วยงานไหนโดยที่เราไม่แน่ในว่าเขาจะเอาข้อมูลเหล่านี้ไปทำอะไรก็ไม่ควรอย่างยิ่ง ที่แน่ๆ รายละเอียดเกี่ยวกับโทรศัพท์มันไม่ได้ช่วยในการวิเคราะห์และป้องกันโรคโควิด19 ได้อย่างแน่นอน หรือว่าโควิด19 ติดได้จากสัญญาน 5G 555+

เพิ่มเติม

วิธีการแกะดูข้อมูลที่ส่งในแอพไทยชนะ
https://link.medium.com/muR55XRnU6

--

--

Artiya
Artiya

Responses (1)