DexGuard เป็นโซลูชันสำหรับปกป้องแอปพลิเคชัน Android จากการวิเคราะห์ย้อนกลับ โดย Guardsquare เครื่องมือนี้ทำการทำให้สับสน การเข้ารหัส และการตรวจสอบเชิงรุกของ DEX bytecode ในขั้นตอนการสร้าง ตามข้อมูลจาก Guardsquare, 2025 ผลิตภัณฑ์นี้ถูกใช้ในโครงการเชิงพาณิชย์มากกว่า 10,000 โครงการ รวมถึงระบบธนาคารและการชำระเงิน DexGuard ขยายความสามารถของ ProGuard โดยเพิ่มการป้องกันการดีคอมไพล์และการโจมตีขณะทำงานโดยไม่ต้องแก้ไขซอร์สโค้ดของแอปพลิเคชัน
ประเด็นสำคัญ
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 ประกอบด้วยขั้นตอนการแปลง bytecode ตามลำดับ โดยแต่ละขั้นตอนกำหนดเป้าหมายเวกเตอร์การโจมตีเฉพาะ
เครื่องมือทำให้สับสนมาตรฐานแทนที่ชื่อด้วยอักขระเดี่ยว a, b, c DexGuard ใช้ overload induction — กำหนดชื่อสั้นเดียวกันให้กับเมธอดต่าง ๆ ที่มีลายเซ็นต่างกัน ดีคอมไพเลอร์ไม่สามารถแก้ไขการโอเวอร์โหลดและสร้างโค้ดที่ไม่ถูกต้อง ตามการทดสอบของ Guardsquare การโอเวอร์โหลดชื่อเพิ่มข้อผิดพลาดในการดีคอมไพล์ขึ้น 78%
ลิเทอรัลสตริง, URL, คีย์ API และโทเคนถูกเข้ารหัสโดยใช้ AES-256 ในขั้นตอนการสร้าง ในขณะทำงาน เมธอด stub ถอดรหัสสตริงก่อนใช้งานและล้างพื้นที่หน่วยความจำหลังจากนั้น สิ่งนี้ป้องกันการดูสตริงแบบคงที่ในไฟล์ DEX ตัวอย่างของผลลัพธ์ที่ไม่มีการเข้ารหัส: ผู้โจมตีรัน strings dexguard.apk และเห็นจุดสิ้นสุด API ทั้งหมดในข้อความธรรมดา
DexGuard คำนวณแฮช SHA-256 สำหรับแต่ละไฟล์ DEX และเก็บค่าในเลเยอร์เนทีฟ เมื่อแอปพลิเคชันเริ่มทำงาน เอเจนต์เปรียบเทียบแฮชปัจจุบันกับค่าอ้างอิง หากไม่ตรงกัน (APK ถูกแก้ไข) แอปพลิเคชันจะสิ้นสุดการทำงาน นอกจากนี้ สามารถกำหนดค่าการตรวจสอบความสมบูรณ์สำหรับทรัพยากรและแมนิเฟสต์ได้
// 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"
}
}
}
}
ทั้งสองเครื่องมือได้รับการพัฒนาโดยบริษัทเดียวกันแต่กำหนดเป้าหมายสถานการณ์ที่แตกต่างกัน ProGuard เป็นเครื่องมือเพิ่มประสิทธิภาพโอเพนซอร์สและเครื่องมือทำให้สับสนขั้นต่ำที่รวมอยู่ใน Android SDK โดยค่าเริ่มต้น DexGuard เป็นผลิตภัณฑ์เชิงพาณิชย์ที่เพิ่มระดับการป้องกันที่ไม่สามารถใช้ได้ในเวอร์ชันฟรี
| คุณลักษณะ | ProGuard | DexGuard |
|---|---|---|
| ใบอนุญาต | โอเพนซอร์ส (GPL) | เชิงพาณิชย์ |
| การทำให้สับสนชื่อ | การแทนที่อย่างง่าย | Overload induction |
| การเข้ารหัสสตริง | ไม่ | AES-256 |
| การป้องกัน RASP | ไม่ | ใช่ |
| การตรวจจับ Frida | ไม่ | ใช่ |
| การป้องกันดีบัก | ไม่ | ใช่ |
| การควบคุมความสมบูรณ์ | ไม่ | การแฮช SHA-256 |
| การรองรับ Unity | ไม่ | ใช่ |
การเลือกระหว่างเครื่องมือถูกกำหนดโดยระดับของข้อมูลที่ได้รับการป้องกัน สำหรับแอปพลิเคชันมือถือทั่วไป ProGuard ก็เพียงพอ สำหรับแอปพลิเคชันธนาคาร การชำระเงินและการแพทย์ที่การเปิดเผยโค้ดทำให้เกิดความเสี่ยงทางการเงินหรือข้อบังคับ DexGuard คือโซลูชันที่แนะนำ ตาม OWASP Mobile Top 10 (2024) การขาดการทำให้สับสนในแอปพลิเคชันที่มีข้อมูลที่ละเอียดอ่อนถือเป็นความเสี่ยงที่สำคัญ
การรวม DexGuard เริ่มต้นด้วยการเพิ่มพื้นที่เก็บข้อมูล Guardsquare ใน build.gradle หลัก ปลั๊กอินเวอร์ชัน 9.x เข้ากันได้กับ AGP 7.4–8.5 และ Gradle 7.6–8.7 การกำหนดค่าการป้องกันถูกกำหนดในไฟล์ dexguard-project.txt แยกต่างหาก ซึ่งเปิดใช้เทคนิคเฉพาะ
// 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
// dexguard-project.txt — กฎ keep
# เก็บคลาสโมเดล Gson
-keep class com.example.model.** { *; }
# เก็บอินเทอร์เฟซ WebView
-keepclassmembers class * {
@android.webkit.JavascriptInterface <methods>;
}
# ไม่รวมรายงานข้อขัดข้อง Firebase
-keep class com.google.firebase.** { *; }
DexGuard รวมเทคนิคการป้องกันมากกว่า 20 รายการ แบ่งเป็นแบบคงที่ (ในขั้นตอนการสร้าง) และแบบไดนามิก (ในขณะทำงาน) การเลือกเทคนิคเฉพาะขึ้นอยู่กับโมเดลภัยคุกคามของแอปพลิเคชัน
การเข้ารหัสทรัพยากร — รูปภาพ สินทรัพย์และไฟล์กำหนดค่าถูกเข้ารหัสและถอดรหัสเมื่อเข้าถึงครั้งแรก การทำให้สับสนโฟลว์ควบคุมแทรกโค้ดที่ตายแล้วและเปลี่ยนลำดับคำสั่ง ทำให้ bytecode ไม่สามารถอ่านได้สำหรับดีคอมไพเลอร์เช่น jadx การซ่อนค่าคงที่ แทนที่ลิเทอรัลตัวเลขด้วยนิพจน์เลขคณิตที่คำนวณในขณะทำงาน
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 ยอดนิยม ไลบรารีบางตัวไม่เข้ากันได้กับการทำให้สับสนอย่างรุนแรงเนื่องจากการเรียกใช้รีเฟลกชัน
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 ง่ายขึ้น
คำถามที่พบบ่อย
ProGuard เป็นเครื่องมือทำให้สับสนฟรีที่มีการแทนที่ชื่อพื้นฐานและการเพิ่มประสิทธิภาพ bytecode DexGuard เพิ่มการเข้ารหัสสตริง AES-256, overload induction สำหรับชื่อ, เอเจนต์ RASP ในขณะทำงาน, การควบคุมความสมบูรณ์ของ APK และการตรวจจับ Frida, Xposed, อีมูเลเตอร์และดีบักเกอร์ ProGuard เพียงพอสำหรับแอปพลิเคชันทั่วไป DexGuard สำหรับแอปพลิเคชันธนาคารและองค์กร
DexGuard เผยแพร่ภายใต้ใบอนุญาตเชิงพาณิชย์ที่มีการชำระเงินรายปี ค่าใช้จ่ายขึ้นอยู่กับจำนวนโครงการและประเภทการสมัครสมาชิก ในปี 2025 ใบอนุญาตพื้นฐานสำหรับหนึ่งโครงการเริ่มต้นที่ 5,000 USD ต่อปี มีโปรแกรมพันธมิตรที่มีส่วนลดสูงสุด 40% สำหรับสตาร์ทอัพ
ใช่ DexGuard เข้ากันได้อย่างสมบูรณ์กับ Kotlin และ Jetpack Compose รวมถึง coroutines และคอมไพเลอร์ Compose ต้องมีกฎ keep เพิ่มเติมสำหรับคลาสที่สร้างโดยคอมไพเลอร์ Kotlin Guardsquare แนะนำให้ใช้เทมเพลตการกำหนดค่า kotlin-project.txt จากเอกสารทางการ
การเข้ารหัสสตริงและการเพิ่มเอเจนต์ RASP ทำให้ขนาด APK เพิ่มขึ้น 5–15% ขึ้นอยู่กับปริมาณโค้ดที่ได้รับการป้องกัน การทำให้สับสนชื่อและการทำให้สับสนโฟลว์ควบคุม ไม่เพิ่ม ขนาด — พวกมันแทนที่ชื่อที่มีอยู่ โดยเฉลี่ยแล้ว APK ที่มีการป้องกัน DexGuard เต็มรูปแบบจะมีขนาดใหญ่กว่าเดิม 8–12%
ใช่ การกำหนดค่าการป้องกันจะใช้เฉพาะกับบิลด์ประเภทที่เผยแพร่เท่านั้น สำหรับบิลด์ดีบัก DexGuard จะปิดการเข้ารหัสและการตรวจสอบ RASP โดยอัตโนมัติ นักพัฒนาสามารถเปิดใช้ DexGuard ในโหมดดีบักผ่านพารามิเตอร์ guard.force.enable=true ใน gradle.properties เพื่อทดสอบบิลด์ที่ได้รับการป้องกัน
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ
อ่านเพิ่มเติม