DexGuard Android ایپلیکیشنز کو ریورس انجینئرنگ سے بچانے کا ایک حل ہے، جو Guardsquare فراہم کرتا ہے۔ یہ ٹول بلڈ مرحلے پر DEX بائٹ کوڈ کی مبہم سازی، انکرپشن اور فعال نگرانی انجام دیتا ہے۔ Guardsquare, 2025 کے مطابق، یہ پروڈکٹ 10,000 سے زیادہ تجارتی منصوبوں میں استعمال ہوتی ہے، بشمول بینکاری اور ادائیگی کے نظام۔ DexGuard ایپلیکیشن کے سورس کوڈ کو تبدیل کیے بغیر ڈی کمپائلیشن اور رن ٹائم حملوں کے خلاف تحفظ شامل کرکے ProGuard کی صلاحیتوں کو بڑھاتا ہے۔
اہم نکات
DexGuard Android ایپلیکیشنز کو مبہم اور محفوظ کرنے کے لیے ایک تجارتی ٹول ہے، جسے اسی ٹیم نے تیار کیا ہے جس نے ProGuard (Eric Lafortune) بنایا تھا۔ یہ پروڈکٹ 2012 میں ان منصوبوں کے لیے ایک توسیع کے طور پر سامنے آئی جہاں معیاری ProGuard مبہم سازی ناکافی ہے۔ DexGuard پوسٹ کمپائلیشن مرحلے پر کام کرتا ہے، APK پیکجنگ سے پہلے DEX بائٹ کوڈ کو محفوظ شکل میں تبدیل کرتا ہے۔
DexGuard کا فن تعمیر کثیر سطحی تحفظ کے ماڈل پر بنایا گیا ہے۔ پہلی سطح overload induction کا استعمال کرتے ہوئے کلاسز، طریقوں اور فیلڈز کے ناموں کی مبہم سازی ہے۔ دوسری سٹرنگ کنسٹنٹس کی انکرپشن اور رن ٹائم میں سٹب طریقوں کے ذریعے ان کا لوڈ کرنا ہے۔ تیسری دستخطوں کی چیکسم تصدیق کے ذریعے APK انٹیگریٹی کنٹرول ہے۔ Guardsquare (2025) کی ایک تکنیکی رپورٹ کے مطابق، ان سطحوں کا مشترکہ استعمال ایپلیکیشن کے تجزیہ کے وقت کو چند منٹوں سے بڑھا کر کئی ہفتے کر دیتا ہے۔
DexGuard Android پروجیکٹس کی تمام اقسام کو سپورٹ کرتا ہے: ایپلیکیشنز، لائبریریاں، SDK اور Unity گیم پروجیکٹس۔ یہ ٹول com.guardsquare.dexguard پلگ ان کے ذریعے معیاری Gradle پائپ لائن میں ضم ہو جاتا ہے اور ترتیب دینے کے بعد دستی مداخلت کی ضرورت نہیں ہوتی۔
DexGuard اور اوپن سورس متبادلات کے درمیان اہم فرق فعال رن ٹائم تحفظ ہے۔ یہ ٹول صرف کوڈ کو مبہم نہیں کرتا — یہ ایک ایجنٹ شامل کرتا ہے جو ایپلیکیشن کے عملدرآمد کے دوران چیکس انجام دیتا ہے۔ یہ Frida انجیکشن، Xposed یا JDWP ڈیبگنگ جیسے حملوں کا پتہ لگانے اور ان کا جواب دینے کی اجازت دیتا ہے: کریش، جعلی ڈیٹا جنریشن، یا سرور نوٹیفکیشن۔
DexGuard میں مبہم سازی کا عمل بائٹ کوڈ کی تبدیلی کے متواتر مراحل پر مشتمل ہے، جن میں سے ہر ایک ایک مخصوص حملہ ویکٹر کو نشانہ بناتا ہے۔
ایک معیاری مبہم ساز ناموں کو ایک حرفی a, b, c سے بدل دیتا ہے۔ DexGuard overload induction استعمال کرتا ہے — یہ مختلف دستخطوں والے مختلف طریقوں کو ایک ہی مختصر نام دیتا ہے۔ ڈی کمپائلر اوورلوڈ کو حل نہیں کر سکتا اور غلط کوڈ تیار کرتا ہے۔ Guardsquare کے ٹیسٹوں کے مطابق، ناموں کا اوورلوڈنگ ڈی کمپائلیشن کی غلطیوں میں 78% اضافہ کرتا ہے۔
سٹرنگ لٹرلز، URLs، API چابیاں اور ٹوکن بلڈ مرحلے پر AES-256 کا استعمال کرتے ہوئے انکرپٹ کیے جاتے ہیں۔ رن ٹائم میں، ایک سٹب طریقہ استعمال سے پہلے سٹرنگ کو ڈی کرپٹ کرتا ہے اور بعد میں میموری کے علاقے کو صفر کر دیتا ہے۔ یہ DEX فائل میں سٹرنگز کے جامد دیکھنے سے بچاتا ہے۔ انکرپشن کے بغیر نتیجہ کی مثال: ایک حملہ آور strings dexguard.apk چلاتا ہے اور تمام API اختتامی نکات کو سادہ متن میں دیکھتا ہے۔
DexGuard ہر DEX فائل کے لیے SHA-256 ہیش کا حساب لگاتا ہے اور قدر کو نیٹیو پرت میں ذخیرہ کرتا ہے۔ جب ایپلیکیشن لانچ ہوتی ہے، ایجنٹ موجودہ ہیش کا حوالہ سے موازنہ کرتا ہے۔ عدم مطابقت (تبدیل شدہ 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 انضمام کا آغاز روٹ build.gradle میں Guardsquare ریپوزٹری شامل کرنے سے ہوتا ہے۔ ورژن 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 میں، آپ کو Class.forName یا @JavascriptInterface کے ذریعے لوڈ کردہ لائبریری کلاسز کے لیے -keep قواعد شامل کرنے کی ضرورت ہے۔
// 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 سے زیادہ تحفظ کی تکنیکیں شامل ہیں، جو جامد (بلڈ مرحلے پر) اور متحرک (رن ٹائم میں) میں تقسیم ہیں۔ مخصوص تکنیکوں کا انتخاب ایپلیکیشن کے خطرے کے ماڈل پر منحصر ہے۔
وسائل کی انکرپشن — تصاویر، اثاثے اور ترتیب کی فائلیں پہلی رسائی پر انکرپٹ اور ڈی کرپٹ ہوتی ہیں۔ کنٹرول فلو مبہم سازی مردہ کوڈ داخل کرتی ہے اور ہدایات کی ترتیب کو تبدیل کرتی ہے، جس سے بائٹ کوڈ jadx جیسے ڈی کمپائلرز کے لیے ناقابل پڑھ ہو جاتا ہے۔ کنسٹنٹ ہائیڈنگ عددی لٹرلز کو رن ٹائم میں شمار کیے جانے والے ریاضیاتی اظہار سے بدل دیتی ہے۔
Runtime Application Self-Protection — ایپلیکیشن کے اندر ایک ایجنٹ جو رن ٹائم ماحول کے رویے کی نگرانی کرتا ہے۔ DexGuard RASP کا پتہ لگاتا ہے: /proc/self/maps کے ذریعے Frida کنکشن، Xposed Framework کی موجودگی، ڈیبگر (JDWP) کے تحت چلنا، Android ایمولیٹر (QEMU)۔ خطرے کا پتہ چلنے پر، ایک پالیسی متحرک ہوتی ہے — کریش یا غلط ڈیٹا جنریشن۔ OWASP Mobile Security (2025) تحقیق کے مطابق، RASP تحفظ نے 94% عام خودکار حملوں کو روک دیا۔
DexGuard اہم کوڈ حصوں میں بے ترتیب تاخیر کا اضافہ کرتا ہے، متحرک تجزیہ کے دوران بروٹ فورس کا وقت بڑھاتا ہے۔ پیرامیٹر ملی سیکنڈ میں سیٹ کیا جاتا ہے اور ہر بلڈ کے ساتھ بے ترتیب کیا جاتا ہے۔ یہ فیوزنگ ٹولز اور خودکار اسکینرز کے استعمال کو پیچیدہ بناتا ہے۔
کسی موجودہ پروجیکٹ میں DexGuard کو ضم کرتے وقت، لائبریریوں اور مقبول SDKs کے ساتھ پسماندہ مطابقت پر غور کرنا ضروری ہے۔ کچھ لائبریریاں ریفلیکشن کالز کی وجہ سے انتہائی مبہم سازی کے ساتھ غیر مطابقت رکھتی ہیں۔
DexGuard صحیح keep قواعد کے ساتھ Firebase Crashlytics, Google Analytics, Google Play Services, Retrofit, OkHttp, Glide اور Gson کے ساتھ مطابقت رکھتا ہے۔ تشریحات اور کوڈ جنریشن (Dagger, Hilt, Room, DataBinding) استعمال کرنے والی لائبریریوں کو تخلیق کردہ کلاسز کے واضح تحفظ کی ضرورت ہوتی ہے۔ Guardsquare ٹیم مقبول SDKs کے لیے سرکاری ترتیب کے نمونے شائع کرتی ہے۔
کم از کم تقاضے: 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 سالانہ ادائیگی کے ساتھ تجارتی لائسنس کے تحت تقسیم کیا جاتا ہے۔ لاگت کا انحصار منصوبوں کی تعداد اور سبسکرپشن کی قسم پر ہے۔ 2025 تک، ایک پروجیکٹ کے لیے بنیادی لائسنس سالانہ 5,000 USD سے شروع ہوتا ہے۔ سٹارٹ اپس کے لیے 40% تک چھوٹ کے ساتھ شراکت داری پروگرام دستیاب ہے۔
ہاں، DexGuard Kotlin اور Jetpack Compose کے ساتھ مکمل طور پر مطابقت رکھتا ہے، بشمول coroutines اور Compose کمپائلر۔ Kotlin کمپائلر کے ذریعے تخلیق کردہ کلاسز کے لیے اضافی keep قواعد کی ضرورت ہے۔ Guardsquare سرکاری دستاویزات سے kotlin-project.txt ترتیب کے ٹیمپلیٹ کے استعمال کی سفارش کرتا ہے۔
سٹرنگ انکرپشن اور RASP ایجنٹ کا اضافہ محفوظ کوڈ کی مقدار کے لحاظ سے APK کا سائز 5–15% بڑھاتا ہے۔ ناموں کی مبہم سازی اور کنٹرول فلو مبہم سازی سائز نہیں بڑھاتی — یہ موجودہ ناموں کو بدلتی ہیں۔ اوسطاً، مکمل DexGuard تحفظ والا APK اصل سے 8–12% بڑا ہو جاتا ہے۔
ہاں، تحفظ کی ترتیب صرف ریلیز بلڈ کی قسم پر لاگو ہوتی ہے۔ ڈیبگ بلڈ کے لیے، DexGuard خود بخود انکرپشن اور RASP چیکس کو غیر فعال کر دیتا ہے۔ ڈویلپرز gradle.properties میں guard.force.enable=true پیرامیٹر کے ذریعے ڈیبگ موڈ میں DexGuard کو زبردستی فعال کر سکتے ہیں تاکہ محفوظ بلڈ کی جانچ کر سکیں۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں