প্রশ্ন: আমি যদি আমার। ক্লাস ফাইলগুলি এনক্রিপ্ট করি এবং ফ্লাইতে লোড এবং ডিক্রিপ্ট করার জন্য একটি কাস্টম ক্লাসলোডার ব্যবহার করি, তবে এটি কি ক্ষয় রোধ করবে?
উত্তর: জাভা বাইট-কোড ডিসম্পিলেশন রোধ করার সমস্যাটি ভাষা প্রায় পুরানো old বাজারে প্রচুর অবহেলা সরঞ্জাম পাওয়া সত্ত্বেও, নবাগত জাভা প্রোগ্রামাররা তাদের বৌদ্ধিক সম্পত্তি রক্ষার জন্য নতুন এবং চতুর উপায়গুলি নিয়ে ভাবতে থাকে। এই জাভা প্রশ্নোত্তর কিস্তিতে, আমি আলোচনার ফোরামে ঘন ঘন পুনর্বিবেচনা করা একটি ধারণার আশেপাশে কিছু মিথগুলি দূর করি।
জাভা .class ফাইলগুলির সাথে জাভা উত্সগুলিতে পুনর্গঠন করা যেতে পারে যা জাভা বাইট-কোড ডিজাইন লক্ষ্য এবং ট্রেড-অফগুলির সাথে জাভা বাইট-কোড নকশার লক্ষ্যগুলির সাথে অনেক কিছুই করতে পারে Java অন্যান্য জিনিসের মধ্যে, জাভা বাইট কোডটি কমপ্যাক্টনেস, প্ল্যাটফর্মের স্বাধীনতা, নেটওয়ার্ক গতিশীলতা এবং বাইট-কোড দোভাষী এবং জেআইটি (জাস্ট-ইন-টাইম) / হটস্পট গতিশীল সংকলক দ্বারা বিশ্লেষণের স্বাচ্ছন্দ্যের জন্য ডিজাইন করা হয়েছিল। যুক্তিযুক্তভাবে, সংকলিত। ক্লাস ফাইলগুলি প্রোগ্রামারের অভিপ্রায়টিকে এত স্পষ্টভাবে প্রকাশ করে যে তারা মূল উত্স কোডের চেয়ে বিশ্লেষণ করা সহজ হতে পারে।
সম্পূর্ণরূপে পচন রোধ না করা হলে বেশ কয়েকটি জিনিস করা যেতে পারে, কমপক্ষে এটি আরও কঠিন করে তুলতে। উদাহরণস্বরূপ, একটি সংকলনের পরবর্তী পদক্ষেপ হিসাবে আপনি বায়ার কোডটি যখন পচনশীল তখন পঠন করা কঠিন বা বৈধ জাভা কোড (বা উভয়) -এর সংশ্লেষকে আরও শক্ত করে তুলতে আপনি ক্লাসের ডেটা ম্যাসেজ করতে পারেন। পূর্বের জন্য চূড়ান্ত পদ্ধতির নাম ওভারলোডিংয়ের কাজটি ভালভাবে সম্পাদন করা, এবং নিয়ন্ত্রণ কাঠামো তৈরির জন্য নিয়ন্ত্রণ প্রবাহে হেরফের করার মতো কৌশলগুলি জাভা সিনট্যাক্সের মাধ্যমে পরবর্তীকালের জন্য ভালভাবে উপস্থাপন করা সম্ভব নয়। আরও সফল বাণিজ্যিক obfuscators এই এবং অন্যান্য কৌশলগুলির মিশ্রণ ব্যবহার করে।
দুর্ভাগ্যক্রমে, উভয় পদ্ধতির অবশ্যই জেভিএম চালিত কোডটি পরিবর্তন করতে হবে এবং অনেক ব্যবহারকারী ভীত (সঠিকভাবে তাই) যাতে এই রূপান্তরটি তাদের অ্যাপ্লিকেশনগুলিতে নতুন বাগ যুক্ত করতে পারে। তদ্ব্যতীত, পদ্ধতি এবং ক্ষেত্রের নামকরণের ফলে প্রতিবিম্ব কলগুলি কাজ বন্ধ করে দিতে পারে। প্রকৃত শ্রেণি এবং প্যাকেজের নাম পরিবর্তন করা বেশ কয়েকটি অন্যান্য জাভা এপিআই (জেএনডিআই (জাভা নামকরণ এবং ডিরেক্টরি ইন্টারফেস), ইউআরএল সরবরাহকারী, ইত্যাদি) ভাঙ্গতে পারে। পরিবর্তিত নাম ছাড়াও, শ্রেণি বাইট-কোড অফসেট এবং উত্স লাইন নম্বরগুলির মধ্যে সংযুক্তি যদি পরিবর্তিত হয় তবে মূল ব্যতিক্রম স্ট্যাকের চিহ্নগুলি পুনরুদ্ধার করা কঠিন হতে পারে।
তারপরে মূল জাভা সোর্স কোডটি অবলম্বন করার বিকল্প রয়েছে। তবে মূলত এটি একই ধরণের সমস্যার কারণ হয়ে থাকে। এনক্রিপ্ট না, অবরুদ্ধ?
সম্ভবত উপরেরটি আপনাকে ভাবিয়ে তুলেছে, "আচ্ছা, বাইট কোডটি পরিবর্তনের পরিবর্তে আমি আমার সমস্ত ক্লাসগুলি সংকলনের পরে এনক্রিপ্ট করে জেভিএমের অভ্যন্তরে ফ্লাইতে ডিক্রিপ্ট করে ফেললাম (যা কাস্টম শ্রেণিবদ্ধার দ্বারা করা যেতে পারে)? তারপর জেভিএম আমার কার্যকর করে আসল বাইট কোড এবং তবুও পচন বা বিপরীত প্রকৌশলের কিছুই নেই, তাই না? "
দুর্ভাগ্যক্রমে, আপনি ভুল হবেন, উভয়ই এই ভেবে যে আপনিই প্রথম এই ধারণাটি নিয়ে এসেছিলেন এবং ভেবেছিলেন যে এটি আসলে কাজ করে। এবং কারণটির আপনার এনক্রিপশন স্কিমটির শক্তির সাথে কোনও সম্পর্ক নেই।