+4 امتیاز
قبل در برنامه نویسی توسط (778 امتیاز)
ویرایش شده قبل توسط

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

1 پاسخ

+5 امتیاز
قبل توسط (1.1هزار امتیاز)
انتخاب شده قبل توسط
 
بهترین پاسخ

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

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

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

قبل توسط (1.1هزار امتیاز)
من در قالب سوال مرتبط مطرحش می کنم و جواب میدم.

سوالات مشابه

+2 امتیاز
2 پاسخ 2.4هزار بازدید
0 امتیاز
0 پاسخ 334 بازدید
سوال شده 10 سال قبل در برنامه نویسی توسط amin_y64 (50 امتیاز)
+1 امتیاز
1 پاسخ 1.5هزار بازدید
0 امتیاز
1 پاسخ 473 بازدید
0 امتیاز
1 پاسخ 133 بازدید
+1 امتیاز
1 پاسخ 833 بازدید
...