Wall of Text #2: Copy protection

คำถามที่สองถามว่า จะเขียนแอพ Android ป้องกันไม่ให้คน Crack ได้ไหม?

คำตอบคือ It depends

อืม ตอบแบบนี้เปลี่ยนอาชีพเป็น consult เลย…

Depends ยังไง คำตอบคือเราสามารถใช้ Google Play Licensing API เพื่อเช็คได้ว่าผู้ใช้งานซื้อแอพเราหรือยัง

แต่ถ้าเราเช็คในแอพ ปัญหาที่ตามมาคือมันถูกเจาะได้ 2 ท่า

  1. ปลอม response จาก Google Play ให้บอกว่ามีแอพแล้ว (คล้ายๆ iAP Cracker ใน iOS)
  2. ถ้าเราเช็ค 1 อย่างดีแล้ว cracker ก็จะ recompile app เราใหม่โดยลบ check ออก

วิธีเดียวที่จะปลอดภัยคือย้าย check นี้ไปรันบน server ของเราเวลาเราขอให้ server ทำอะไรบางอย่าง

ถ้าไม่มี license ก็ปฏิเสธ ไม่ทำให้

แต่ไม่ใช่ทุกแอพจะสามารถทำแบบนี้ได้ เพราะต้องมี server และ server ต้องทำอะไรบางอย่างด้วย ไม่ใช่แค่ยิงไป check license บน server อย่างเดียว แบบนี้โดนถอดโค้ดแบบข้อ 2 แน่นอน

ตัวอย่างการใช้ server เช่น

  1. Music Game ขายเพลงเป็น In app purchase เวลาจะกดโหลดเพลงฝั่ง server จะต้องเช็ค Licensing ก่อนถึงจะเอาไฟล์เพลงไปให้โหลดได้
  2. แอพที่มี Cloud backup อาจจะล็อคไม่ให้ Cloud backup ได้ (แต่ก็ยัง crack ใช้ feature อื่นๆ ได้อยู่ดี)
  3. ระบบ Social เช่น WhatApps ตอน Login ก็ส่ง Licensing status ไปด้วยเลย ถ้าไม่ซื้อ Login ไม่ได้

แอพที่ทำงานเป็น offline อย่างเดียว ก็ทำอะไรไม่ได้เท่าไรนัก เช่นแอพ Keyboard หรือแอพกล้องถ่ายรูป

วิธีหนึ่งที่พอจะช่วยได้คือใช้โปรแกรมประเภท Obfuscator เพื่อทำให้โค้ดโปรแกรมที่ถอดออกมาแล้วอ่านไม่ออก จะได้ลบ check ได้ยากขึ้น แต่ก็เป็นแค่วิธีถ่วงเวลาเท่านั้นไม่ได้สามารถป้องกันการ crack ได้ 100%