การป้องกันการ hack In-app Purchase by

29
Sep
1

ใครทำ app มาก็ย่อมที่จะไม่ต้องการให้ app ของเราโดน hack แหล่งหาเงินของเราอย่าง In-app purchase (ต่อไปนี้ขอเรียกสั้นๆ ว่า IAP) ไปได้ ในบทความนี้จะแนะนำ App ประเภทเกมเป็นหลัก ซึ่งหลักๆ การป้องกันการ hack จะแบ่งเป็นสองวิธีหลักๆ ดังนี้

1. ป้องกันที่ตัวมือถือ (Client) ซึ่งวิธีนี้อาจทำโดยเข้ารหัสตัวแปรไม่ให้ทำ Memory Hacking ได้ง่ายๆ หรือรวมไปถึงการตรวจสอบตามมาตรฐาน SDK ของทั้ง iOS และ Android ว่า Server ส่งค่ามาถูก ผ่านกระบวนการมาถูกหรือไม่ ซึ่งวิธีนี้อาจโดนแก้เกมได้ด้วยการสร้าง server จำลองขึ้นมาภายในตัวมือถือเองและหลอก app ว่ามันได้ติดต่อ server apple หรือ google จริงๆ แล้ว ทำให้ app เราไม่สามารถรู้ได้เลยว่าเรากำลังคุยกับ server ตัวจริงหรือไม่

2. ป้องกันที่การส่งข้อมูลระหว่าง Client กับ Server ให้มีการ encrypt ตัวแปรก่อนส่ง และ decrypt ตัวแปรออกมาเซพลงฐานข้อมูล วิธีนี้จะป้องกันการ hack ที่มาจากการดัก packet network ว่า app เรายิงเข้า server ที่ URL ไหนหลังจากสั่งซื้อ IAP สำเร็จ แล้วทำการยิง URL นั้นซ้ำเพื่อปั้มหน่วยเงิน Premium ในเกมของเรารัวๆ เหมือนซื้อครั้งเดียวแล้วจะรู้ช่องทางในการปั๊มเงินไปตลอดกาล ซึ่งแม้ว่าจะป้องกันการยิงตรงได้ด้วยการนำตัวแปรแวดล้อมอื่นๆ จากตัวเครื่องเช่นเวลามา encrypt ตัวแปรที่จะส่งให้ server ด้วยแล้ว แต่ถ้า Hacker สามารถ Decompile .apk กลับมาเป็น source code ได้(อย่างสวยงาม) Hacker ก็สามารถล่วงรู้ algorithm ที่เราใช้ encrypt ตัวแปรก่อนส่งเข้า server ได้อยู่ดี และสุดท้ายก็จะสามารถเลียนแบบการ encrypt เพื่อหลอก server ของเราว่ายิงมาจาก client จริงๆ ได้

3. ป้องกันด้วยการเก็บข้อมูลของเกมทุกอย่างไว้ที่ server แล้วโหลดข้อมูลจาก server มา update ที่ client ทุกครั้งก่อนเล่น และยิงข้อมูล transaction ไปตรวจสอบที่ server google/apple โดยตรง วิธีนี้ถือเป็นวิธีที่ปลอดภัยที่สุดและจะทำให้เราสามารถป้องกันการ hack ได้ 100% (ถ้า server ของเราเองไม่มีช่องโหว่ที่โจมตีได้จากช่องทางอื่น) แต่จะมีข้อเสียสองอย่างคือไม่สามารถทำเป็นเกม offline อย่างสมบูรณ์ได้ เพราะต้องเชื่อมต่อ internet ตลอดเวลาเพื่อ sync ข้อมูล และอย่างที่สองคือจะมีค่าใช้จ่ายเป็นค่าเช่า server ของเราเอง ซึ่งหากยอมรับในสองข้อนี้ได้ วิธีนี้จะเป็นวิธีที่ดีที่สุด สำหรับขั้นตอนหลักการทำงานดูได้จากรูปด้านล่าง ให้เปลี่ยนจาก iTune Store เป็น Play Store หรือผู้ให้บริการของ platform OS นั้นๆ เช่น Apple, Google, Amazon และ Soomla Server คือ Server ของเราเองที่เช่าเอาไว้ ซึ่งไม่ว่าจะเป็น Store ที่ไหนก็ตามจะมีวิธียืนยัน Transaction แบบนี้เหมือนๆ กันหมด ใช้ได้ทุกเจ้าครับ

blogger-image-1085999334_new

หมายเหตุ : ภาพจาก http://blog.soom.la/2013/10/announcing-server-side-verification-for.html

3.1 ติดต่อ iTune Store เพื่อสั่งซื้อไอเท็มที่ต้องการ
3.2 ได้รับข้อมูลการสั่งซื้อซึ่งจะมี transaction id อยู่ในนั้นด้วย (ของ Google Play จะเป็น purchaseToken ของ App Store จะเป็น payload)
3.3 นำข้อมูลการสั่งซื้อนั้นยิงไปที่ server ของเราเอง
3.4 นำข้อมูลการสั่งซื้อจาก server ของเราเองนั้นยิงไปที่ server ของ iTune Store อีกทีเพื่อตรวจสอบว่าเป็นรายการที่เกิดขึ้นจริงหรือไม่
3.5 iTune Store ตอบกลับมา หากถูกต้องก็จะได้รับคำยืนยันว่ามีการสั่งซื้อรายการนี้จริง และ server ของเราก็จะบันทึกข้อมูลการสั่งซื้อเอาไว้ และไปเพิ่มไอเท็มที่ผู้เล่นสั่งซื้อลงฐานข้อมูล ขั้นตอนนี้จะไม่มีใครสร้าง server มาหลอก client ของเราว่าเป็น server ตัวจริงได้ เพราะ server ของเราจะเก็บข้อมูลปัจจุบันของผู้เล่นเอาไว้เองด้วย และข้อมูลผู้เล่นตรงนี้จะไม่สามารถถูกแก้ไขค่าได้หากผู้เล่นไม่ได้ผ่านการกดซื้อ IAP มาจริงๆ (คือต่อให้ตั้ง server หลอกมา สุดท้ายเวลาผู้เล่นคนอื่นเข้ามาเล่นก็เห็นข้อมูลที่แท้จริงของคนๆ นี้ที่ server เราซึ่งไม่ได้ผ่านการโกงมาอยู่ดี)
3.6 ส่งข้อมูลผู้เล่นหลังการสั่งซื้อกลับ Client (เช่นเพิ่มจำนวนไอเท็มที่สั่งซื้อมากลับไปยัง Client)

เท่านี้ก็จะสามารถป้องกันการ Hack IAP ได้อย่างสมบูรณ์ ซึ่งหากคุณใช้ Unity ผมแนะนำ Plugin ที่ชื่อว่า  Soomla (ที่ผมยืมรูปมาใช้ในบทความนี้นี่แหละ) เพราะมันฟรีและใช้ได้ทั้ง Google Play, Amazon Store, App Store ครบถ้วนเลยทีเดียว สำหรับครั้งหน้าผมจะมาลงรายละเอียดการยืนยัน Transaction การสั่งซื้อของทั้ง App Store และ Google Play นะครับ

วิธีเตรียม Account สำหรับทดสอบ In-app Purchase by

31
Aug
1

เนื่องจากการทำ In-app purchase นั้น จะต้องมีการสร้าง product ขึ้นมาก่อนว่าชื่ออะไร ราคาเท่าไหร่ ทั้งฝั่ง iOS และ Android เรามาดูขั้นตอนกัน

Android

  1. Login เข้า https://play.google.com/apps/publish/
  2. เลือก Settings (Icon ฟันเฟือง)
  3. เลือก Account details
  4. ที่ License Testing ใส่ email ของ google account ที่จะให้เป็น tester ทดสอบได้แล้วกด save
  5. ตรง Merchant Account หน้าเดียวกันจะมีส่วนเชื่อมต่อกับ Google Wallet กด link ไปหากยังไม่ได้สร้างไว้ ระบบจะให้กรอกข้อมูลเพื่อสร้างเอาไว้รับเงินจากผู้ใช้
  6. สร้าง app ใหม่เพื่อทดสอบ หรือเลือก app เดิมที่มีอยู่
  7. Upload APK ที่มีการขอ Permission In-app Billing (หากแค่ทดสอบให้ upload เข้า alpha channel)
  8. เลือก In-app Products ที่เมนูทางซ้ายหลังเลือก app ที่เราต้องการใส่ in-app purchase
  9. ถ้าไม่มีปัญหาจะมีปุ่ม Add new product ให้กดได้ หากไม่มี ให้ทำข้อ 7 ใหม่
  10. กด Add new product แล้วเลือกเป็น Managed Product (สำหรับ API v3) แล้วใส่ Product ID เช่น com.lvup.item1
  11. กรอกข้อมูลต่างๆ ให้ครบแล้วกด Save
  12. ที่ข้างๆ ปุ่มเซพ เลือกจาก Inactive เป็น Activate เพื่อเริ่มใช้งาน
  13. สถาะ app ที่จะใช้ in-app ต้องเป็น Published เท่านั้น (ถ้ายังไม่ต้องการปล่อยให้ใช้ Alpha Channel ได้ แม้กด publish ก็ไม่เป็นไร)
  14. รอระบบ google update สักหลายชั่วโมงหน่อย ( 2-3 ชม.) แล้วทดสอบยิง In-app จากตัว app ของเราได้เลย
  15. กดเมนู Services & APIs (ใต้ In-app Products) จะมีส่วน YOUR LICENSE KEY FOR THIS APPLICATION ซึ่งให้ license key ส่วนนี้ไปใช้กับ library in-app purchase ที่เราใช้งาน
  16. upload apk ที่ใส่ license key ขึ้นไปเพื่อทดสอบ
  17. ทดสอบ reserved item ที่ google จองเอาไว้ให้ทดสอบโดยเฉพาะได้ตามหน้านี้
  18. ทดสอบ in-app จาก app ของเรา
  19. ข้อควรระวัง หมายเลข Build หรือ Bundle Version Code จะต้องเป็นเลข Build ที่เคย upload ขึ้น Store ไปแล้วเท่านั้น ห้ามใช้เลขที่มากเกินจริงจากที่มีใน Store (ถ้ามี script เปลี่ยนเลข Build อัตโนมัติควรระวังเป็นอย่างยิ่ง) ไม่อย่างนั้นจะเจอ error ฟ้องว่าหา item ชิ้นนี้ไม่พบ และห้ามใช้เลขที่ยังไม่ได้ใส่ permission billing ลงไป ไม่อย่างนั้นจะไม่สามารถใช้การได้

iOS

  1. login เข้า https://itunesconnect.apple.com
  2. เข้า Manage users
  3. เลือก Test User
  4. Add New User กรอกรายละเอียดแล้วเซพ ขั้นตอนนี้เป็นการสร้าง account เอาไว้ทดสอบ in-app
  5. กลับมาที่หน้าแรก เลือก Manage your apps
  6. สร้าง app ใหม่เพื่อทดสอบ หรือเลือก app เดิมที่มีอยู่
  7. เข้าไปใน app นั้นๆ แล้วเลือก Manage In-App Purchases ทางขวา
  8. เลือก Create New
  9. เลือก Consumable
  10. กรอกข้อมูลต่างๆ
  11. สำหรับ Price Tier จะเป็นส่วนเลือกว่าราคาเท่าไร ซึ่ง apple บังคับไม่ให้เราตั้งราคาเองได้อิสระ ต้องตั้งตาม apple กำหนดเท่านั้น โดยจะมี Tier ธรรมดา (ถ้า US ราคา 0.99 ราคาสกุลเงินอื่นจะแปลงจาก 0.99 มาตรงๆ) และ Alternate Tier (ราคาในสกุลเงินอื่นๆ จะพยายามลงท้ายด้วยเลข 9 ให้ ไม่ได้แปลงมาจากราคา US ตรงๆ กำไรอาจลดลงเล็กน้อย)
  12. กรอกครบกด Save ให้พนักงาน Apple ไป Review (Ready to submit) * ห้ามลืม upload screenshot for review ไม่งั้นจะทดสอบซื้อไม่ได้ อาจ upload รูปหลอกๆ ไปก่อน ค่อยมาแก้ไขเป็นรูปจริงที่หลังได้
  13. ที่ Device ที่จะทดสอบ ให้กด Setting -> Store Settings -> Sign out
  14. เปิด app ของเราขึ้นมาทดสอบ in-app โดยกดซื้อ
  15. ระบบจะปรากฏให้ใส่ account ก็กรอก test user ที่สร้างในข้อ 4 ไป
  16. กดซื้อเพื่อทดสอบ

ตำแหน่งปุ่มควรจะเป็น OK-Cancel หรือ Cancel-OK? by

