কোড অবফাসকেশন — অ্যাপ্লিকেশনের সোর্স বা বাইট-কোড ইচ্ছাকৃতভাবে বিভ্রান্ত করার প্রক্রিয়া যাতে রিভার্স-ইঞ্জিনিয়ারিং কঠিন হয়। Verizon Data Breach Investigations Report (2025) অনুসারে, বাণিজ্যিক অ্যাপ্লিকেশনের অবফাসকেশন অরক্ষিত বিল্ডের তুলনায় বৌদ্ধিক সম্পত্তি ফাঁসের ঝুঁকি 40% কমায়। অবফাসকেশন পদ্ধতি শনাক্তকারীর নাম পরিবর্তন থেকে প্রোগ্রামের নিয়ন্ত্রণ প্রবাহের সম্পূর্ণ পরিবর্তন পর্যন্ত বিস্তৃত।
মূল বিষয়
অবফাসকেশন — সফ্টওয়্যার কোড রূপান্তরের পদ্ধতির একটি সেট যা এর কার্যকারিতা বজায় রাখে, কিন্তু অ্যালগরিদমের বিশ্লেষণ এবং বোঝাকে অত্যন্ত কঠিন করে তোলে। এনক্রিপশনের বিপরীতে, অবফাসকেটেড কোড কোনো অতিরিক্ত ডিক্রিপশন ছাড়াই সরাসরি নির্বাহিত হয়। অবফাসকেশন এর উদ্দেশ্য অ্যাপ্লিকেশনে আক্রমণের খরচ অর্থনৈতিকভাবে অলাভজনক স্তরে বাড়ানো।
বাণিজ্যিক অ্যাপ্লিকেশনের জন্য অবফাসকেশন কোনো প্রযুক্তিগত বিকল্প নয়, বরং আইনগত প্রয়োজনীয়তা। অনেক লাইসেন্স চুক্তি (EULA) সরাসরি রিভার্স-ইঞ্জিনিয়ারিং থেকে কোড সুরক্ষার দাবি করে। BSA Global Software Survey (2024) অনুসারে, বিশ্বের 37% সফ্টওয়্যার লাইসেন্স ছাড়া ব্যবহৃত হয়, এবং অবফাসকেশন পাইরেসির অন্যতম প্রধান বাধা।
মোবাইল অ্যাপ্লিকেশন রিভার্স-ইঞ্জিনিয়ারিংয়ের জন্য বিশেষভাবে সংবেদনশীল কারণ ডিস্ট্রিবিউশন (APK/IPA) সরাসরি ব্যবহারকারীর ডিভাইসে থাকে। যে কোনো ডিভাইস মালিক JADX, Apktool বা Hopper-এর মতো টুল ব্যবহার করে কোড বের করে বিশ্লেষণ করতে পারেন। অবফাসকেশন আক্রমণকারীকে অ্যাপ্লিকেশনের যুক্তি দ্রুত বোঝা, এম্বেডেড API কী, এনক্রিপশন অ্যালগরিদম বা সার্ভারের সাথে ইন্টিগ্রেশন পয়েন্ট খুঁজতে বাধা দেয়।
আধুনিক অবফাসকেশন একাধিক কৌশলের সংমিশ্রণ ব্যবহার করে, যার প্রতিটি অ্যাপ্লিকেশন বিশ্লেষণের একটি নির্দিষ্ট ধাপকে জটিল করে। আসুন সবচেয়ে কার্যকর পদ্ধতিগুলি বিবেচনা করি।
অবফাসকেশন এর মৌলিক পদ্ধতি — ক্লাস, মেথড এবং ফিল্ডের অর্থপূর্ণ নাম ছোট অর্থহীন সিকোয়েন্স দিয়ে প্রতিস্থাপন: android.app.Activity a.a.a-তে পরিণত হয়। আক্রমণকারীর জন্য ক্লাস বা মেথডের উদ্দেশ্য তার নাম থেকে নির্ধারণ করা অসম্ভব হয়ে যায়। এটি ডিকম্পাইলড কোডে নেভিগেশনকে উল্লেখযোগ্যভাবে জটিল করে তোলে। ProGuard থেকে Dotfuscator পর্যন্ত সমস্ত আধুনিক অবফাসকেশন টুল ডিফল্ট হিসেবে এই কৌশল প্রয়োগ করে।
আরও উন্নত কৌশল — প্রবাহ নিয়ন্ত্রণ অবফাসকেশন। টুল প্রোগ্রামের প্রবাহ গ্রাফ পরিবর্তন করে, ডেড ব্রাঞ্চ, অর্থহীন লুপ এবং অপ্রত্যাশিত জাম্প যোগ করে। ডিকম্পাইলার কোড পুনরুদ্ধার করে যা যৌক্তিকভাবে সঠিক দেখায়, কিন্তু অত্যন্ত বিভ্রান্ত এবং বিশ্লেষণ করা কঠিন। Obfuscator-LLVM, নেটিভ কোডের জন্য জনপ্রিয় টুল, C++ এবং Objective-C অ্যাপ্লিকেশনের জন্য এই কৌশল ব্যবহার করে।
গোপনীয় স্ট্রিং — API কী, সার্ভার URL, গোপন তথ্য — ডিকম্পাইলড কোডে সাধারণ অনুসন্ধানের মাধ্যমে সহজেই পাওয়া যায়। স্ট্রিং এনক্রিপশন স্ট্রিংগুলিকে এনক্রিপ্টেড সিকোয়েন্স দিয়ে প্রতিস্থাপন করে যা শুধুমাত্র রানটাইমের সময় ডিক্রিপ্ট হয়। নির্ভরযোগ্য অবফাসকেশন টুল প্রতিটি বিল্ডের জন্য অনন্য কী দিয়ে স্ট্রিং এনক্রিপ্ট করে, অ্যাপ্লিকেশন ক্লোনিং এর সময় গোপন তথ্যের পুনঃব্যবহার রোধ করে।
// সোর্স কোড
private String API_URL = "https://api.example.com/v1";
// স্ট্রিং এনক্রিপশন সহ অবফাসকেশনের পরে
private String API_URL = decrypt("x3kF9#mP2$", 0xA3F2);
private String decrypt(String data, int key) {
StringBuilder result = new StringBuilder();
for (int i = 0; i < data.length(); i++) {
result.append((char) (data.charAt(i) ^ key));
}
return result.toString();
}
কোড ছাড়াও, অ্যাপ্লিকেশনের রিসোর্স অবফাসকেশন এর অধীন: res/values-এ ফাইল নাম, layout-ফাইল, strings.xml-এ স্ট্রিং রিসোর্স। অবফাসকেশন টুল রিসোর্সের নাম ছোট শনাক্তকারীতে পরিবর্তন করে এবং পুনরায় প্যাকেজ করে, যার ফলে রিসোর্স বিশ্লেষণ এবং অভিধান দ্বারা স্ট্রিং অনুসন্ধান উল্লেখযোগ্যভাবে কঠিন হয়ে যায়।
অবফাসকেশন টুল নির্বাচন লক্ষ্য প্ল্যাটফর্ম, প্রোগ্রামিং ভাষা এবং কর্মক্ষমতা প্রয়োজনীয়তার উপর নির্ভর করে। আসুন মোবাইল ডেভেলপমেন্টে ব্যবহৃত প্রধান টুলগুলি বিবেচনা করি।
| টুল | প্ল্যাটফর্ম | অবফাসকেশন পদ্ধতি |
|---|---|---|
| ProGuard | Android / Java | নাম পরিবর্তন, কম্প্রেশন, অপ্টিমাইজেশন |
| R8 | Android | ProGuard + মিনিফিকেশন, ডিশুগারিং |
| DexGuard | Android | ProGuard-এর সবকিছু + প্রবাহ নিয়ন্ত্রণ, স্ট্রিং এনক্রিপশন |
| iXGuard | iOS | প্রতীকী অবফাসকেশন, প্রবাহ নিয়ন্ত্রণ, স্ট্রিং এনক্রিপশন |
| LLVM Obfuscator | iOS / নেটিভ কোড | প্রবাহ নিয়ন্ত্রণ, মৃত নির্দেশ, BCE |
ProGuard — Android এবং Java-র জন্য স্ট্যান্ডার্ড অবফাসকেশন টুল, Android SDK-তে একীভূত। এটি কম্প্রেশন (অব্যবহৃত কোড অপসারণ), অপ্টিমাইজেশন এবং নাম পরিবর্তনের মাধ্যমে অবফাসকেশন করে। R8 — এর উত্তরসূরি, যা Android Gradle Plugin 3.4-তে আত্মপ্রকাশ করে। R8 দ্রুত কাজ করে এবং আরও আক্রমণাত্মকভাবে কোড অপ্টিমাইজ করে, এবং AGP 8.0 থেকে ডিফল্ট হিসেবে ProGuard-কে সম্পূর্ণরূপে প্রতিস্থাপন করেছে।
DexGuard (Guardsquare-এর বাণিজ্যিক পণ্য) — Android-এর জন্য ProGuard-এর বর্ধিত সংস্করণ, যা প্রবাহ নিয়ন্ত্রণ, স্ট্রিং এনক্রিপশন, ডিবাগিং থেকে সুরক্ষা এবং রিসোর্স অবফাসকেশন যোগ করে। iOS-এর জন্য কোম্পানি Swift এবং Objective-C অ্যাপ্লিকেশনের জন্য অনুরূপ কৌশল সহ iXGuard প্রদান করে। এই টুলগুলি ব্যাংকিং এবং AAA-গেম প্রকল্পে ব্যবহৃত হয়, যেখানে রিভার্স-ইঞ্জিনিয়ারিং সরাসরি আর্থিক ঝুঁকি তৈরি করে।
ডেভেলপাররা প্রায়শই অবফাসকেশন এবং এনক্রিপশনকে বিভ্রান্ত করে, এগুলিকে বিনিময়যোগ্য মনে করে। বাস্তবে এগুলি মৌলিকভাবে ভিন্ন সুরক্ষা ব্যবস্থা যা ভিন্ন ভিন্ন কাজ সমাধান করে।
এনক্রিপশন — কী ব্যবহার করে ডেটা রূপান্তর, যা ডেটাকে ডিক্রিপশন ছাড়া অপঠনযোগ্য করে তোলে। অবফাসকেশন — কোডকে কার্যকরীভাবে সমতুল্য কিন্তু বোঝা কঠিন আকারে রূপান্তর। এনক্রিপ্টেড কোড ডিক্রিপশন ছাড়া নির্বাহ করা যায় না, অবফাসকেটেড কোড সরাসরি নির্বাহিত হয়। প্রতিটি ব্যবস্থা তার নিজস্ব কাজ সমাধান করে: এনক্রিপশন বিশ্রাম ও স্থানান্তরে ডেটা রক্ষা করে, অবফাসকেশন কোডকে বিশ্লেষণ থেকে রক্ষা করে।
সুরক্ষার সর্বোচ্চ স্তর উভয় কৌশলের সংমিশ্রণে অর্জিত হয়। কোড স্ট্যাটিক বিশ্লেষণ কঠিন করতে অবফাসকেট করা হয়, এবং গুরুত্বপূর্ণ ডেটা (কী, টোকেন) অতিরিক্তভাবে এনক্রিপ্ট করা হয় এবং রানটাইমের সময় ডিক্রিপ্ট হয়। DexGuard এবং iXGuard-এর মতো আধুনিক টুল একক বিল্ড পাইপলাইনে উভয় পদ্ধতির জন্য অন্তর্নির্মিত সমর্থন প্রদান করে।
আর্থিক লেনদেন, চিকিৎসা ডেটা বা গুরুত্বপূর্ণ বৌদ্ধিক সম্পত্তি প্রক্রিয়াকারী অ্যাপ্লিকেশনের জন্য, একা অবফাসকেশন যথেষ্ট নয়। ব্যাপক সুরক্ষা প্রয়োজন: কোড অবফাসকেশন, ডিভাইসে ডেটা এনক্রিপশন, অ্যান্টি-ডিবাগিং, APK অখণ্ডতা যাচাই এবং সার্ভার-সাইড ভ্যালিডেশন। OWASP Mobile Security Testing Guide (2025) অনুসারে, এই সমস্ত ব্যবস্থার সংমিশ্রণই উচ্চ-ঝুঁকিপূর্ণ অ্যাপ্লিকেশনের জন্য পর্যাপ্ত সুরক্ষা স্তর নিশ্চিত করে।
এটি বোঝা গুরুত্বপূর্ণ যে অবফাসকেশন বৌদ্ধিক সম্পত্তি সুরক্ষার একটি আইনগত পদ্ধতি, যা বেশিরভাগ এখতিয়ারে আদালত দ্বারা স্বীকৃত। তবে, অবফাসকেশন বাইপাস করা এবং অননুমোদিত কপি তৈরির জন্য ডিকম্পাইলেশন কপিরাইট আইন, DMCA এবং বিভিন্ন দেশের অনুরূপ নিয়ম লঙ্ঘন করতে পারে।
ব্যাপক ব্যবহার সত্ত্বেও, অবফাসকেশন নিয়ে অনেক ভ্রান্ত ধারণা বিদ্যমান। আসুন প্রকৃত সীমাবদ্ধতাগুলি বিবেচনা করি যা ডেভেলপারদের অ্যাপ্লিকেশন সুরক্ষা পরিকল্পনার সময় বিবেচনায় নেওয়া উচিত।
সবচেয়ে গুরুত্বপূর্ণ তথ্য: অবফাসকেশন কোডকে অভেদ্য করে না। অবফাসকেটেড কোড বিশ্লেষণের জন্য অনেক টুল বিদ্যমান: .NET-এর জন্য ম্যানুয়াল ডিঅবফাসকেটর de4dot থেকে শুরু করে প্রতীকী নির্বাহ (Angr, Triton) ভিত্তিক আধা-স্বয়ংক্রিয় সিস্টেম পর্যন্ত। অবফাসকেশন আক্রমণের খরচ বাড়ায়, কিন্তু পর্যাপ্ত প্রেরণা থাকলে আক্রমণকারী যে কোনো সুরক্ষা অতিক্রম করতে পারে।
নিরাপত্তা বিশেষজ্ঞরা অ্যাপ্লিকেশনে অবফাসকেশন সনাক্তকরণের জন্য টুল ব্যবহার করেন। Smali-কোডে ডিকম্পিলেশন সহ APKTool নাম পরিবর্তিত ক্লাস এবং মেথড দেখার অনুমতি দেয়। JADX-GUI Java উপস্থাপনা দেখায়, যেখানে a, b, c নামের ক্লাস অবফাসকেশন ব্যবহার নির্দেশ করে। সনাক্তকরণ কঠিন করতে, উন্নত টুল মৃত কোড যোগ করে এবং নিয়ন্ত্রণ প্রবাহ বিভ্রান্ত করে, স্থির বিশ্লেষণকে যথেষ্ট বেশি সময়সাপেক্ষ করে তোলে।
আক্রমণাত্মক অবফাসকেশন অ্যাপ্লিকেশনের কর্মক্ষমতাকে নেতিবাচকভাবে প্রভাবিত করতে পারে। নিয়ন্ত্রণ প্রবাহ বিভ্রান্ত করলে কোডের আকার বাড়ে, নির্বাহ ধীর হয় এবং লোড হওয়ার সময় বাড়ে। সীমিত সম্পদযুক্ত মোবাইল অ্যাপ্লিকেশনের জন্য এটি বিশেষভাবে গুরুত্বপূর্ণ। লক্ষ্য ডিভাইসে অবফাসকেশন প্রয়োগের পরে কর্মক্ষমতা পরীক্ষা করার সুপারিশ করা হয়।
অবফাসকেটেড কোড ত্রুটির নির্ণয় কঠিন করে। অবফাসকেশনের পরে স্ট্যাক-ট্রেসে productController.loadProduct()-এর পরিবর্তে a.a.a()-এর মতো নাম থাকে, যা এটি ডেভেলপারের জন্য অকেজো করে তোলে। সমস্ত অবফাসকেশন টুল ম্যাপিং-ফাইল জেনারেশন সমর্থন করে, যা বিশ্লেষণের আগে স্ট্যাক-ট্রেস ডিঅবফাসকেট করার অনুমতি দেয়। ম্যাপিং-ফাইলটি অ্যাপ্লিকেশনের প্রতিটি প্রকাশিত সংস্করণের জন্য নিরাপদ স্থানে সংরক্ষণ করা উচিত।
// build.gradle — ProGuard/R8 অবফাসকেশন সেটিং
android {
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'),
'proguard-rules.pro'
}
}
}
প্রায়শই জিজ্ঞাসিত প্রশ্ন
না, অবফাসকেশন সম্পূর্ণ সুরক্ষা প্রদান করে না। পর্যাপ্ত সম্পদ এবং সময় সহ যেকোনো কোড তাত্ত্বিকভাবে বিশ্লেষণ করা যেতে পারে। অবফাসকেশনের উদ্দেশ্য আক্রমণের খরচ অর্থনৈতিকভাবে অলাভজনক স্তরে বাড়ানো। অধিকাংশ বাণিজ্যিক অ্যাপ্লিকেশনের জন্য, ProGuard-এর মৌলিক অবফাসকেশনও 90% এলোমেলো হ্যাকিং প্রচেষ্টা বাধা দেয়।
Android Gradle Plugin 8.0 এবং তার উপরে R8 মানক টুল, যা ProGuard-কে প্রতিস্থাপন করেছে। R8 দ্রুত, ART নির্বাহ পরিবেশের জন্য কোড ভালভাবে অপ্টিমাইজ করে এবং Java 8 সিনট্যাক্সের ডিশুগারিং সমর্থন করে। আপনি যদি AGP-এর বর্তমান সংস্করণ ব্যবহার করেন, তাহলে ProGuard-এ ফেরার কোনো কারণ নেই। নিয়মের সূক্ষ্ম সেটিং সহ পুরানো প্রকল্পের জন্য ProGuard সামঞ্জস্যপূর্ণ বিকল্প হিসেবে রয়ে গেছে।
মৌলিক অবফাসকেশন (শনাক্তকারীর নাম পরিবর্তন) নির্বাহের গতিকে প্রভাবিত করে না কারণ নাম শুধুমাত্র কম্পাইলেশনের সময় বিদ্যমান। তবে, নিয়ন্ত্রণ প্রবাহ বিভ্রান্ত করা এবং স্ট্রিং এনক্রিপশন কর্মক্ষমতা 5-15% ধীর করতে পারে। অবফাসকেশনের আগে এবং পরে লক্ষ্য ডিভাইসে কর্মক্ষমতা পরিমাপ করার সুপারিশ করা হয়।
ম্যাপিং-ফাইল ব্যবহার করুন, যা বিল্ডের সময় ProGuard/R8 দ্বারা উৎপন্ন হয়। Android Studio একটি অন্তর্নির্মিত ডিঅবফাসকেশন টুল প্রদান করে: Analyse APK-তে APK খুলুন এবং স্ট্যাক-ট্রেস উইন্ডোতে টেনে আনুন। Production-এ প্রকাশিত প্রতিটি সংস্করণের জন্য ম্যাপিং-ফাইল সংরক্ষণ করা প্রয়োজন।
না, অবফাসকেশন এনক্রিপশন থেকে মৌলিকভাবে ভিন্ন: অবফাসকেটেড কোড ডিক্রিপশন ছাড়া প্রসেসর দ্বারা সরাসরি নির্বাহিত হয়, যখন এনক্রিপ্টেড কোড ডিক্রিপশন ছাড়া নির্বাহ করা যায় না। অবফাসকেশন অ্যাপ্লিকেশন কাঠামো, ক্লাস নাম এবং নির্বাহ প্রবাহকে বিভ্রান্ত করে, এনক্রিপশন ডেটাকে কী ছাড়া অপ্রাপ্য করে তোলে। এই কৌশলগুলি ব্যাপক অ্যাপ্লিকেশন সুরক্ষায় একে অপরের পরিপূরক।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন