Obfuscator — کوڈ مبہم کاری کے طریقے اور حفاظتی ٹولز کی وضاحت

مصنف: IT Sectr اشاعت: 2026-05-19 مطالعے کا وقت: 8 منٹ

Obfuscator ایک ٹول ہے جو سورس کوڈ کو اس کی فعالیت تبدیل کیے بغیر پڑھنے میں مشکل شکل میں تبدیل کرتا ہے۔ Obfuscator دانشورانہ املاک کے تحفظ، کوڈ کے تجزیہ کو پیچیدہ بنانے اور ریورس انجینئرنگ کو روکنے کے لیے استعمال ہوتا ہے۔ Android Developers Documentation کے مطابق، R8 اور ProGuard کے ذریعے مبہم کاری Android ایپلیکیشنز کے پروڈکشن بلڈ کا ایک معیاری مرحلہ ہے۔

اہم نکات

  • مبہم کاری عمل درآمد کے منطق کو برقرار رکھتے ہوئے کوڈ کو سمجھنے میں پیچیدہ شکل میں تبدیل کرتی ہے
  • ProGuard ایک کلاسک Java اور Android مبہم کار ہے جو کمپریشن، اصلاح اور مبہم کاری کو سپورٹ کرتا ہے
  • R8 ایک جدید Android مبہم کار ہے جو ProGuard کی جگہ لیتا ہے، Android Gradle Plugin میں شامل ہے
  • متغیر کے نام کوڈ کو سمجھنے میں مشکل پیدا کرنے کے لیے مختصر شناخت کنندگان (a, b, c) سے بدل دیے جاتے ہیں
  • کنٹرول فلو مبہم کاری مردہ شاخوں اور شرائط کی نقل کے ذریعے عمل درآمد کے بہاؤ کو الجھاتی ہے

Obfuscator کیا ہے؟

Obfuscator ایک پروگرام ہے جو مبہم کاری انجام دیتا ہے: پڑھنے کے قابل کوڈ کو فنکional طور پر مساوی لیکن انسانوں کے لیے ناقابل پڑھنے کوڈ میں تبدیل کرنا۔ ایک مبہم کار کے اہم کام ہیں شناخت کنندگان کی مسخ (identifier mangling)، ڈیبگ معلومات کو ہٹانا، کنٹرول فلو مبہم کاری اور سٹرنگ خفیہ کاری۔

مبہم کاری خفیہ کاری نہیں ہے۔ خفیہ کردہ کوڈ ڈیکرپشن کے بغیر عمل میں نہیں آ سکتا۔ مبہم کردہ کوڈ براہ راست JVM، ART یا JavaScript انجن پر چلتا ہے، لیکن انسانوں کے لیے اسے سمجھنا انتہائی مشکل ہے۔ مبہم کاری مکمل تحفظ فراہم نہیں کرتی — ایک پرعزم ماہر ہمیشہ ڈی مبہم کار یا رن ٹائم ڈیبگنگ کے ذریعے منطق کو بحال کر سکتا ہے۔

مبہم کاروں کی ترقی کی تاریخ

پہلا تجارتی مبہم کار ProGuard 2002 میں Java ایپلٹس کے لیے ایک ٹول کے طور پر سامنے آیا۔ Android (2008) کی ترقی کے ساتھ، ProGuard موبائل ڈیولپمنٹ کے لیے معیار بن گیا۔ 2018 میں، Google نے Android Gradle Plugin 3.4 کے لیے ProGuard کے متبادل کے طور پر R8 جاری کیا۔ R8 ProGuard سے 2-3 گنا تیز ہے اور SSA (Static Single Assignment) سطح پر گہری اصلاح کی وجہ سے زیادہ کمپیکٹ بائٹ کوڈ تیار کرتا ہے — ایک انٹرمیڈیٹ نمائندگی کا فارمیٹ جو ڈیٹا فلو تجزیہ کی اجازت دیتا ہے۔

ویب ڈیولپمنٹ میں، مبہم کاری سادہ منیفائرز (YUI Compressor، 2007) سے پیچیدہ AST ٹرانسفارمرز (Obfuscator.io، 2016) تک ترقی کر گئی۔ جدید JavaScript مبہم کار کنٹرول فلو فلیٹننگ، اوپیک پریڈیکیٹس (شرائط جو ہمیشہ صحیح یا غلط ہوتی ہیں لیکن تجزیہ کار کے لیے واضح نہیں ہوتیں) اور رن ٹائم پر خود ڈیکرپشن کے ساتھ سٹرنگ خفیہ کاری استعمال کرتے ہیں۔ Jscrambler (2012) مبہم کاری کو ڈیبگر تحفظ اور DRM میکانزم کے ساتھ ضم کرتا ہے۔

استعمال کا دائرہ وسیع ہے۔ موبائل ڈیولپمنٹ میں، مبہم کار APK ڈی کمپائلرز (jadx، APKTool، dex2jar) کے ذریعے کوڈ کی چوری سے بچاتے ہیں۔ ویب ڈیولپمنٹ میں، JavaScript مبہم کاری الگورتھم، API کنجیاں اور کلائنٹ سائیڈ کاروباری منطق کی حفاظت کرتی ہے۔ لائبریریوں اور SDK میں، مبہم کاری حریفوں کو کوڈ استعمال کرنے سے روکتی ہے۔

ایک مبہم کار کوڈ کے ساتھ کیا کرتا ہے

ٹیکنکمبہم کاری سے پہلےمبہم کاری کے بعد
کلاس کا نام بدلناNetworkManagera
میتھڈ کا نام بدلناsendRequest()b()
سٹرنگ خفیہ کاری"API_KEY"decrypt("x9fK2p")
شرائط کی مبہم کاریif (a > b)if (a > b ? true : false)

کوڈ مبہم کاری کے طریقے

Identifier Mangling سب سے عام طریقہ ہے۔ کلاسز، میتھڈز، فیلڈز اور متغیرات کے نام مختصر، غیر معلوماتی سٹرنگز سے بدل دیے جاتے ہیں: a, b, c, aa, ab۔ اس سے کوڈ کے ہر عنصر کے مقصد کو سمجھنا مشکل ہو جاتا ہے۔ ProGuard اور R8 مختلف اقسام (کلاس A، فیلڈ A، میتھڈ A) کے لیے ایک جیسے نام استعمال کرتے ہیں، تجزیہ کو مزید پیچیدہ بنا دیتے ہیں۔

کنٹرول فلو مبہم کاری کوڈ کی ساخت کو اس طرح تبدیل کرتی ہے کہ لکیری ترتیب غیر واضح ہو جاتی ہے۔ مردہ شاخیں شامل کی جاتی ہیں، شرائط کو الٹ دیا جاتا ہے (if (a) کے بجائے if (!a))، goto نما آپریٹرز (لیبل کے ساتھ break/continue) داخل کیے جاتے ہیں۔ یہ ڈی کمپائلر اور ڈیبگر کے ذریعے تجزیہ کو انتہائی وقت طلب بنا دیتا ہے۔

Obfuscator.io کے ذریعے JavaScript مبہم کاری کی مثال

js
// سورس کوڈ
function authenticate(token) {
  const url = "https://api.example.com/auth";
  const headers = { Authorization: "Bearer " + token };
  return fetch(url, { method: "POST", headers });
}
js
// Obfuscator.io ہائی موڈ کے بعد
const _0x4f2e = ["https://api.example.com/auth",
  "Authorization", "Bearer ", "POST"];
(function(_0x5a3b, _0x4f2e) {
  const _0x1c2d = function(_0x3e4f) {
    while (--_0x3e4f) {
      _0x5a3b["push"](_0x5a3b["shift"]());
    }
  };
  _0x1c2d(++_0x4f2e);
}(_0x4f2e, _0x1c2d));

function _0x1c2d(_0x5a3b, _0x4f2e) {
  return _0x4f2e[_0x5a3b];
}

function _0x3e4f(_0x1c2d) {
  const _0x5a3b = _0x1c2d(0, "https://api.example.com/auth");
  const _0x4f2e = { Authorization: "Bearer " + _0x1c2d };
  return fetch(_0x5a3b, { method: "POST", headers: _0x4f2e });
}

Obfuscator.io نے سٹرنگ arrays، array کو پھیرنے کے لیے ایک خود بلانے والا فنکشن شامل کیا، تمام شناخت کنندگان کے نام بدلے اور سٹرنگز کو array انڈیکس سے بدل دیا۔ کوڈ کی اصل 5 لائنیں 20+ ناقابل پڑھنے لائنوں میں تبدیل ہو گئیں، لیکن authenticate(token) فعالیت مکمل طور پر محفوظ ہے۔ AST تجزیہ کے ذریعے ڈی مبہم کاری ممکن ہے، لیکن اس میں وقت لگتا ہے۔

