DexGuard: คืออะไร การทำให้สับสนและการป้องกันแอปพลิเคชัน Android

ผู้แต่ง: IT Sectr เผยแพร่เมื่อ: 2026-04-03 เวลาอ่าน: 8 นาที

DexGuard เป็นโซลูชันสำหรับปกป้องแอปพลิเคชัน Android จากการวิเคราะห์ย้อนกลับ โดย Guardsquare เครื่องมือนี้ทำการทำให้สับสน การเข้ารหัส และการตรวจสอบเชิงรุกของ DEX bytecode ในขั้นตอนการสร้าง ตามข้อมูลจาก Guardsquare, 2025 ผลิตภัณฑ์นี้ถูกใช้ในโครงการเชิงพาณิชย์มากกว่า 10,000 โครงการ รวมถึงระบบธนาคารและการชำระเงิน DexGuard ขยายความสามารถของ ProGuard โดยเพิ่มการป้องกันการดีคอมไพล์และการโจมตีขณะทำงานโดยไม่ต้องแก้ไขซอร์สโค้ดของแอปพลิเคชัน

ประเด็นสำคัญ

  • DexGuard เป็นเครื่องมือทำให้สับสน Android เชิงพาณิชย์ ผู้สืบทอดของ ProGuard ที่มีการป้องกันการวิเคราะห์ย้อนกลับที่เพิ่มขึ้น
  • การเข้ารหัส สตริงและคลาสเกิดขึ้นในขั้นตอนการสร้าง ทำให้ส่วนอ่านของไฟล์ DEX ไม่สามารถเข้าถึงได้สำหรับการวิเคราะห์แบบคงที่
  • การควบคุมความสมบูรณ์ ตรวจสอบลายเซ็น APK ในขณะทำงานและหยุดการทำงานเมื่อตรวจพบการแก้ไข
  • การตรวจจับ ดีบักเกอร์ อีมูเลเตอร์และ Frida ป้องกันการวิเคราะห์แบบไดนามิกในขณะทำงาน
  • เอเจนต์ RASP ตรวจพบการจัดการหน่วยความจำและการสกัดกั้นการเรียกของระบบบนอุปกรณ์ที่ทำงานอยู่

DexGuard คืออะไร?

DexGuard เป็นเครื่องมือเชิงพาณิชย์สำหรับทำให้สับสนและปกป้องแอปพลิเคชัน Android พัฒนาโดยทีมเดียวกับที่สร้าง ProGuard (Eric Lafortune) ผลิตภัณฑ์นี้ปรากฏในปี 2012 ในฐานะส่วนขยายสำหรับโครงการที่การทำให้สับสนมาตรฐานของ ProGuard ไม่เพียงพอ DexGuard ทำงานในขั้นตอนหลังการคอมไพล์ แปลง DEX bytecode ให้เป็นรูปแบบที่ได้รับการป้องกันก่อนการบรรจุ APK

สถาปัตยกรรมของ DexGuard สร้างขึ้นบนโมเดลการป้องกันหลายชั้น ชั้นแรกคือการทำให้สับสนชื่อคลาส เมธอดและฟิลด์โดยใช้ overload induction ชั้นที่สองคือการเข้ารหัสค่าคงที่สตริงและโหลดผ่านเมธอด stub ในขณะทำงาน ชั้นที่สามคือการควบคุมความสมบูรณ์ของ APK ผ่านการตรวจสอบผลรวมตรวจสอบของลายเซ็น ตามรายงานทางเทคนิคของ Guardsquare (2025) การใช้ชั้นเหล่านี้ร่วมกันเพิ่มเวลาในการวิเคราะห์แอปพลิเคชันจากไม่กี่นาทีเป็นหลายสัปดาห์

DexGuard รองรับทุกประเภทของโครงการ Android: แอปพลิเคชัน ไลบรารี SDK และโครงการเกมบน Unity เครื่องมือนี้รวมเข้ากับไปป์ไลน์ Gradle มาตรฐานผ่านปลั๊กอิน com.guardsquare.dexguard และไม่ต้องการการแทรกแซงด้วยตนเองหลังการตั้งค่า

ความแตกต่างหลักระหว่าง DexGuard และทางเลือกโอเพนซอร์สคือการป้องกันเชิงรุกในขณะทำงาน เครื่องมือนี้ไม่เพียงทำให้สับสนโค้ด แต่เพิ่มเอเจนต์ที่ทำการตรวจสอบระหว่างการทำงานของแอปพลิเคชัน ซึ่งช่วยให้ตรวจจับการโจมตีเช่นการฉีด Frida, Xposed หรือการดีบัก JDWP และตอบสนองต่อพวกเขา: การหยุดทำงาน การสร้างข้อมูลปลอม หรือการแจ้งเตือนเซิร์ฟเวอร์

การทำให้สับสนใน DexGuard ทำงานอย่างไร

กระบวนการทำให้สับสนใน DexGuard ประกอบด้วยขั้นตอนการแปลง bytecode ตามลำดับ โดยแต่ละขั้นตอนกำหนดเป้าหมายเวกเตอร์การโจมตีเฉพาะ

การทำให้สับสนชื่อด้วย overload induction

เครื่องมือทำให้สับสนมาตรฐานแทนที่ชื่อด้วยอักขระเดี่ยว a, b, c DexGuard ใช้ overload induction — กำหนดชื่อสั้นเดียวกันให้กับเมธอดต่าง ๆ ที่มีลายเซ็นต่างกัน ดีคอมไพเลอร์ไม่สามารถแก้ไขการโอเวอร์โหลดและสร้างโค้ดที่ไม่ถูกต้อง ตามการทดสอบของ Guardsquare การโอเวอร์โหลดชื่อเพิ่มข้อผิดพลาดในการดีคอมไพล์ขึ้น 78%

การเข้ารหัสค่าคงที่

ลิเทอรัลสตริง, URL, คีย์ API และโทเคนถูกเข้ารหัสโดยใช้ AES-256 ในขั้นตอนการสร้าง ในขณะทำงาน เมธอด stub ถอดรหัสสตริงก่อนใช้งานและล้างพื้นที่หน่วยความจำหลังจากนั้น สิ่งนี้ป้องกันการดูสตริงแบบคงที่ในไฟล์ DEX ตัวอย่างของผลลัพธ์ที่ไม่มีการเข้ารหัส: ผู้โจมตีรัน strings dexguard.apk และเห็นจุดสิ้นสุด API ทั้งหมดในข้อความธรรมดา

การควบคุมความสมบูรณ์ของโค้ด

DexGuard คำนวณแฮช SHA-256 สำหรับแต่ละไฟล์ DEX และเก็บค่าในเลเยอร์เนทีฟ เมื่อแอปพลิเคชันเริ่มทำงาน เอเจนต์เปรียบเทียบแฮชปัจจุบันกับค่าอ้างอิง หากไม่ตรงกัน (APK ถูกแก้ไข) แอปพลิเคชันจะสิ้นสุดการทำงาน นอกจากนี้ สามารถกำหนดค่าการตรวจสอบความสมบูรณ์สำหรับทรัพยากรและแมนิเฟสต์ได้

groovy
// build.gradle (ระดับแอป)
buildscript {
    repositories {
        maven { url "https://guard repositories.com/dexguard" }
    }
    dependencies {
        classpath "com.guardsquare:dexguard-gradle-plugin:9.1.05"
    }
}

apply plugin: "com.guardsquare.dexguard"

android {
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
            dexguard {
                config "dexguard-project.txt"
            }
        }
    }
}

DexGuard เทียบกับ ProGuard: ความแตกต่างหลัก

ทั้งสองเครื่องมือได้รับการพัฒนาโดยบริษัทเดียวกันแต่กำหนดเป้าหมายสถานการณ์ที่แตกต่างกัน ProGuard เป็นเครื่องมือเพิ่มประสิทธิภาพโอเพนซอร์สและเครื่องมือทำให้สับสนขั้นต่ำที่รวมอยู่ใน Android SDK โดยค่าเริ่มต้น DexGuard เป็นผลิตภัณฑ์เชิงพาณิชย์ที่เพิ่มระดับการป้องกันที่ไม่สามารถใช้ได้ในเวอร์ชันฟรี

คุณลักษณะProGuardDexGuard
ใบอนุญาตโอเพนซอร์ส (GPL)เชิงพาณิชย์
การทำให้สับสนชื่อการแทนที่อย่างง่ายOverload induction
การเข้ารหัสสตริงไม่AES-256
การป้องกัน RASPไม่ใช่
การตรวจจับ Fridaไม่ใช่
การป้องกันดีบักไม่ใช่
การควบคุมความสมบูรณ์ไม่การแฮช SHA-256
การรองรับ Unityไม่ใช่

การเลือกระหว่างเครื่องมือถูกกำหนดโดยระดับของข้อมูลที่ได้รับการป้องกัน สำหรับแอปพลิเคชันมือถือทั่วไป ProGuard ก็เพียงพอ สำหรับแอปพลิเคชันธนาคาร การชำระเงินและการแพทย์ที่การเปิดเผยโค้ดทำให้เกิดความเสี่ยงทางการเงินหรือข้อบังคับ DexGuard คือโซลูชันที่แนะนำ ตาม OWASP Mobile Top 10 (2024) การขาดการทำให้สับสนในแอปพลิเคชันที่มีข้อมูลที่ละเอียดอ่อนถือเป็นความเสี่ยงที่สำคัญ

การกำหนดค่า DexGuard ในโครงการ Gradle

การรวม DexGuard เริ่มต้นด้วยการเพิ่มพื้นที่เก็บข้อมูล Guardsquare ใน build.gradle หลัก ปลั๊กอินเวอร์ชัน 9.x เข้ากันได้กับ AGP 7.4–8.5 และ Gradle 7.6–8.7 การกำหนดค่าการป้องกันถูกกำหนดในไฟล์ dexguard-project.txt แยกต่างหาก ซึ่งเปิดใช้เทคนิคเฉพาะ

groovy
// build.gradle หลัก
buildscript {
    repositories {
        maven { url "https://maven.guardsquare.com/dexguard" }
    }
}

// dexguard-project.txt — การกำหนดค่าขั้นต่ำ
# การเข้ารหัสสตริง
@stringEncryption

# การทำให้สับสนด้วย overload induction
@overloadInduction

# การควบคุมความสมบูรณ์ของ APK
@integrityCheck

# การป้องกันดีบักเกอร์และอีมูเลเตอร์
@antiDebug
@antiEmulator

คำสั่ง @stringEncryption และ @overloadInduction เป็นกุญแจสำคัญในการปกป้องโค้ดเชิงพาณิชย์ เมื่อเปิดใช้งานคำอธิบายประกอบทั้งหมด เวลาสร้างเพิ่มขึ้น 30–60 วินาที ซึ่งสมเหตุสมผลตามระดับการป้องกัน การกำหนดค่าถูกเก็บไว้ใน VCS และใช้เฉพาะสำหรับบิลด์ที่เผยแพร่

สิ่งสำคัญคือต้องกำหนดค่าข้อยกเว้นสำหรับคลาสที่ใช้รีเฟลกชัน DexGuard เช่นเดียวกับ ProGuard ไม่ได้วิเคราะห์รีเฟลกชันโดยอัตโนมัติ ใน dexguard-project.txt คุณต้องเพิ่มกฎ -keep สำหรับคลาสไลบรารีที่โหลดผ่าน Class.forName หรือ @JavascriptInterface

groovy
// dexguard-project.txt — กฎ keep
# เก็บคลาสโมเดล Gson
-keep class com.example.model.** { *; }

# เก็บอินเทอร์เฟซ WebView
-keepclassmembers class * {
    @android.webkit.JavascriptInterface <methods>;
}

# ไม่รวมรายงานข้อขัดข้อง Firebase
-keep class com.google.firebase.** { *; }

เทคนิคการป้องกันของ DexGuard

DexGuard รวมเทคนิคการป้องกันมากกว่า 20 รายการ แบ่งเป็นแบบคงที่ (ในขั้นตอนการสร้าง) และแบบไดนามิก (ในขณะทำงาน) การเลือกเทคนิคเฉพาะขึ้นอยู่กับโมเดลภัยคุกคามของแอปพลิเคชัน

การป้องกันแบบคงที่

การเข้ารหัสทรัพยากร — รูปภาพ สินทรัพย์และไฟล์กำหนดค่าถูกเข้ารหัสและถอดรหัสเมื่อเข้าถึงครั้งแรก การทำให้สับสนโฟลว์ควบคุมแทรกโค้ดที่ตายแล้วและเปลี่ยนลำดับคำสั่ง ทำให้ bytecode ไม่สามารถอ่านได้สำหรับดีคอมไพเลอร์เช่น jadx การซ่อนค่าคงที่ แทนที่ลิเทอรัลตัวเลขด้วยนิพจน์เลขคณิตที่คำนวณในขณะทำงาน

การป้องกันแบบไดนามิก (RASP)

Runtime Application Self-Protection — เอเจนต์ภายในแอปพลิเคชันที่ติดตามพฤติกรรมของสภาพแวดล้อมขณะทำงาน DexGuard RASP ตรวจจับ: การเชื่อมต่อ Frida ผ่าน /proc/self/maps, การมีอยู่ของ Xposed Framework, การทำงานภายใต้ดีบักเกอร์ (JDWP), อีมูเลเตอร์ Android (QEMU) เมื่อตรวจพบภัยคุกคาม นโยบายจะถูกเรียกใช้ — การหยุดทำงานหรือการสร้างข้อมูลที่ไม่ถูกต้อง ตามการวิจัยของ OWASP Mobile Security (2025) การป้องกัน RASP หยุดการโจมตีอัตโนมัติทั่วไปได้ 94%

การป้องกันการโจมตีตามเวลา

DexGuard เพิ่มความล่าช้าแบบสุ่มในส่วนโค้ดที่สำคัญ เพิ่มเวลาในการโจมตีแบบ brute force ระหว่างการวิเคราะห์แบบไดนามิก พารามิเตอร์ถูกกำหนดเป็นมิลลิวินาทีและสุ่มในแต่ละบิลด์ สิ่งนี้ทำให้การใช้เครื่องมือ fuzzing และสแกนเนอร์อัตโนมัติซับซ้อนขึ้น

แนวทางการรวมและความเข้ากันได้

เมื่อรวม DexGuard เข้ากับโครงการที่มีอยู่ ต้องพิจารณาความเข้ากันได้ย้อนหลังกับไลบรารีและ SDK ยอดนิยม ไลบรารีบางตัวไม่เข้ากันได้กับการทำให้สับสนอย่างรุนแรงเนื่องจากการเรียกใช้รีเฟลกชัน

ความเข้ากันได้กับ SDK ยอดนิยม

DexGuard เข้ากันได้กับ Firebase Crashlytics, Google Analytics, Google Play Services, Retrofit, OkHttp, Glide และ Gson ด้วยกฎ keep ที่ถูกต้อง ไลบรารีที่ใช้คำอธิบายประกอบและการสร้างโค้ด (Dagger, Hilt, Room, DataBinding) ต้องการการรักษาคลาสที่สร้างไว้อย่างชัดเจน ทีม Guardsquare เผยแพร่ตัวอย่างการกำหนดค่าอย่างเป็นทางการสำหรับ SDK ยอดนิยม

ข้อกำหนดด้านสภาพแวดล้อม

ข้อกำหนดขั้นต่ำ: Android Gradle Plugin 7.4, Gradle 7.6, JDK 11 DexGuard 9.1 รองรับ targetSdk 34 และ compileSdk 34 สำหรับ Java 17 และ AGP 8.2+ ต้องใช้ DexGuard เวอร์ชัน 9.2 ขึ้นไป เครื่องมือนี้ไม่เข้ากันได้กับ R8 ในโหมดเพิ่มประสิทธิภาพเต็มรูปแบบ — เมื่อใช้ DexGuard R8 จะถูกปิดใช้งานโดยอัตโนมัติ

การทดสอบหลังการทำให้สับสน

หลังจากกำหนดค่า DexGuard แล้ว จำเป็นต้องทำการทดสอบการถดถอยของเส้นทางทั้งหมดที่ได้รับผลกระทบจากรีเฟลกชันและการโหลดคลาสแบบไดนามิก ขอแนะนำให้รันการทดสอบอัตโนมัติ UI บนบิลด์ที่เปิดใช้การป้องกันก่อนเผยแพร่ Guardsquare มีเครื่องมือ DexGuard Tracer ที่บันทึกข้อผิดพลาด ClassNotFoundException ในขณะทำงานโดยไม่ทำให้แอปพลิเคชันหยุดทำงาน ทำให้การดีบักกฎ keep ง่ายขึ้น

คำถามที่พบบ่อย

DexGuard แตกต่างจาก ProGuard อย่างไร?

ProGuard เป็นเครื่องมือทำให้สับสนฟรีที่มีการแทนที่ชื่อพื้นฐานและการเพิ่มประสิทธิภาพ bytecode DexGuard เพิ่มการเข้ารหัสสตริง AES-256, overload induction สำหรับชื่อ, เอเจนต์ RASP ในขณะทำงาน, การควบคุมความสมบูรณ์ของ APK และการตรวจจับ Frida, Xposed, อีมูเลเตอร์และดีบักเกอร์ ProGuard เพียงพอสำหรับแอปพลิเคชันทั่วไป DexGuard สำหรับแอปพลิเคชันธนาคารและองค์กร

ค่าใบอนุญาต DexGuard เท่าไหร่?

DexGuard เผยแพร่ภายใต้ใบอนุญาตเชิงพาณิชย์ที่มีการชำระเงินรายปี ค่าใช้จ่ายขึ้นอยู่กับจำนวนโครงการและประเภทการสมัครสมาชิก ในปี 2025 ใบอนุญาตพื้นฐานสำหรับหนึ่งโครงการเริ่มต้นที่ 5,000 USD ต่อปี มีโปรแกรมพันธมิตรที่มีส่วนลดสูงสุด 40% สำหรับสตาร์ทอัพ

สามารถใช้ DexGuard กับ Kotlin และ Jetpack Compose ได้หรือไม่?

ใช่ DexGuard เข้ากันได้อย่างสมบูรณ์กับ Kotlin และ Jetpack Compose รวมถึง coroutines และคอมไพเลอร์ Compose ต้องมีกฎ keep เพิ่มเติมสำหรับคลาสที่สร้างโดยคอมไพเลอร์ Kotlin Guardsquare แนะนำให้ใช้เทมเพลตการกำหนดค่า kotlin-project.txt จากเอกสารทางการ

DexGuard เพิ่มขนาด APK หรือไม่?

การเข้ารหัสสตริงและการเพิ่มเอเจนต์ RASP ทำให้ขนาด APK เพิ่มขึ้น 5–15% ขึ้นอยู่กับปริมาณโค้ดที่ได้รับการป้องกัน การทำให้สับสนชื่อและการทำให้สับสนโฟลว์ควบคุม ไม่เพิ่ม ขนาด — พวกมันแทนที่ชื่อที่มีอยู่ โดยเฉลี่ยแล้ว APK ที่มีการป้องกัน DexGuard เต็มรูปแบบจะมีขนาดใหญ่กว่าเดิม 8–12%

สามารถปิด DexGuard สำหรับการดีบักได้หรือไม่?

ใช่ การกำหนดค่าการป้องกันจะใช้เฉพาะกับบิลด์ประเภทที่เผยแพร่เท่านั้น สำหรับบิลด์ดีบัก DexGuard จะปิดการเข้ารหัสและการตรวจสอบ RASP โดยอัตโนมัติ นักพัฒนาสามารถเปิดใช้ DexGuard ในโหมดดีบักผ่านพารามิเตอร์ guard.force.enable=true ใน gradle.properties เพื่อทดสอบบิลด์ที่ได้รับการป้องกัน

สรุป

  • DexGuard เป็นเครื่องมือป้องกันเชิงพาณิชย์สำหรับ Android ที่ขยายความสามารถของ ProGuard ด้วยชุดเทคนิคต่อต้านการวิเคราะห์ย้อนกลับที่สมบูรณ์
  • การทำให้สับสน ด้วย overload induction ทำให้โค้ดที่ถูกดีคอมไพล์ไม่ทำงานโดยการสร้างเมธอดโอเวอร์โหลดที่ไม่สามารถแก้ไขได้
  • การเข้ารหัส ค่าคงที่สตริงและทรัพยากรด้วย AES-256 ปิดกั้นการวิเคราะห์แบบคงที่ของไฟล์ DEX ผ่าน jadx และ strings
  • เอเจนต์ RASP ตรวจจับ Frida, Xposed, ดีบักเกอร์ JDWP และอีมูเลเตอร์ในขณะทำงาน ดำเนินการหยุดทำงานเมื่อตรวจพบภัยคุกคาม
  • การควบคุมความสมบูรณ์ของ APK ผ่านแฮช SHA-256 ในเลเยอร์เนทีฟป้องกันการรันเวอร์ชันที่ถูกแก้ไขของแอปพลิเคชัน
  • การรวม เข้ากับโครงการ Gradle ด้วยคำอธิบายประกอบ @stringEncryption, @overloadInduction และ @antiDebug ต้องใช้เวลาตั้งค่า 10–15 นาที
  • DexGuard เป็นเครื่องมือที่แนะนำสำหรับแอปพลิเคชัน Android ด้านธนาคาร การชำระเงินและการแพทย์ที่การถูกบุกรุกของโค้ดทำให้เกิดความเสี่ยงทางการเงิน

เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร

IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ

ปรึกษาโครงการ

อ่านเพิ่มเติม