Reverse Engineering (ریورس انجینئرنگ) — سورس کوڈ تک رسائی کے بغیر موبائل ایپلیکیشن کی منطق اور ساخت کو بحال کرنا۔ Android اور iOS کے تناظر میں، اس کا مطلب ہے الگورتھم، خفیہ کاری کی چابیاں، API اینڈ پوائنٹس اور کاروباری منطق نکالنے کے لیے DEX/APK اور Mach-O/IPA بائنری فائلوں کو ڈی کمپائل کرنا۔ Veracode Security Research (2025) کے مطابق، ٹاپ 200 میں سے 60% سے زیادہ موبائل ایپلیکیشنز میں کم از کم ایک اشارہ موجود ہے جو ریورس انجینئرنگ کو آسان بناتا ہے۔ Reverse Engineering نہ صرف حملوں کے لیے بلکہ سیکورٹی آڈٹ، پیٹنٹ تجزیہ اور پینیٹریشن ٹیسٹنگ کے لیے بھی استعمال ہوتا ہے۔
اہم نکات
Reverse Engineering (ریورس انجینئرنگ) سافٹ ویئر تجزیہ کا ایک شعبہ ہے جس کا مقصد ایپلیکیشن کی بائنری نمائندگی سے اس کی خصوصیات، منطق اور ساخت کو بحال کرنا ہے۔ موبائل ایپلیکیشنز کے لیے، تجزیہ کی اشیاء APK فائلیں (Android) اور IPA فائلیں (iOS) ہیں، جن میں مرتب کردہ کوڈ، وسائل، مینی فیسٹ اور سرٹیفکیٹ شامل ہیں۔ ریورس انجینئرنگ کا نتیجہ الگورتھم، پروٹوکول، خفیہ کاری کی چابیاں، API اسکیما اور کاروباری منطق کا نکالنا ہے۔
ریورس انجینئرنگ کے مقاصد جائز اور ناجائز میں تقسیم ہوتے ہیں۔ جائز: سیکورٹی ٹولز بنانے کے لیے میلویئر تجزیہ، کمزوریوں کے لیے اپنی ایپلیکیشنز کا آڈٹ، بند پروٹوکولز کے ساتھ مطابقت کو یقینی بنانا، پیٹنٹ تجزیہ اور تعلیم۔ ناجائز: دانشورانہ املاک کی چوری، لائسنس کی پابندیوں کو نظرانداز کرنا، قزاقی کاپیاں بنانا اور صارفین کے ڈیٹا چرانے کے لیے ایپلیکیشنز میں تبدیلی کرنا۔ Google Play Protect (2025) کے مطابق، بینکنگ ایپلیکیشنز کے 78% نقصان دہ تبدیلیاں اصل APK کی بنیاد پر ریورس انجینئرنگ کے ذریعے تخلیق کی جاتی ہیں۔
ریورس انجینئرنگ کے طریقہ کار میں دو اہم سمتیں شامل ہیں: جامد تجزیہ (ایپلیکیشن چلائے بغیر) اور متحرک تجزیہ (عملدرآمد کے دوران)۔ ہر نقطہ نظر معلومات کی ایک مختلف سطح فراہم کرتا ہے۔ جامد تجزیہ کوڈ کی مکمل تصویر دیتا ہے لیکن رن ٹائم ڈیٹا کے بغیر۔ متحرک تجزیہ حقیقی رویے، ڈیٹا کے بہاؤ، نیٹ ورک کالز کو ظاہر کرتا ہے لیکن صرف ایک مخصوص عملدرآمد کے منظر نامے کے اندر۔ پیشہ ورانہ ریورس انجینئرنگ ہمیشہ دونوں نقطہ نظر کو یکجا کرتی ہے۔
جامد تجزیہ ریورس انجینئرنگ کا پہلا مرحلہ ہے۔ اصل APK یا IPA کو کھولا جاتا ہے اور ہر جزو کا الگ الگ تجزیہ کیا جاتا ہے۔ اہم اہداف: DEX بائٹ کوڈ، وسائل، مینی فیسٹ، مقامی لائبریریاں (.so، .dylib) اور میٹا ڈیٹا۔
jadx Android ایپلیکیشنز کے جامد تجزیہ کا بنیادی ٹول ہے۔ یہ DEX بائٹ کوڈ کو کم سے کم نقصان کے ساتھ پڑھنے کے قابل Java کوڈ میں تبدیل کرتا ہے۔ jadx معاونت کرتا ہے: ملٹی ڈیکس ڈی کمپائلیشن، لیمبڈا اور ان لائن Kotlin کلاسز کی پہچان، Gradle پروجیکٹ میں برآمد۔ مبہم کوڈ (ProGuard) کے لیے، jadx a، b، c ناموں کے ساتھ کوڈ دکھاتا ہے لیکن کلاس کی ساخت اور کال کی ترتیب محفوظ رہتی ہے۔ آزاد جانچ کے مطابق، jadx مبہم کاری کے باوجود 85–92% کوڈ کو صحیح طور پر ڈی کمپائل کرتا ہے۔
apktool APK کو smali کوڈ (DEX اسمبلر) میں ڈی کوڈ کرتا ہے اور وسائل کو پڑھنے کے قابل شکل میں بحال کرتا ہے: AndroidManifest.xml AXML سے پڑھنے کے قابل XML میں تبدیل ہوتا ہے، لے آؤٹ XML مارک اپ میں، strings.xml سادہ متن میں۔ apktool وسائل میں تبدیلی اور APK کی دوبارہ تعمیر کی اجازت دیتا ہے۔ apktool کے ذریعے کھولنے اور وسائل کو تبدیل کرنے کے بعد، ایپلیکیشن تبدیل شدہ مواد کے ساتھ انسٹال کی جا سکتی ہے۔
Ghidra (NSA) ایک ریورس انجینئرنگ فریم ورک ہے جو Android میں .so لائبریریوں اور iOS میں .dylib کے تجزیہ کے لیے ضروری ہے۔ Ghidra ARM64 کوڈ کو الگ کرتا ہے، C سیوڈوکوڈ کی تعمیر نو کرتا ہے اور کال گراف بناتا ہے۔ موبائل ریورس انجینئرنگ کے لیے، Ghidra خفیہ نگاری اور DRM میکانزم کے مقامی نفاذ کا تجزیہ کرنے کے لیے استعمال ہوتی ہے۔ Ghidra تجزیہ کو خودکار بنانے کے لیے Python اور Java میں سکرپٹنگ کی حمایت کرتی ہے۔
# APK کھولنا اور ڈی کمپائلیشن
$ jadx -d output_dir app.apk
# apktool کے ذریعے وسائل کھولنا
$ apktool d app.apk -o app_unpacked
# Ghidra کے ذریعے مقامی لائبریری کا تجزیہ
$ ghidra app.apk/lib/arm64-v8a/libnative.so
# DEX میں سٹرنگ مستقل تلاش کرنا
$ strings classes.dex | grep -i api_key
متحرک تجزیہ چلتی ہوئی ایپلیکیشن پر کیا جاتا ہے۔ تجزیہ کار عمل سے منسلک ہوتا ہے اور حقیقی وقت میں فنکشن کالز، آرگیومینٹس اور واپسی کی قدروں کو روکتا ہے۔
Frida موبائل ایپلیکیشنز کے متحرک تجزیہ کا سب سے اہم ٹول ہے۔ Frida ایپلیکیشن کے عمل (Android ART یا iOS ایپ) میں JavaScript انجن داخل کرتا ہے اور Java/Objective-C اور C/C++ دونوں فنکشن کالز کو روکنے کی اجازت دیتا ہے۔ Frida کے ساتھ، ریورس انجینئرز درج ذیل کام کر سکتے ہیں: پیرامیٹرز کے ساتھ AES.decrypt() طریقہ کی تمام کالز لاگ کرنا، واپسی کی قدروں کو من مانی طور پر تبدیل کرنا، Universal Android SSL Unpin کے ذریعے SSL-pinning کو غیر فعال کرنا، Stalker کے ذریعے مقامی کالز کو ٹریس کرنا۔ Frida APK/IPA میں ترمیم کیے بغیر کام کرتا ہے، جو اسے پینیٹریشن ٹیسٹنگ کے لیے ناگزیر بناتا ہے۔
Objection JavaScript سکرپٹ لکھے بغیر عام ریورس انجینئرنگ کاموں کے لیے تیار کمانڈز فراہم کرتا ہے: disable-pinning (SSL pinning غیر فعال کرنا)، dump-keychain (iOS)، explore (کلاس درجہ بندی کو دریافت کرنا)، memory search (میموری میں سٹرنگ تلاش کرنا)۔ Objection بغیر ایک لائن کوڈ لکھے مکمل متحرک تجزیہ کرنے کی اجازت دیتا ہے۔ iOS ایپلیکیشنز کے لیے، Objection خود بخود NSURLSession، CFNetwork اور NSKeyedArchiver کالز ڈھونڈتا اور لاگ کرتا ہے۔
Xposed Android کے لیے ایک فریم ورک ہے جو Zygote میں app_process فائل کو تبدیل کرکے کام کرتا ہے۔ Frida کے برعکس، Xposed کو انسٹالیشن کے بعد روٹ رسائی کی ضرورت نہیں ہے۔ Xposed ماڈیولز کسی بھی ایپلیکیشن میں طریقہ کالز کو روک سکتے ہیں۔ ریورس انجینئرنگ کے لیے، Xposed طویل مدتی تجزیہ کے لیے آسان ہے: ماڈیول انسٹال ہوتا ہے اور مسلسل چلتا ہے، مختلف منظرناموں میں ایپلیکیشن کے رویے کو لاگ کرتا ہے۔ Xposed Android 8.1 تک سپورٹ کرتا ہے؛ Android 9+ کے لیے SandHook پر مبنی EdXposed استعمال ہوتا ہے۔
// Frida: ایپلیکیشن میں decrypt() طریقہ کو روکنا
let aesClass = Java.use("javax.crypto.Cipher");
aesClass.doFinal.overload(
"[B", "int", "int"
).implementation = function(
input, offset, len
) {
console("[AES] decrypt called, len=" + len);
return this.doFinal(input, offset, len);
};
ریورس انجینئرنگ کا معیاری کام کا بہاؤ ترتیب وار مراحل پر مشتمل ہوتا ہے، جن میں سے ہر ایک معلومات کی ایک مخصوص سطح فراہم کرتا ہے۔
تجزیہ کار میٹا ڈیٹا کی سطح پر APK کا جائزہ لیتا ہے: targetSdk، uses-permission (کن اجازتوں کی درخواست کی گئی ہے)، intent-filter اور برآمد کردہ اجزاء۔ اجازتیں ظاہر کر سکتی ہیں کہ کون سے APIs استعمال ہوئے ہیں (android.permission.CAMERA → کیمرہ، android.permission.RECORD_AUDIO → آڈیو)۔ برآمد کردہ سرگرمیاں اجازت کے بغیر داخلے کے مقامات کی نشاندہی کرتی ہیں۔ یہ مرحلہ aapt یا ApkAnalyzer کے ذریعے کیا جاتا ہے اور 1–2 منٹ لیتا ہے۔
APK کو کھولا جاتا ہے اور classes.dex (یا ملٹی ڈیکس) jadx میں ڈالا جاتا ہے۔ آؤٹ پٹ پیکجز میں منظم Java/Kotlin کوڈ ہے۔ تجزیہ کار اہم کلاسز تلاش کرتا ہے: CryptoUtils، ApiClient، AuthManager، DatabaseHelper، اور چیک کرتا ہے کہ کون سے الگورتھم استعمال ہوئے ہیں۔ اگر کوڈ میں AES/CBC/PKCS5Padding جیسی سٹرنگز ہیں تو ایپلیکیشن خفیہ کاری استعمال کر رہی ہے اور کلید تلاش کرنے کی ضرورت ہے۔ اس مرحلے پر، ہارڈ کوڈڈ کلیدز، API URLs، OAuth ٹوکنز اور رازوں کی نشاندہی کی جاتی ہے۔ مبہم کاری کے بغیر، پورا ایپلیکیشن کوڈ ایک عام Java پروجیکٹ کی طرح پڑھا جاتا ہے۔
SSL-pinning کو غیر فعال کرنے کے لیے Frida یا Objection سیٹ کرنے کے بعد، تجزیہ کار ایپلیکیشن لانچ کرتا ہے اور Burp Suite یا mitmproxy کے ذریعے نیٹ ورک ٹریفک کو روکتا ہے۔ ٹریفک ڈیٹا API اسکیما ظاہر کرتا ہے: کون سے اینڈ پوائنٹس، کون سے پیرامیٹرز اور کس فارمیٹ میں۔ اگر ممکن ہو تو، تجزیہ کار درخواستوں میں تبدیلی کرتا ہے اور غلط یا نقصان دہ ڈیٹا پر سرور کے ردعمل کو چیک کرتا ہے۔ سرور سائیڈ توثیق کی کمی ایک براہ راست کمزوری ہے جو اس مرحلے پر دریافت ہوتی ہے۔
تجزیہ کے نتائج ایک منظم شکل میں ریکارڈ کیے جاتے ہیں۔ ہر پائے گئے کمزور نقطہ کے لیے درج ذیل بتایا جاتا ہے: کلاس اور طریقہ، کمزوری کی تفصیل، استحصالی ویکٹر اور اصلاح کی سفارش۔ یہ ڈیٹا سیٹ ڈیولپمنٹ ٹیم کو بھیجا جاتا ہے یا پینیٹریشن ٹیسٹ رپورٹ تیار کرنے کے لیے استعمال ہوتا ہے۔ خودکار ماحول (MobSF) میں، جامد اور متحرک تجزیہ کے نتائج کی بنیاد پر رپورٹ خود بخود تیار ہوتی ہے۔
iOS ایپلیکیشنز کا ریورس انجینئرنگ Android کے مقابلے میں زیادہ مشکل ہے کیونکہ Apple کا سخت سیکورٹی فن تعمیر اور اسٹاک ڈیوائسز پر فائل سسٹم تک براہ راست رسائی کی کمی ہے۔ iOS تجزیہ کے لیے جیل بریک ضروری ہے۔
IPA آرکائیو میں Mach-O بائنری ہوتی ہے — Apple کا عالمگیر قابل عمل فائل فارمیٹ۔ ڈی کمپائلیشن کے لیے Hopper Disassembler یا IDA Pro استعمال ہوتا ہے۔ Android DEX کے برعکس، جو کم سے کم نقصان کے ساتھ Java میں ڈی کمپائل ہوتا ہے، Mach-O میں مقامی ARM64 کوڈ ہوتا ہے جو C سیوڈوکوڈ میں کم درستگی کے ساتھ تعمیر نو ہوتا ہے۔ Hopper 60–70% تعمیر نو حاصل کرتا ہے؛ باقی کا اسمبلی سطح پر تجزیہ کرنا ضروری ہے۔
iOS پر Frida کو جیل بریک اور frida-server کی تنصیب کی ضرورت ہے۔ کنکشن کے بعد، Frida API میسج روٹنگ کے ذریعے Objective-C طریقوں کو روکتا ہے۔ iOS ایپلیکیشنز کے لیے، ایک عام منظر نامہ میں شامل ہے: HTTP درخواستوں کو لاگ کرنے کے لیے NSURLSession.dataTaskWithRequest کو روکنا، سیریلائزڈ ڈیٹا کے تجزیہ کے لیے NSKeyedUnarchiver کو روکنا اور frida-trace کے ذریعے CoreData استفسارات کو ٹریس کرنا۔ Frida iOS 15–17 کے لیے Dopamine جیل بریک کی ریلیز کے ساتھ دستیاب ہوا۔
ریورس انجینئرنگ میں IPA میں تبدیلی اور پھر دوبارہ پیکیجنگ اور ڈیوائس پر انسٹالیشن شامل ہو سکتی ہے۔ اوزاروں میں شامل ہیں: کھولنے کے لیے ipatool، سیکشن دیکھنے کے لیے MachOView اور کوڈ انجیکشن کے لیے optool۔ تبدیلی کے بعد، IPA کو جیل بریک شدہ ڈیوائس پر انسٹالیشن کے لیے ldid یا fastlane sigh کے ذریعے دستخط کیا جاتا ہے۔ iOS 16+ کے لیے، کوڈ کے دستخط Secure Enclave کی سطح پر تصدیق کیے جاتے ہیں اور تبدیل شدہ IPA غیر جیل بریک ڈیوائس پر نہیں چلے گا۔
// Frida: iOS ایپلیکیشن میں HTTP درخواستوں کو روکنا
if (ObjC.available) {
let NSURLSession = ObjC.classes.NSURLSession;
let dataTaskWithRequest = ObjC.protocol("NSURLSessionDelegate")
.method("- URLSession:dataTask:didReceiveData:");
Interceptor.attach(dataTaskWithRequest.implementation, {
onEnter(args) {
let data = ObjC.Object(args[3]);
console("[HTTP Response]", data.toString());
}
});
}
ریورس انجینئرنگ سے تحفظ پرتوں والی سیکورٹی کے اصول کی پیروی کرتا ہے: کوئی ایک طریقہ 100% تحفظ فراہم نہیں کرتا لیکن ایک مجموعہ ریورس انجینئرنگ کو اقتصادی طور پر ناقابل عمل بناتا ہے۔
بنیادی سطح Android کے لیے ProGuard ہے، جو کلاس اور طریقہ کے ناموں کو ایک حرفی ناموں سے بدل دیتا ہے۔ بہتر تحفظ کے لیے، DexGuard اوورلوڈ انڈکشن (مختلف دستخطوں اور ایک ہی نام والے متعدد طریقے) اور AES-256 سٹرنگ خفیہ کاری شامل کرتا ہے۔ مبہم کاری کوڈ کے تجزیہ کے وقت کو 5 منٹ سے بڑھا کر سطح کے مطابق 5–20 گھنٹے کر دیتی ہے۔ DexGuard اضافی طور پر کنٹرول کے بہاؤ کو مبہم کرتا ہے، کوڈ کو jadx کے لیے ناقابل پڑھنے بناتا ہے۔
تمام سٹرنگ مستقل — URLs، کلیدز، ٹوکنز، SQL استفسارات — بلڈ وقت پر خفیہ کیے جاتے ہیں اور رن ٹائم پر ڈی خفیہ کیے جاتے ہیں۔ یہ DEX فائلوں میں سٹرنگز کے جامد تجزیہ سے بچاتا ہے۔ app.apk پر strings چلانے والا حملہ آور کوئی API اینڈ پوائنٹ نہیں دیکھے گا۔ ڈی کمپائلیشن کے بعد بھی، تمام سٹرنگز بائنری ڈیٹا کے طور پر ظاہر ہوتی ہیں۔ ہر سٹرنگ ایک علیحدہ کلید استعمال کر سکتی ہے، جو ڈی مبہم کاری کو پیچیدہ بناتی ہے۔
ایپلیکیشن کے اندر ایک RASP ایجنٹ رن ٹائم پر Frida اور ڈیبگنگ کا پتہ لگاتا ہے۔ APK کے SHA-256 ہیش کے ذریعے سالمیت کی جانچ ایپلیکیشن کے تبدیل شدہ ورژن کو چلنے سے روکتی ہے۔ اگر APK ہیش ریفرنس ہیش (مقامی پرت میں محفوظ) سے مماثل نہیں ہوتی تو ایپلیکیشن ختم ہو جاتی ہے۔ یہ APK تبدیلی پر مبنی حملوں کو روکتا ہے، بشمول دوبارہ پیکیجنگ۔
اہم کاروباری منطق کلائنٹ کی بجائے سرور پر عمل کی جانی چاہیے۔ چاہے حملہ آور ایپلیکیشن کو مکمل طور پر ڈی کمپائل کر لے، سرور کوڈ ناقابل رسائی رہتا ہے۔ تمام درخواستوں اور پیرامیٹرز کی سرور سائیڈ توثیق ریورس انجینئرنگ کے دوران دریافت ہونے والی کمزوریوں کے استحصال کو روکتی ہے۔ سرور تصدیق Play Integrity API یا App Attest کے ذریعے تصدیق کرتی ہے کہ درخواست اصلی، غیر تبدیل شدہ ایپلیکیشن سے آئی ہے۔
اکثر پوچھے گئے سوالات
امریکہ میں، ریورس انجینئرنگ DMCA کے ذریعے منظم ہے — یہ انٹرآپریبلٹی، سیکورٹی ٹیسٹنگ اور آرکائیو مقاصد کے لیے اجازت شدہ ہے۔ تکنیکی تحفظ کے اقدامات (DRM) کو نظرانداز کرنا ممنوع ہے۔ یورپ میں، EUCD کا آرٹیکل 6 DMCA سے ملتا جلتا ہے۔ روس میں، کاپی رائٹ ہولڈر کی رضامندی کے بغیر ریورس انجینئرنگ کاپی رائٹ کی خلاف ورزی سمجھی جا سکتی ہے۔ تجارتی ریورس انجینئرنگ سے پہلے قانونی مشورہ لینا لازمی ہے۔
نہیں۔ حملہ آور کے ڈیوائس پر عمل ہونے والا کوئی بھی کوڈ تجزیہ کیا جا سکتا ہے — یہ کلائنٹ سائیڈ سیکورٹی ماڈل کی ایک بنیادی حد ہے۔ تحفظ کا مقصد ریورس انجینئرنگ کو اقتصادی طور پر غیر پرکشش بنانا ہے: وقت اور وسائل کے اخراجات حاصل کردہ نتیجے کی قدر سے زیادہ ہونے چاہئیں۔ مبہم کاری، RASP اور سرور سائیڈ منطق کا مجموعہ موجودہ تحفظ کا معیار ہے۔
ری پیکیجنگ ریورس انجینئرنگ کے ذریعے ایپلیکیشن میں تبدیلی اور پھر APK کی دوبارہ تعمیر ہے۔ حملہ آور apktool کے ذریعے APK کھولتا ہے، نقصان دہ کوڈ شامل کرتا ہے یا API کلیدز تبدیل کرتا ہے، اسے دوبارہ تعمیر کرتا ہے اور اپنے سرٹیفکیٹ سے دستخط کرتا ہے۔ ری پیکیجنگ Kaspersky Threat Report (2025) کے مطابق Android پر تمام حملوں کا 86% ہے۔ انسدادی اقدام: رن ٹائم پر ڈیجیٹل دستخط چیک کریں۔
Frida سکرپٹ Universal Android SSL Unpin iOS پر TrustManager.checkServerTrusted اور ServerTrustManager کالز کو روکتا ہے، نفاذ کو سب کو اجازت دے سے بدل دیتا ہے۔ OkHttp اور URLConnection میں X509TrustManager طریقوں کا روکنا بھی استعمال ہوتا ہے۔ SSL-pinning کو Frida کے ساتھ تیار سکرپٹ استعمال کرکے 10 سیکنڈ میں نظرانداز کیا جا سکتا ہے۔ ایک زیادہ مضبوط تحفظ سرور سائیڈ سرٹیفکیٹ تصدیق کے ذریعے سرٹیفکیٹ شفافیت ہے۔
.so/.dylib لائبریریوں میں مقامی C/C++ کوڈ DEX میں Java کے مقابلے میں ریورس کرنا کافی زیادہ مشکل ہے۔ PGO اور Osize کمپائلیشن کے ساتھ Swift Objective-C کے مقابلے میں زیادہ مبہم بائنری دیتی ہے۔ Rust رن ٹائم میٹا ڈیٹا کے بغیر اور Objective-C کے معیاری ریپرز کے بغیر مقامی کوڈ میں کمپائل ہوتی ہے، جو اسے جدید موبائل ڈویلپمنٹ زبانوں میں ریورس انجینئرنگ کے لیے سب سے مشکل بناتی ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں