DexGuard — راهحلی برای محافظت از برنامههای Android در برابر مهندسی معکوس، ارائهشده توسط Guardsquare. این ابزار در مرحله ساخت، مبهمسازی، رمزگذاری و نظارت فعال بر DEX-بایتکد را انجام میدهد. بر اساس دادههای Guardsquare, 2025، این محصول در بیش از ۱۰٬۰۰۰ پروژه تجاری از جمله سیستمهای بانکی و پرداخت استفاده میشود. DexGuard قابلیتهای ProGuard را گسترش میدهد و بدون تغییر کد منبع برنامه، محافظت در برابر دیکامپایل و حملات زمان اجرا را اضافه میکند.
نکات اصلی
DexGuard — یک ابزار تجاری برای مبهمسازی و محافظت از برنامههای Android است که توسط همان تیمی ساخته شده که ProGuard را ایجاد کرده (Eric Lafortune). این محصول در سال ۲۰۱۲ به عنوان توسعهای برای پروژههایی ظاهر شد که مبهمسازی استاندارد ProGuard برایشان کافی نبود. DexGuard در مرحله پس از کامپایل کار میکند و DEX-بایتکد را قبل از بستهبندی APK به فرم محافظتشده تبدیل میکند.
معماری DexGuard بر مدل محافظت چندلایه ساخته شده است. لایه اول — مبهمسازی نام کلاسها، متدها و فیلدها با استفاده از اضافهبارگذاری نام (overload induction). لایه دوم — رمزگذاری ثابتهای رشتهای و بارگذاری آنها از طریق متدهای stub در زمان اجرا. لایه سوم — کنترل یکپارچگی APK از طریق بررسی جمع کنترلی امضاها. طبق گزارش فنی Guardsquare (2025)، استفاده ترکیبی از این لایهها زمان تحلیل برنامه را از چند دقیقه به چند هفته افزایش میدهد.
DexGuard از همه انواع پروژههای Android پشتیبانی میکند: برنامهها، کتابخانهها، SDK و پروژههای بازی Unity. این ابزار از طریق پلاگین com.guardsquare.dexguard در خط لوله استاندارد Gradle یکپارچه میشود و پس از پیکربندی نیاز به دخالت دستی ندارد.
تفاوت کلیدی DexGuard با نمونههای متنباز — محافظت فعال در زمان اجرا. ابزار نه تنها کد را مبهم میکند، بلکه عاملی اضافه میکند که در حین کار برنامه بررسیهایی انجام میدهد. این امکان تشخیص حملاتی مانند تزریق Frida، Xposed یا دیباگ از طریق JDWP و واکنش به آنها را فراهم میکند: پایان اضطراری، تولید دادههای نادرست یا اعلان به سرور.
فرآیند مبهمسازی در DexGuard شامل مراحل متوالی تبدیل بایتکد است که هر کدام بردار حمله خاصی را هدف قرار میدهد.
مبهمساز استاندارد نامها را با a, b, c تککاراکتری جایگزین میکند. DexGuard از overload induction استفاده میکند — همان نام کوتاه را به متدهای مختلف با امضای متفاوت اختصاص میدهد. دیکامپایلر نمیتواند اضافهبارگذاری را حل کند و کد نادرست تولید میکند. طبق آزمایشهای Guardsquare، اضافهبارگذاری نام تعداد خطاهای دیکامپایل را ۷۸٪ افزایش میدهد.
لیترالهای رشتهای، URLها، کلیدهای API و توکنها با الگوریتم AES-256 در مرحله ساخت رمزگذاری میشوند. در زمان اجرا، متد stub رشته را قبل از استفاده رمزگشایی میکند و ناحیه حافظه را پس از آن پاک میکند. این کار از مشاهده ایستای رشتهها در فایل DEX محافظت میکند. نمونه نتیجه بدون رمزگذاری: مهاجم strings dexguard.apk را اجرا میکند و همه endpointهای 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 ریشه آغاز میشود. پلاگین نسخه ۹.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
# مبهمسازی با اضافهبارگذاری نامها
@overloadInduction
# کنترل یکپارچگی APK
@integrityCheck
# محافظت در برابر دیباگ و شبیهساز
@antiDebug
@antiEmulator
دستورالعملهای @stringEncryption و @overloadInduction برای محافظت از کد تجاری کلیدی هستند. هنگام فعالسازی همه حاشیهنویسیها، زمان ساخت ۳۰–۶۰ ثانیه افزایش مییابد که با سطح محافظت توجیه میشود. پیکربندی در 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 شامل بیش از ۲۰ تکنیک محافظت است که به دو دسته ایستا (در مرحله ساخت) و پویا (در زمان اجرا) تقسیم میشوند. انتخاب تکنیکهای خاص به مدل تهدید برنامه بستگی دارد.
رمزگذاری منابع — تصاویر، داراییها و فایلهای پیکربندی در اولین دسترسی رمزگذاری و رمزگشایی میشوند. مبهمسازی جریان کنترل (control flow obfuscation) کد مرده وارد میکند و ترتیب دستورالعملها را تغییر میدهد و بایتکد را برای دیکامپایلرهایی مانند jadx ناخوانا میکند. پنهانسازی ثابتها (constant hiding) لیترالهای عددی را با عبارات حسابی محاسبهشونده در زمان اجرا جایگزین میکند.
Runtime Application Self-Protection — عاملی در داخل برنامه که رفتار محیط اجرا را نظارت میکند. DexGuard RASP تشخیص میدهد: اتصال Frida از طریق /proc/self/maps، وجود Xposed Framework، اجرا زیر دیباگر (JDWP)، شبیهساز Android (QEMU). هنگام تشخیص تهدید، سیاست فعال میشود — crash یا تولید دادههای نادرست. طبق تحقیق OWASP Mobile Security (2025)، محافظت RASP ۹۴٪ از حملات خودکار معمول را متوقف کرده است.
DexGuard تأخیرهای تصادفی را در بخشهای حیاتی کد اضافه میکند و زمان جستجو را در تحلیل پویا افزایش میدهد. پارامتر به میلیثانیه تعیین میشود و در هر ساخت تصادفی میگردد. این کار استفاده از ابزارهای فازینگ و اسکنرهای خودکار را دشوار میکند.
در پیادهسازی DexGuard در یک پروژه موجود باید سازگاری معکوس با کتابخانهها و SDKهای محبوب در نظر گرفته شود. برخی کتابخانهها به دلیل فراخوانیهای انعکاسی با مبهمسازی شدید ناسازگار هستند.
DexGuard با قوانین keep صحیح با Firebase Crashlytics, Google Analytics, Google Play Services, Retrofit, OkHttp, Glide و Gson سازگار است. کتابخانههایی که از حاشیهنویسی و تولید کد استفاده میکنند (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 — مبهمساز رایگان با جایگزینی پایه نام و بهینهسازی بایتکد. DexGuard رمزگذاری رشته AES-256، overload induction برای نامها، عامل RASP در زمان اجرا، کنترل یکپارچگی APK و تشخیص Frida، Xposed، شبیهساز و دیباگر را اضافه میکند. ProGuard برای برنامههای معمولی کافی است، DexGuard — برای برنامههای بانکی و شرکتی.
DexGuard با مجوز تجاری با پرداخت سالانه توزیع میشود. هزینه به تعداد پروژهها و نوع اشتراک بستگی دارد. برای سال ۲۰۲۵ مجوز پایه برای یک پروژه از ۵٬۰۰۰ USD در سال شروع میشود. برای استارتاپها برنامه شراکت با تخفیف تا ۴۰٪ در دسترس است.
بله، DexGuard کاملاً با Kotlin و Jetpack Compose از جمله کوروتینها و کامپایلر Compose سازگار است. قوانین keep اضافی برای کلاسهای تولیدشده توسط کامپایلر Kotlin لازم است. Guardsquare استفاده از الگوی پیکربندی kotlin-project.txt از مستندات رسمی را توصیه میکند.
رمزگذاری رشتهها و افزودن عامل RASP APK را ۵–۱۵٪ بسته به حجم کد محافظتشده افزایش میدهد. مبهمسازی نام و مبهمسازی جریان کنترل اندازه را افزایش نمیدهند — آنها نامهای موجود را جایگزین میکنند. به طور متوسط APK با محافظت کامل DexGuard ۸–۱۲٪ بزرگتر از اصلی میشود.
بله، پیکربندی محافظت فقط برای بیلد انتشار (release build type) اعمال میشود. برای بیلد دیباگ، DexGuard به طور خودکار رمزگذاری و بررسیهای RASP را غیرفعال میکند. توسعهدهنده میتواند از طریق پارامتر guard.force.enable=true در gradle.properties DexGuard را در حالت دیباگ برای تست بیلد محافظتشده اجباری فعال کند.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید