چرا decompile کردن برنامه های جاوا راحت است؟

+4 رأی
میانگین بازدید روزانه 0.15358 بازدید

این سوال برای بنده پیش اومده که چرا برنامه هایی که با جاوا نوشته می شوند decompile آن ها نسبت به بقیه زبان ها راحت تر است؟ حتی برنامه های اندروید هم به راحتی از apk به سورس می رسیم. چرا؟

سوال 6 سال قبل در تالار برنامه نویسی توسط java_ (778 امتیاز)
ویرایش 6 سال قبل توسط Saeed Zarinfam

1 جواب

+5 رأی
 
بهترین جواب

جاوا یک زبان برنامه نویسی مفسری و کامپایلری است و بر خلاف زبان هایی مثل C++ که فقط کامپایلری هستند، نسبت به فرآیند decompile شدن ضعیفتر است و راحتتر decompile می شود. می توان دلیل این ضعف را بصورت زیر توضیح داد:

  • کد های نوشته به زبان جاوا به بایت کد های قابل حمل و سطح بالا کامپایل می شوند که با ساختار های داده ای سطح بالا کار می کند ولی زبان های برنامه نویسی کامپایلری مثل C++ به مجموعه دستورات سطح پایین کامپایل می شوند که با داده های باینری سطح پایین مخصوص هر ماشین کار می کند که این باعث می شود به این راحتی قابل decompile نباشند.
  • کامپایلر جاوا بخاطر وجود JIT که بصورت داینامیک و زمان اجرا انجام می شود هیچگونه بهینه سازی پیشرفته ای در بایت کد های تولید شده اعمال نمی کند ولی کامپایلر C++ بهینه سازی های متنوعی در زمان کامپایل انجام می دهد که فرآیند decompile را دشوار می کند.
  • dependency ها در جاوا در زمان اجرا شناسایی می شوند، بنابراین نام متد ها و کلاس ها و ... باید بهمان صورت در بایت کد ها موجود باشد ولی در C++ وابستگی ها بصورت استاتیک لینک می شود و قابلیت reflection هم وجود ندارد بنابراین می توان تغییرات زیادی در برنامه کامپایل شده انجام داد.
  • برنامه نهایی در جاوا در قالب فایل های jar عرضه می شوند که یک فایل آرشیو ساده است که encrypt نمی شود ولی در C++ برنامه می تواند در قالب یک فایل اجرایی عرضه شود و همچنین encrypt هم بشود.

با توجه به موارد فوق زبان برنامه نویسی جاوا بعنوان بک زبان برنامه نویسی مفسری و کامپایلری و همچنین امکانات سطح بالایی که در اختیار ما می گذارد در بحث decompile شدن ضعیفتر از زبان های کامپایلری است ولی با روش هایی می توان این مورد را بهبود داد.

جواب 6 سال قبل توسط Saeed Zarinfam (959 امتیاز)
انتخاب شده در 6 سال قبل توسط java_
من در قالب سوال مرتبط مطرحش می کنم و جواب میدم.

سوال های مشابه

+2 رأی
2 جواب میانگین بازدید روزانه 0.681,608 بازدید
0 رأی
0 جواب میانگین بازدید روزانه 0.06162 بازدید
سوال 7 سال قبل در تالار برنامه نویسی توسط amin_y64 (50 امتیاز)
+1 رأی
1 جواب میانگین بازدید روزانه 0.341,099 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.26767 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.09240 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.87130 بازدید
0 رأی
0 جواب میانگین بازدید روزانه 0.26123 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.48276 بازدید
کانال تلگرام جواب یاب
...