ProGuard اور R8: Android ایپلیکیشنز کی مبہم کاری

ProGuard Java اور Android کے لیے ایک کلاسک مبہم کار ہے، جو 2002 سے استعمال میں ہے۔ ProGuard تین کام انجام دیتا ہے: کمپریشن (غیر استعمال شدہ کلاسز اور میتھڈز کو ہٹانا)، اصلاح (بائٹ کوڈ کی اصلاح) اور مبہم کاری (شناخت کنندگان کے نام بدلنا)۔ ProGuard لائبریریوں کے لیے استثنیٰ کے قواعد کے ساتھ proguard-rules.pro فائل کے ذریعے Android Gradle Plugin میں ضم ہوتا ہے۔

R8 ایک زیادہ جدید مبہم کار ہے جو AGP 3.4 سے Android Gradle Plugin میں شامل ہے۔ R8 ProGuard جیسے ہی کام انجام دیتا ہے لیکن تیز ہے (شروع سے Kotlin میں لکھا گیا) اور زیادہ کارآمد ہے (ART Runtime کے لیے بہتر بائٹ کوڈ اصلاح)۔ R8 کو ProGuard جیسی ہی proguard-rules.pro فائلوں کا استعمال کرتے ہوئے ترتیب دیا جاتا ہے۔ R8 کو فعال کرنے کے لیے، build.gradle میں minifyEnabled true سیٹ کرنا کافی ہے۔

میپنگ فائلیں اور کریش رپورٹس کی ڈی مبہم کاری

میپنگ فائل R8/ProGuard کا آؤٹ پٹ ہے جس میں کلاسز، میتھڈز اور فیلڈز کے اصل اور مبہم کردہ ناموں کے درمیان میپنگ ہوتی ہے۔ میپنگ فائل کریش رپورٹس کے تجزیہ کے لیے اہم ہے: اس کے بغیر، اسٹیک ٹریس میں com.example.app.MainActivity.onCreate کے بجائے a.a.b ہوگا۔ Firebase Crashlytics اور Sentry خود بخود میپنگ فائلیں اپ لوڈ کرتے ہیں اور رپورٹس میں اصل نام بحال کرتے ہیں۔

میپنگ فائلیں ہر نئی ایپلیکیشن ریلیز کے ساتھ Firebase یا Sentry پر اپ لوڈ کی جانی چاہئیں۔ اگر میپنگ فائل کھو جائے یا اپ لوڈ نہ ہو، تو مبہم کاری کے بعد تمام کریش رپورٹس ناقابل پڑھنے ہو جاتی ہیں۔ Android Gradle Plugin خود بخود میپنگ فائل کو build/outputs/mapping/release/mapping.txt پر محفوظ کرتا ہے۔ Firebase ریلیز بلڈ کے دوران میپنگ اپ لوڈ کرنے کے لیے Crashlytics Gradle Plugin استعمال کرتا ہے۔

Android کے لیے ProGuard/R8 ترتیب

groovy
// app/build.gradle — R8 کے ذریعے مبہم کاری
android {
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile(
                "proguard-android-optimize.txt"),
                "proguard-rules.pro"
        }
    }
}
none
# proguard-rules.pro — تحفظ کے قواعد
# Gson کے لیے ڈیٹا ماڈل محفوظ رکھیں
-keep class com.example.model.** { *; }

# Retrofit انٹرفیس کے لیے کلاسز محفوظ رکھیں
-keep,allowobfuscation interface com.example.api.*

# عوامی سرگرمیوں کو مبہم نہ کریں
-keep class * extends android.app.Activity {
    public protected *;
}

# پروڈکشن میں لاگز ہٹائیں
-assumenosideeffects class android.util.Log {
    public static boolean isLoggable(...);
    public static int v(...);
    public static int d(...);
}

proguard-rules.pro میں -keep قواعد اہم ہیں — ان کے بغیر، R8 ریفلیکشن (Gson، Retrofit، Room) کے ذریعے استعمال ہونے والی کلاسز اور میتھڈز کو ہٹا دے گا یا نام بدل دے گا۔ assumentSideEffects پروڈکشن کوڈ سے Log.v اور Log.d کالز ہٹا دیتا ہے۔ Gson، Retrofit اور OkHttp جیسی لائبریریاں AAR کے اندر proguard.txt میں تیار قواعد فراہم کرتی ہیں۔

JavaScript مبہم کاری: Obfuscator.io اور Jscrambler

Obfuscator.io سب سے مقبول اوپن سورس JavaScript مبہم کار ہے جو شناخت کنندگان کے نام بدلنے، سٹرنگ خفیہ کاری، کنٹرول فلو فلیٹننگ اور ڈیبگر تحفظ کو سپورٹ کرتا ہے۔ ترتیب JSON کنفیگ یا CLI کے ذریعے کی جاتی ہے۔ مفت ورژن بنیادی طریقوں کو سپورٹ کرتا ہے؛ انٹرپرائز ورژن پولیمورفک کوڈ اور خود تحفظ شامل کرتا ہے۔

Jscrambler ایک تجارتی JavaScript مبہم کار ہے جس میں جدید تحفظ ہے: پولیمورفک تبدیلیاں (ہر رن نیا مبہم کردہ کوڈ تیار کرتا ہے)، ڈیبگر تحفظ (DevTools کا پتہ لگانا)، اسکرین شاٹ تحفظ (self-defending) اور میعاد ختم ہونے کے میکانزم (مخصوص تاریخ کے بعد کوڈ کام کرنا بند کر دیتا ہے)۔ Jscrambler بینکنگ ایپلیکیشنز اور DRM سسٹمز میں استعمال ہوتا ہے۔

Obfuscator.io ترتیب

js
// obfuscate.js — Obfuscator.io ترتیب
const JavaScriptObfuscator = require("javascript-obfuscator");
const fs = require("fs");

const code = fs.readFileSync("app.js", "utf8");
const result = JavaScriptObfuscator.obfuscate(code, {
  compact: true,
  controlFlowFlattening: true,
  controlFlowFlatteningThreshold: 0.75,
  numbersToExpressions: true,
  simplify: false,
  stringArray: true,
  stringArrayThreshold: 0.8,
  debugProtection: true,
  disableConsoleOutput: true,
});

fs.writeFileSync("app.obfuscated.js", result.code);

پیرامیٹرز Obfuscator.io: controlFlowFlattening: 0.75 75% بلاکس میں کنٹرول فلو کو الجھاتا ہے؛ stringArray: true سٹرنگز کو array میں منتقل کرتا ہے؛ debugProtection DevTools کھلنے سے روکتا ہے؛ disableConsoleOutput console.log ہٹاتا ہے۔ حدیں جتنی زیادہ ہوں گی، مبہم کاری کا وقت اور کوڈ کا سائز اتنا ہی بڑا ہوگا، لیکن تجزیہ اتنا ہی مشکل ہوگا۔

مبہم کاری کی حدود اور خطرات

مبہم کاری رن ٹائم تجزیہ سے تحفظ فراہم نہیں کرتی۔ حملہ آور ڈیبگر (Frida، Objection، Xposed) میں ایپلیکیشن چلا سکتا ہے اور حقیقی وقت میں میتھڈز کو روک سکتا ہے۔ مبہم کاری جامد تجزیہ (APK ڈی کمپائلیشن، بائٹ کوڈ پڑھنا) سے بچاتی ہے، لیکن متحرک تجزیہ سے نہیں۔ رن ٹائم تحفظ کے لیے اضافی اقدامات کی ضرورت ہے: SSL Pinning، Root Detection، Integrity Verification۔

ایپلیکیشن کا سائز مبہم کاری کے بعد 20-50% تک بڑھ سکتا ہے۔ کنٹرول فلو مبہم کاری مردہ شاخیں شامل کرتی ہے اور شرائط کو دہراتی ہے — اس سے بائٹ کوڈ کا سائز بڑھتا ہے۔ سٹرنگ خفیہ کاری مختصر سٹرنگ لٹرلز کو decrypt() کالز سے بدل دیتی ہے، جو سائز کو بھی بڑھاتی ہے۔ موبائل ایپلیکیشنز کے لیے یہ اہم ہے، کیونکہ APK کا سائز براہ راست Google Play میں تبادلوں کو متاثر کرتا ہے۔

کارکردگی بھی متاثر ہوتی ہے۔ کنٹرول فلو مبہم کاری اضافی جانچ اور شاخیں شامل کرتی ہے، میتھڈ کے عمل درآمد کے وقت کو 5-15% بڑھا دیتی ہے۔ سٹرنگ خفیہ کاری ہر سٹرنگ تک رسائی پر decrypt کال شامل کرتی ہے۔ کارکردگی کے لیے اہم فنکشنز (Android میں onDraw، React میں render) کے لیے، -keep قواعد کے ذریعے مبہم کاری کو غیر فعال کر دینا چاہیے۔

اکثر پوچھے گئے سوالات

مبہم کاری کوڈ خفیہ کاری سے کیسے مختلف ہے؟

خفیہ کاری کوڈ کو ڈیکرپشن کے بغیر ناقابل عمل بناتی ہے — عمل درآمد کے لیے ڈیکرپٹر کی ضرورت ہوتی ہے۔ مبہم کاری کوڈ کو ناقابل پڑھنے لیکن براہ راست قابل عمل بناتی ہے۔ خفیہ کاری مضبوط تحفظ فراہم کرتی ہے لیکن ڈیکرپٹر لوڈر کی ضرورت ہوتی ہے، جس کا خود تجزیہ کیا جا سکتا ہے۔

کیا کوڈ ڈی مبہم کیا جا سکتا ہے؟

ڈی مبہم کاری ممکن ہے لیکن محنت طلب ہے۔ jadx، JEB Decompiler اور UnConfuser جیسے ٹولز جزوی ڈی مبہم کاری کے ساتھ بائٹ کوڈ بحال کرتے ہیں۔ اصل ناموں کے ساتھ اصل سورس کوڈ کی مکمل بحالی ناممکن ہے — نام ناقابل واپسی طور پر کھو جاتے ہیں۔ جدید مبہم کار (R8، ProGuard) خودکار ڈی مبہم کاری کے خلاف مزاحم ہیں۔

کیا Google Play پر اشاعت کے لیے مبہم کاری لازمی ہے؟

Google Play مبہم کاری کی ضرورت نہیں ہے لیکن build.gradle میں minifyEnabled کے ذریعے اس کی سختی سے سفارش کرتا ہے۔ مبہم کاری کے بغیر ایپلیکیشنز APKTool اور jadx کے ذریعے آسانی سے ڈی کمپائل ہو جاتی ہیں، جو انہیں API کنجیوں کی چوری، ترمیم اور قزاقی کے لیے خطرناک بناتی ہیں۔ زیادہ تر بڑی ایپلیکیشنز R8 یا ProGuard استعمال کرتی ہیں۔

مبہم کاری کریش رپورٹس کو کیسے متاثر کرتی ہے؟

کریش رپورٹس مبہم کاری کے بعد مبہم کردہ نام (com.example.app.MainActivity کے بجائے a.b.c) رکھتی ہیں۔ بحالی کے لیے R8/ProGuard کے ذریعے تیار کردہ میپنگ فائلیں استعمال ہوتی ہیں۔ خودکار اسٹیک ٹریس ڈی مبہم کاری کے لیے میپنگ فائل کو Firebase Crashlytics یا Sentry پر اپ لوڈ کرنا ضروری ہے۔

مبہم کاری میں سٹرنگ خفیہ کاری کیا ہے؟

سٹرنگ خفیہ کاری سٹرنگ لٹرلز (API کنجیاں، URLs، پیغامات) کو خفیہ کردہ ڈیٹا اور رن ٹائم پر decrypt فنکشن کال سے بدل دیتی ہے۔ یہ حساس سٹرنگز کو ڈی کمپائل شدہ کوڈ میں سادہ تلاش کے ذریعے پڑھے جانے سے بچاتی ہے۔ R8/ProGuard -encryptstrings قاعدہ کے ذریعے سٹرنگ خفیہ کاری کو سپورٹ کرتے ہیں۔

خلاصہ

  • Obfuscator فعالیت کو برقرار رکھتے ہوئے کوڈ کو پڑھنے میں مشکل شکل میں تبدیل کرنے کا ایک ٹول ہے
  • R8 اور ProGuard Android Gradle Plugin میں شامل معیاری Android مبہم کار ہیں
  • Identifier Mangling کلاس اور میتھڈ کے ناموں کو مختصر غیر معلوماتی شناخت کنندگان سے بدل دیتا ہے
  • Obfuscator.io کنٹرول فلو فلیٹننگ اور ڈیبگر تحفظ کے ساتھ ایک اوپن سورس JavaScript مبہم کار ہے
  • مبہم کاری Frida اور Objection کے ذریعے متحرک رن ٹائم تجزیہ سے تحفظ فراہم نہیں کرتی
  • میپنگ فائلیں کریش رپورٹ ڈی مبہم کاری کے لیے ضروری ہیں اور Crashlytics پر اپ لوڈ کی جانی چاہئیں

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں