DexGuard: nó là gì, che giấu mã và bảo vệ ứng dụng Android

Tác giả: IT Sectr Đã đăng: 2026-04-03 Thời gian đọc: 8 phút

DexGuard là một giải pháp bảo vệ ứng dụng Android khỏi kỹ thuật đảo ngược, do Guardsquare cung cấp. Công cụ này thực hiện che giấu mã, mã hóa và giám sát chủ động bytecode DEX ở giai đoạn xây dựng. Theo Guardsquare, 2025, sản phẩm được sử dụng trong hơn 10.000 dự án thương mại, bao gồm cả hệ thống ngân hàng và thanh toán. DexGuard mở rộng khả năng của ProGuard bằng cách thêm bảo vệ chống dịch ngược và các cuộc tấn công thời gian chạy mà không thay đổi mã nguồn của ứng dụng.

Những điểm chính

  • DexGuard là một công cụ che giấu mã Android thương mại, kế thừa ProGuard với khả năng bảo vệ nâng cao chống kỹ thuật đảo ngược
  • Mã hóa chuỗi và lớp xảy ra ở giai đoạn xây dựng, làm cho các phần đọc của tệp DEX không thể truy cập được đối với phân tích tĩnh
  • Kiểm soát tính toàn vẹn xác minh chữ ký APK trong thời gian chạy và dừng thực thi khi phát hiện sửa đổi
  • Phát hiện trình gỡ lỗi, trình giả lập và Frida ngăn chặn phân tích động trong thời gian chạy
  • Tác nhân RASP phát hiện thao túng bộ nhớ và chặn các cuộc gọi hệ thống trên thiết bị đang chạy

DexGuard là gì?

DexGuard là một công cụ thương mại để che giấu và bảo vệ các ứng dụng Android, được phát triển bởi cùng nhóm đã tạo ra ProGuard (Eric Lafortune). Sản phẩm xuất hiện vào năm 2012 như một phần mở rộng cho các dự án nơi việc che giấu mã tiêu chuẩn của ProGuard là không đủ. DexGuard hoạt động ở giai đoạn sau biên dịch, chuyển đổi bytecode DEX thành dạng được bảo vệ trước khi đóng gói APK.

Kiến trúc DexGuard được xây dựng trên mô hình bảo vệ đa lớp. Lớp đầu tiên là che giấu tên lớp, phương thức và trường bằng cách sử dụng overload induction. Lớp thứ hai là mã hóa các hằng chuỗi và tải chúng thông qua các phương thức stub trong thời gian chạy. Lớp thứ ba là kiểm soát tính toàn vẹn của APK thông qua xác minh tổng kiểm tra chữ ký. Theo một báo cáo kỹ thuật của Guardsquare (2025), việc sử dụng kết hợp các lớp này làm tăng thời gian phân tích ứng dụng từ vài phút lên vài tuần.

DexGuard hỗ trợ tất cả các loại dự án Android: ứng dụng, thư viện, SDK và dự án trò chơi Unity. Công cụ này tích hợp vào quy trình Gradle tiêu chuẩn thông qua plugin com.guardsquare.dexguard và không cần can thiệp thủ công sau khi thiết lập.

Sự khác biệt chính giữa DexGuard và các giải pháp thay thế mã nguồn mở là bảo vệ chủ động trong thời gian chạy. Công cụ này không chỉ che giấu mã — nó thêm một tác nhân thực hiện kiểm tra trong quá trình thực thi ứng dụng. Điều này cho phép phát hiện các cuộc tấn công như chèn Frida, Xposed hoặc gỡ lỗi JDWP và phản ứng với chúng: treo ứng dụng, tạo dữ liệu giả hoặc thông báo máy chủ.

Che giấu mã hoạt động như thế nào trong DexGuard

Quá trình che giấu mã trong DexGuard bao gồm các giai đoạn chuyển đổi bytecode tuần tự, mỗi giai đoạn nhắm vào một vectơ tấn công cụ thể.

Che giấu tên với overload induction

Một công cụ che giấu mã tiêu chuẩn thay thế tên bằng các ký tự đơn a, b, c. DexGuard sử dụng overload induction — nó gán cùng một tên ngắn cho các phương thức khác nhau với chữ ký khác nhau. Trình dịch ngược không thể giải quyết tình trạng quá tải và tạo ra mã không chính xác. Theo các thử nghiệm của Guardsquare, việc quá tải tên làm tăng lỗi dịch ngược lên 78%.

Mã hóa hằng số

Các chuỗi ký tự, URL, khóa API và mã thông báo được mã hóa bằng AES-256 ở giai đoạn xây dựng. Trong thời gian chạy, một phương thức stub giải mã chuỗi trước khi sử dụng và xóa vùng bộ nhớ sau đó. Điều này bảo vệ khỏi việc xem tĩnh các chuỗi trong tệp DEX. Ví dụ về kết quả nếu không có mã hóa: kẻ tấn công chạy strings dexguard.apk và thấy tất cả các điểm cuối API ở dạng văn bản thuần.

Kiểm soát tính toàn vẹn mã

DexGuard tính toán hàm băm SHA-256 cho mỗi tệp DEX và lưu trữ giá trị trong lớp native. Khi ứng dụng khởi chạy, tác nhân so sánh hàm băm hiện tại với giá trị tham chiếu. Nếu không khớp (APK đã bị sửa đổi), ứng dụng sẽ kết thúc. Ngoài ra, có thể cấu hình kiểm tra tính toàn vẹn cho tài nguyên và tệp kê khai.

groovy
// build.gradle (cấp ứng dụng)
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 vs ProGuard: sự khác biệt chính

Cả hai công cụ đều được phát triển bởi cùng một công ty nhưng nhắm đến các tình huống khác nhau. ProGuard là một trình tối ưu hóa mã nguồn mở và công cụ che giấu mã tối thiểu được bao gồm theo mặc định trong Android SDK. DexGuard là một sản phẩm thương mại bổ sung các mức bảo vệ không có trong phiên bản miễn phí.

Đặc điểmProGuardDexGuard
Giấy phépMã nguồn mở (GPL)Thương mại
Che giấu tênThay thế đơn giảnOverload induction
Mã hóa chuỗiKhôngAES-256
Bảo vệ RASPKhông
Phát hiện FridaKhông
Bảo vệ gỡ lỗiKhông
Kiểm soát tính toàn vẹnKhôngBăm SHA-256
Hỗ trợ UnityKhông

Sự lựa chọn giữa các công cụ được xác định bởi loại thông tin được bảo vệ. Đối với một ứng dụng di động thông thường, ProGuard là đủ. Đối với các ứng dụng ngân hàng, thanh toán và y tế nơi việc tiết lộ mã dẫn đến rủi ro tài chính hoặc quy định, DexGuard là giải pháp được khuyến nghị. Theo OWASP Mobile Top 10 (2024), việc thiếu che giấu mã trong các ứng dụng có dữ liệu nhạy cảm được coi là rủi ro nghiêm trọng.

Cấu hình DexGuard trong dự án Gradle

Tích hợp DexGuard bắt đầu bằng việc thêm kho lưu trữ Guardsquare trong build.gradle gốc. Plugin phiên bản 9.x tương thích với AGP 7.4–8.5 và Gradle 7.6–8.7. Cấu hình bảo vệ được định nghĩa trong một tệp dexguard-project.txt riêng biệt, nơi các kỹ thuật cụ thể được kích hoạt.

groovy
// build.gradle gốc
buildscript {
    repositories {
        maven { url "https://maven.guardsquare.com/dexguard" }
    }
}

// dexguard-project.txt — cấu hình tối thiểu
# Mã hóa chuỗi
@stringEncryption

# Che giấu mã với overload induction
@overloadInduction

# Kiểm soát tính toàn vẹn APK
@integrityCheck

# Bảo vệ khỏi trình gỡ lỗi và trình giả lập
@antiDebug
@antiEmulator

Các chỉ thị @stringEncryption@overloadInduction là chìa khóa để bảo vệ mã thương mại. Khi tất cả các chú thích được kích hoạt, thời gian xây dựng tăng 30–60 giây, điều này được biện minh bởi mức độ bảo vệ. Cấu hình được lưu trữ trong VCS và chỉ được áp dụng cho bản dựng phát hành.

Điều quan trọng là cấu hình các ngoại lệ cho các lớp sử dụng phản chiếu. DexGuard, giống như ProGuard, không tự động phân tích phản chiếu. Trong dexguard-project.txt, bạn cần thêm các quy tắc -keep cho các lớp thư viện được tải qua Class.forName hoặc @JavascriptInterface.

groovy
// dexguard-project.txt — quy tắc keep
# Giữ các lớp mô hình Gson
-keep class com.example.model.** { *; }

# Giữ các giao diện WebView
-keepclassmembers class * {
    @android.webkit.JavascriptInterface <methods>;
}

# Loại trừ báo cáo sự cố Firebase
-keep class com.google.firebase.** { *; }

Kỹ thuật bảo vệ của DexGuard

DexGuard bao gồm hơn 20 kỹ thuật bảo vệ, được chia thành tĩnh (ở giai đoạn xây dựng) và động (trong thời gian chạy). Việc lựa chọn kỹ thuật cụ thể phụ thuộc vào mô hình mối đe dọa của ứng dụng.

Bảo vệ tĩnh

Mã hóa tài nguyên — hình ảnh, tài sản và tệp cấu hình được mã hóa và giải mã khi truy cập lần đầu. Che giấu luồng điều khiển chèn mã chết và thay đổi trình tự lệnh, làm cho bytecode không thể đọc được đối với các trình dịch ngược như jadx. Ẩn hằng số thay thế các ký tự số bằng các biểu thức số học được tính trong thời gian chạy.

Bảo vệ động (RASP)

Runtime Application Self-Protection — một tác nhân bên trong ứng dụng giám sát hành vi của môi trường thời gian chạy. DexGuard RASP phát hiện: kết nối Frida qua /proc/self/maps, sự hiện diện của Xposed Framework, chạy dưới trình gỡ lỗi (JDWP), trình giả lập Android (QEMU). Khi phát hiện mối đe dọa, một chính sách được kích hoạt — treo ứng dụng hoặc tạo dữ liệu không chính xác. Theo nghiên cứu OWASP Mobile Security (2025), bảo vệ RASP đã chặn 94% các cuộc tấn công tự động điển hình.

Bảo vệ khỏi các cuộc tấn công dựa trên thời gian

DexGuard thêm độ trễ ngẫu nhiên trong các phần mã quan trọng, tăng thời gian brute force trong quá trình phân tích động. Tham số được đặt bằng mili giây và được ngẫu nhiên hóa với mỗi bản dựng. Điều này làm phức tạp việc sử dụng các công cụ fuzzing và máy quét tự động.

Hướng dẫn tích hợp và tương thích

Khi tích hợp DexGuard vào một dự án hiện có, cần xem xét khả năng tương thích ngược với các thư viện và SDK phổ biến. Một số thư viện không tương thích với việc che giấu mã cực độ do các cuộc gọi phản chiếu.

Tương thích với các SDK phổ biến

DexGuard tương thích với Firebase Crashlytics, Google Analytics, Google Play Services, Retrofit, OkHttp, Glide và Gson với các quy tắc keep chính xác. Các thư viện sử dụng chú thích và tạo mã (Dagger, Hilt, Room, DataBinding) yêu cầu bảo tồn rõ ràng các lớp được tạo. Nhóm Guardsquare công bố các mẫu cấu hình chính thức cho các SDK phổ biến.

Yêu cầu môi trường

Yêu cầu tối thiểu: Android Gradle Plugin 7.4, Gradle 7.6, JDK 11. DexGuard 9.1 hỗ trợ targetSdk 34 và compileSdk 34. Đối với Java 17 và AGP 8.2+, cần có DexGuard phiên bản 9.2 trở lên. Công cụ này không tương thích với R8 ở chế độ tối ưu hóa hoàn toàn — khi sử dụng DexGuard, R8 tự động bị vô hiệu hóa.

Kiểm thử sau khi che giấu mã

Sau khi cấu hình DexGuard, cần tiến hành kiểm thử hồi quy tất cả các đường dẫn bị ảnh hưởng bởi phản chiếu và tải lớp động. Nên chạy kiểm thử tự động giao diện người dùng trên bản dựng có bảo vệ được kích hoạt trước khi phát hành. Guardsquare cung cấp tiện ích DexGuard Tracer, ghi lại các lỗi ClassNotFoundException trong thời gian chạy mà không treo ứng dụng, đơn giản hóa việc gỡ lỗi quy tắc keep.

Các câu hỏi thường gặp

DexGuard khác ProGuard như thế nào?

ProGuard là một công cụ che giấu mã miễn phí với thay thế tên cơ bản và tối ưu hóa bytecode. DexGuard thêm mã hóa chuỗi AES-256, overload induction cho tên, tác nhân RASP trong thời gian chạy, kiểm soát tính toàn vẹn APK và phát hiện Frida, Xposed, trình giả lập và trình gỡ lỗi. ProGuard đủ cho các ứng dụng thông thường, DexGuard dành cho các ứng dụng ngân hàng và doanh nghiệp.

Giấy phép DexGuard có giá bao nhiêu?

DexGuard được phân phối theo giấy phép thương mại với thanh toán hàng năm. Chi phí phụ thuộc vào số lượng dự án và loại đăng ký. Tính đến năm 2025, giấy phép cơ bản cho một dự án bắt đầu từ 5.000 USD mỗi năm. Chương trình đối tác với chiết khấu lên đến 40% dành cho các công ty khởi nghiệp.

Có thể sử dụng DexGuard với Kotlin và Jetpack Compose không?

Có, DexGuard hoàn toàn tương thích với Kotlin và Jetpack Compose, bao gồm coroutines và trình biên dịch Compose. Cần có các quy tắc keep bổ sung cho các lớp được tạo bởi trình biên dịch Kotlin. Guardsquare khuyến nghị sử dụng mẫu cấu hình kotlin-project.txt từ tài liệu chính thức.

DexGuard có làm tăng kích thước APK không?

Mã hóa chuỗi và thêm tác nhân RASP làm tăng kích thước APK từ 5–15% tùy thuộc vào lượng mã được bảo vệ. Che giấu tên và che giấu luồng điều khiển không làm tăng kích thước — chúng thay thế các tên hiện có. Trung bình, APK với bảo vệ DexGuard đầy đủ trở nên lớn hơn 8–12% so với bản gốc.

Có thể tắt DexGuard để gỡ lỗi không?

Có, cấu hình bảo vệ chỉ được áp dụng cho loại bản dựng phát hành. Đối với bản dựng gỡ lỗi, DexGuard tự động vô hiệu hóa mã hóa và kiểm tra RASP. Nhà phát triển có thể buộc kích hoạt DexGuard ở chế độ gỡ lỗi thông qua tham số guard.force.enable=true trong gradle.properties để kiểm thử bản dựng được bảo vệ.

Tổng kết

  • DexGuard là một công cụ bảo vệ thương mại cho Android mở rộng khả năng của ProGuard với bộ kỹ thuật chống đảo ngược đầy đủ
  • Che giấu mã với overload induction làm cho mã đã dịch ngược không hoạt động bằng cách tạo ra các overload phương thức không thể giải quyết
  • Mã hóa hằng chuỗi và tài nguyên bằng AES-256 chặn phân tích tĩnh tệp DEX qua jadx và strings
  • Tác nhân RASP phát hiện Frida, Xposed, trình gỡ lỗi JDWP và trình giả lập trong thời gian chạy, thực hiện treo ứng dụng khi phát hiện mối đe dọa
  • Kiểm soát tính toàn vẹn APK qua hàm băm SHA-256 trong lớp native ngăn chặn việc chạy phiên bản ứng dụng đã bị sửa đổi
  • Tích hợp vào dự án Gradle với các chú thích @stringEncryption, @overloadInduction và @antiDebug cần 10–15 phút thiết lập
  • DexGuard là công cụ được khuyến nghị cho các ứng dụng Android ngân hàng, thanh toán và y tế nơi việc xâm phạm mã dẫn đến rủi ro tài chính

Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay

IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.

Thảo luận dự án

Đọc thêm