7 กันยายน 2557

Published กันยายน 07, 2557 by with 2 comments

ป้องกันโค้ด Python ด้วย Obfuscation

สวัสดีครับทุกท่าน หลาย ๆ ท่านที่เขียนโปรแกรมด้วยภาษา Python เมื่อต้องการนำโปรแกรมไปให้คนอื่นใช้งาน คงกลัวการแอบขโมยหรือแก้ไขโปรแกรม ทำให้บางท่านต้อง compile python เพื่อป้องกันการแก้ไข บทความนี้ผมจะไปรู้จักวิธีป้องกันโค้ด Python ด้วย Obfuscation
Obfuscation คืออะไร
  อธิบายแบบง่าย ๆ คือการทำให้โค้ดอ่านได้ยากขึ้นโดยมนุษย์ครับ ตัวอย่างเช่น โค้ดที่ผมเขียน
print("Hello World")

แต่เมื่อถูกทำ Obfuscation
o=print

o("Hello World")

จะพบว่า โค้ดถูกทำให้อ่านยากขึ้นนิดหน่อยครับ ถ้ามีโค้ดเป็นหลาย ๆ สิบ หรือ หลาย ๆ ร้อยบรรทัด ถูกทำ Obfuscation กว่าจะแกะได้ต้องใช้เวลานานมากหรือไม่ก็เลิกแกะไปเลยครับ
ใน Python มีเครื่องมือที่ช่วยทำ Obfuscation ให้เลือกอย่างมากมาย ผมขอแนะนำ pyminifier ครับ http://liftoff.github.io/pyminifier/ สามารถติดตั้งได้ง่าย ๆ โดยสั่ง pip install -U pyminifier ครับ
ส่วนวิธีใช้ ถ้าต้องการ
pyminifier --obfuscate ที่อยู่ไฟล์.py

แล้วโปรแกรมจะแสดงโค้ด Python ที่ผ่านการทำ Obfuscation ออกมาครับ
ตัวอย่างโค้ด 0.py
y = 0
x = int(input("input: "))
if x == y:
    print ("=" , y)
elif x < y:
    print ("<" , y)
elif x > y:
    print (">" , y)
else:
    print ("No, It isn't num.")

แล้วผมใช้ pyminifier ทำให้โค้ด Python ถูกทำให้อ่านยากขึ้นด้วยการทำ Obfuscation
pyminifier --obfuscate  0.py

ผลลัพธ์โค้ด
X=0
b=int
l=input
J=print
x=b(l("input: "))
if x==y:
 J("=",y)
elif x<y:
 J("<",y)
elif x>y:
 J(">",y)
else:
 J("No, It isn't num.")

รายละเอียดการใช้งานโมดูล pyminifier เพิ่มเติม อ่านได้ที่ http://liftoff.github.io/pyminifier/ ครับ
ติดตามบทความต่อไปนะครับ
ขอบคุณครับ

2 ความคิดเห็น:

  1. ตอน compile แล้ว จะทำงานช้าลงด้วยหรือไม่ครับ

    ตอบลบ
    คำตอบ
    1. ถ้าเป็น Python แบบปกติที่ไม่ผ่านการทำ Obfuscation ตอน compile แล้วจะเร็วตามมาตราฐานครับ แต่ถ้าผ่าน Obfuscation น่าจะช้ากว่าแบบเดิมหน่อยหนึ่งครับ จะโค้ดจะเห็นได้ว่ามีตัวแปรเพิ่มขึ้นมาครับ เวลาเรียกใช้งานมีการดึงตัวแปรไปเก็บไว้หน่วยความจำเพิ่มอีกครับ ขึ้นอยู่กับคุณภาพโค้ดที่เขียนและเครื่อง ระบบ เวชั่นของ Python ที่ compile ครับ

      ลบ

แสดงความคิดเห็นได้ครับ :)