31
Mar
0

วันนึงขณะผมนั่งเล่น research เกมในมือถืออยู่ ผมจะกดใช้งานไอเทมในเกม
เกมมันก็เลยขึ้น popup มาถามผมว่า ตกลงใช้ไอเทมไหม yes/no แล้วผมก็จะกด ok แต่ดันไปกดผิดปุ่มซะงั้น ผมเลยงงๆ เอ๊ะ ตะกี้ตูกดไรไปเนี่ย กดใหม่สิ

คราวนี้ผมอ่านข้อความที่ปุ่มกดดีๆ แล้วจึงบรรจงกดลงไปอีก 1 ครั้ง แน่นอนครับ ผมไม่พลาด แต่มันก็เลยทำให้ผมสงสัยว่า ทำไมตอนแรกผมกดผิดไปได้นะ เลยมานั่งคิดๆดู เห้ย! เกมนี้ปุ่ม ok มันอยู่คนละที่กับอีกเกมที่ผมเล่นตะกี้นี่น่า

ความสงสัยเลยบังเกิด ลองเปิดๆดูทั้ง 2 เกมอีกครั้ง ชัดเลย เกมนึง ok ซ้าย cancel ขวา อีกเกม Ok ขวา cancel ซ้าย … อ้าว แล้วเกมตูละ … แล้ว จริงๆมันควรจะเป็นแบบไหนล่ะ

ผมก็เลยลองไป google ดู เจอกับบทความนี้เข้าให้ http://www.nngroup.com/articles/ok-cancel-or-cancel-ok/เขียนโดยคุณ Jakob Nielsen

สรุปได้ใจความป๋าบอกมาว่า ขึ้นอยู่กับว่ามันอยู่บน platform ไหน ก็ออกแบบตามที่คนใช้ส่วนใหญ่เค้าใช้กัน Windows ก็ OK-Cancel ส่วน Mac ก็ Cancel-OK ถ้าเอ็งจะทำบนเว็บก็ลำบากหน่อย เอาตามที่คนใช้ของเอ็งใช้ละกัน ไปดู Stat ซะ คนใช้วินโดว์เยอะก็ออกแบบแบบ Windows คนใช้ Mac เยอะ ก็ออกแบบแบบ Mac


ตัวอย่างของ Windows


ตัวอย่างของ Mac

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


ตัวอย่างของ iOS และ Android


เกม Brave Frontier ปุ่ม OK อยู่ด้านซ้าย เกมนี้แหละที่ผมกดผิด


เกม Chain Chronicel ปุ่ม OK อยู่ด้านขวา

รับสมัคร iOS/Android Programmer by

9
Sep
0

Senior Android/iOS Game Developer
คุณสมบัติ
- มีความชำนาญในการพัฒนา Mobile Application ในภาษา Native (Java, Objective-C ตามแต่ platform ที่ถนัด)
- มีประสบการณ์การทำ app หลายขนาดหน้าจอ
- มีประสบการณ์การติดต่อขอข้อมูลจาก Webservice ภายนอก
- ไม่จำเป็นต้องเคยพัฒนา app ประเภทเกมมาก่อน แต่หากเคยพัฒนาเกมบนมือถือจะได้รับการพิจารณาเป็นพิเศษ
- หากเคยใช้งาน Unity3D และ 2D Toolkit, 2D UI ต่างๆ หรือ 2D Framework ต่างๆจะพิจารณาเป็นพิเศษ

Junior Android/iOS Game Developer
- มีความรู้ความเข้าใจในการพัฒนา Mobile Application ในภาษา Native (Java, Objective-C ตามแต่ platform ที่ถนัด) หรือ Unity ในระดับเบื้องต้น
- ไม่จำเป็นต้องเคยพัฒนา app ประเภทเกมมาก่อน แต่หากเคยพัฒนาเกมบนมือถือจะได้รับการพิจารณาเป็นพิเศษ

วิธีการสมัคร : ส่ง Resume และ Portfolio มาที่ recruit [at] levelup.in.th

 เราชนะรอบ 4 | ยืมเงิน 3000 ด่วน | แอพกู้เงิน | แอพเงินด่วน | สินเชื่อออนไลน์อนุมัติทันที | Site Map | กู้เงินก้อน | กระเป๋าตัง | thisshop และ ยืมเงินฉุกเฉิน 5000 ด่วน