DexGuard: چیست، مبهم‌سازی و محافظت از برنامه‌های Android

نویسنده: IT Sectr منتشر شده: 2026-04-03 زمان مطالعه: 8 دقیقه

DexGuard — راه‌حلی برای محافظت از برنامه‌های Android در برابر مهندسی معکوس، ارائه‌شده توسط Guardsquare. این ابزار در مرحله ساخت، مبهم‌سازی، رمزگذاری و نظارت فعال بر DEX-بایت‌کد را انجام می‌دهد. بر اساس داده‌های Guardsquare, 2025، این محصول در بیش از ۱۰٬۰۰۰ پروژه تجاری از جمله سیستم‌های بانکی و پرداخت استفاده می‌شود. DexGuard قابلیت‌های ProGuard را گسترش می‌دهد و بدون تغییر کد منبع برنامه، محافظت در برابر دی‌کامپایل و حملات زمان اجرا را اضافه می‌کند.

نکات اصلی

  • DexGuard — مبهم‌ساز تجاری Android، جانشین ProGuard با محافظت پیشرفته در برابر مهندسی معکوس
  • رمزگذاری رشته‌ها و کلاس‌ها در مرحله ساخت انجام می‌شود و بخش‌های خواندنی فایل DEX را برای تحلیل ایستا غیرقابل دسترس می‌کند
  • کنترل یکپارچگی امضای APK را در زمان اجرا بررسی می‌کند و در صورت مشاهده تغییر، اجرا را متوقف می‌کند
  • تشخیص دیباگر، شبیه‌ساز و Frida از تحلیل پویا در زمان اجرا جلوگیری می‌کند
  • عامل RASP دستکاری حافظه و رهگیری فراخوانی‌های سیستمی را در دستگاه در حال اجرا شناسایی می‌کند

DexGuard چیست؟

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 چگونه کار می‌کند

فرآیند مبهم‌سازی در DexGuard شامل مراحل متوالی تبدیل بایت‌کد است که هر کدام بردار حمله خاصی را هدف قرار می‌دهد.

مبهم‌سازی نام با اضافه‌بارگذاری

مبهم‌ساز استاندارد نام‌ها را با a, b, c تک‌کاراکتری جایگزین می‌کند. DexGuard از overload induction استفاده می‌کند — همان نام کوتاه را به متدهای مختلف با امضای متفاوت اختصاص می‌دهد. دی‌کامپایلر نمی‌تواند اضافه‌بارگذاری را حل کند و کد نادرست تولید می‌کند. طبق آزمایش‌های Guardsquare، اضافه‌بارگذاری نام تعداد خطاهای دی‌کامپایل را ۷۸٪ افزایش می‌دهد.

رمزگذاری ثابت‌ها

لیترال‌های رشته‌ای، URLها، کلیدهای API و توکن‌ها با الگوریتم AES-256 در مرحله ساخت رمزگذاری می‌شوند. در زمان اجرا، متد stub رشته را قبل از استفاده رمزگشایی می‌کند و ناحیه حافظه را پس از آن پاک می‌کند. این کار از مشاهده ایستای رشته‌ها در فایل DEX محافظت می‌کند. نمونه نتیجه بدون رمزگذاری: مهاجم strings dexguard.apk را اجرا می‌کند و همه endpointهای 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 ریشه آغاز می‌شود. پلاگین نسخه ۹.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

# مبهم‌سازی با اضافه‌بارگذاری نام‌ها
@overloadInduction

# کنترل یکپارچگی APK
@integrityCheck

# محافظت در برابر دیباگ و شبیه‌ساز
@antiDebug
@antiEmulator

دستورالعمل‌های @stringEncryption و @overloadInduction برای محافظت از کد تجاری کلیدی هستند. هنگام فعال‌سازی همه حاشیه‌نویسی‌ها، زمان ساخت ۳۰–۶۰ ثانیه افزایش می‌یابد که با سطح محافظت توجیه می‌شود. پیکربندی در 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 شامل بیش از ۲۰ تکنیک محافظت است که به دو دسته ایستا (در مرحله ساخت) و پویا (در زمان اجرا) تقسیم می‌شوند. انتخاب تکنیک‌های خاص به مدل تهدید برنامه بستگی دارد.

محافظت ایستا

رمزگذاری منابع — تصاویر، دارایی‌ها و فایل‌های پیکربندی در اولین دسترسی رمزگذاری و رمزگشایی می‌شوند. مبهم‌سازی جریان کنترل (control flow obfuscation) کد مرده وارد می‌کند و ترتیب دستورالعمل‌ها را تغییر می‌دهد و بایت‌کد را برای دی‌کامپایلرهایی مانند jadx ناخوانا می‌کند. پنهان‌سازی ثابت‌ها (constant hiding) لیترال‌های عددی را با عبارات حسابی محاسبه‌شونده در زمان اجرا جایگزین می‌کند.

محافظت پویا (RASP)

Runtime Application Self-Protection — عاملی در داخل برنامه که رفتار محیط اجرا را نظارت می‌کند. DexGuard RASP تشخیص می‌دهد: اتصال Frida از طریق /proc/self/maps، وجود Xposed Framework، اجرا زیر دیباگر (JDWP)، شبیه‌ساز Android (QEMU). هنگام تشخیص تهدید، سیاست فعال می‌شود — crash یا تولید داده‌های نادرست. طبق تحقیق OWASP Mobile Security (2025)، محافظت RASP ۹۴٪ از حملات خودکار معمول را متوقف کرده است.

محافظت در برابر حملات زمان‌محور

DexGuard تأخیرهای تصادفی را در بخش‌های حیاتی کد اضافه می‌کند و زمان جستجو را در تحلیل پویا افزایش می‌دهد. پارامتر به میلی‌ثانیه تعیین می‌شود و در هر ساخت تصادفی می‌گردد. این کار استفاده از ابزارهای فازینگ و اسکنرهای خودکار را دشوار می‌کند.

قوانین یکپارچه‌سازی و سازگاری

در پیاده‌سازی DexGuard در یک پروژه موجود باید سازگاری معکوس با کتابخانه‌ها و SDKهای محبوب در نظر گرفته شود. برخی کتابخانه‌ها به دلیل فراخوانی‌های انعکاسی با مبهم‌سازی شدید ناسازگار هستند.

سازگاری با 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 را آسان می‌کند.

سوالات متداول

DexGuard چه تفاوتی با ProGuard دارد؟

ProGuard — مبهم‌ساز رایگان با جایگزینی پایه نام و بهینه‌سازی بایت‌کد. DexGuard رمزگذاری رشته AES-256، overload induction برای نام‌ها، عامل RASP در زمان اجرا، کنترل یکپارچگی APK و تشخیص Frida، Xposed، شبیه‌ساز و دیباگر را اضافه می‌کند. ProGuard برای برنامه‌های معمولی کافی است، DexGuard — برای برنامه‌های بانکی و شرکتی.

هزینه مجوز DexGuard چقدر است؟

DexGuard با مجوز تجاری با پرداخت سالانه توزیع می‌شود. هزینه به تعداد پروژه‌ها و نوع اشتراک بستگی دارد. برای سال ۲۰۲۵ مجوز پایه برای یک پروژه از ۵٬۰۰۰ USD در سال شروع می‌شود. برای استارتاپ‌ها برنامه شراکت با تخفیف تا ۴۰٪ در دسترس است.

آیا می‌توان از DexGuard با Kotlin و Jetpack Compose استفاده کرد؟

بله، DexGuard کاملاً با Kotlin و Jetpack Compose از جمله کوروتین‌ها و کامپایلر Compose سازگار است. قوانین keep اضافی برای کلاس‌های تولیدشده توسط کامپایلر Kotlin لازم است. Guardsquare استفاده از الگوی پیکربندی kotlin-project.txt از مستندات رسمی را توصیه می‌کند.

آیا DexGuard اندازه APK را افزایش می‌دهد؟

رمزگذاری رشته‌ها و افزودن عامل RASP APK را ۵–۱۵٪ بسته به حجم کد محافظت‌شده افزایش می‌دهد. مبهم‌سازی نام و مبهم‌سازی جریان کنترل اندازه را افزایش نمی‌دهند — آنها نام‌های موجود را جایگزین می‌کنند. به طور متوسط APK با محافظت کامل DexGuard ۸–۱۲٪ بزرگتر از اصلی می‌شود.

آیا می‌توان DexGuard را برای دیباگ غیرفعال کرد؟

بله، پیکربندی محافظت فقط برای بیلد انتشار (release build type) اعمال می‌شود. برای بیلد دیباگ، DexGuard به طور خودکار رمزگذاری و بررسی‌های RASP را غیرفعال می‌کند. توسعه‌دهنده می‌تواند از طریق پارامتر guard.force.enable=true در gradle.properties DexGuard را در حالت دیباگ برای تست بیلد محافظت‌شده اجباری فعال کند.

خلاصه

  • DexGuard — ابزار محافظت تجاری برای Android که قابلیت‌های ProGuard را با مجموعه کامل تکنیک‌های ضد مهندسی معکوس گسترش می‌دهد
  • مبهم‌سازی نام با overload induction کد دی‌کامپایل‌شده را با تولید اضافه‌بارگذاری‌های غیرقابل حل متدها غیرقابل کار می‌کند
  • رمزگذاری ثابت‌های رشته‌ای و منابع با الگوریتم AES-256 تحلیل ایستای فایل DEX را از jadx و strings مسدود می‌کند
  • عامل RASP Frida, Xposed, دیباگر JDWP و شبیه‌ساز را در زمان اجرا تشخیص می‌دهد و در صورت تشخیص تهدید خاتمه اضطراری انجام می‌دهد
  • کنترل یکپارچگی APK از طریق هش SHA-256 در لایه بومی از اجرای نسخه تغییر یافته برنامه جلوگیری می‌کند
  • یکپارچه‌سازی در پروژه Gradle با حاشیه‌نویسی‌های @stringEncryption, @overloadInduction و @antiDebug نیاز به ۱۰–۱۵ دقیقه پیکربندی دارد
  • DexGuard — ابزار توصیه‌شده برای برنامه‌های بانکی، پرداخت و پزشکی Android که در آنها به خطر افتادن کد خطرات مالی به همراه دارد

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید