ناتوانی سایت دیکامپایلر در استخراج کد منبع زبان انگلیسی
به نام خدا
ناتوانی سایت دیکامپایلر در استخراج کد منبع زبان انگلیسی
دیروز و امروز طی چند آزمایش جالب در وبسایت دیکامپایلر اکسپلورر که بصورت آنلاین (بر خط ) ، از دیکامپایلرهای مشهور جهان از جمله باینری نینجا Binary Ninja و آیدا پرو IDA PRO و بومرنگ ، استفاده می کند متوجه شدم که هیچکدام از دیکامپایلرهای این وبسایت ، قادر نیستند کد منبع زبان برنامه نویسی انگلیسی را که به زبان انگلیسی نوشته شده است و شما آن را از پست قبلی این وبلاگ ؛ دانلود کردید؛؛ استخراج کنند و بجای آن ، زبان اسمبلی سطح بالا را نمایش دادند !!
بنابراین توصیه می کنم هرگز زبان برنامه نویسی انگلیسی را از پست قبلی این وبلاگ ؛ دانلود نکنید زیرا این زبان ؛ به هیچ دردی نمی خورد و کارایی ندارد !
هیچ دیکامپایلری نمی تواند کد منبع زبان سطح بالا را از درون نرم افزارها استخراج کند و بجای اینکار ، کد زبان اسمبلی سطح بالا را استخراج می کند .
حتی باینری نینجا Binary Ninja که قدرتمندترین دیکامپایلر جهان می باشد و خاصیت ریکامپایل Recompile و مهندسی معکوس واقعی نیز دارد ؛ هم ؛ از استخراج کد زبان سطح بالا عاجز شد !
این آزمایش بار دیگر ثابت کرد که زبانهای سطح بالا هرگز نمی توانند با زبان ماشین ، ارتباط مستقیم برقرار کنند .
و این یعنی اینکه تعریف واژه کامپایلر Compiler در جزوات رشته مهندسی کامپیوتر در دانشگاه ؛ کاملا اشتباه و غلط است .
کامپایلر - Compiler -هرگز کد زبان سطح بالا -HLL - از قبیل پاسکال- Pascal - یا بیسیک - Basic - یا سی پلاس پلاس - C plus plus - را مستقیما به کد زبان ماشین - Machine Code - ؛ ترجمه نمی کند که اگر ترجمه می کرد ؛ آنگاه دیکامپایلرهایی همچون آیدا پرو IDA PRO یا باینری نینجا - Binary ninja- می توانستند کد زبان سطح بالا -HLL - را از درون نرم افزارها استخراج کنند !
اما در عمل و در دنیای واقعی ؛؛ ؛ این دیکامپایلرها -Decompilers - فقط کد زبان اسمبلی -Assembly Language - را نمایش می دهند !!!!
این ثابت می کند که کامپایلر -Compiler - طبق تعریف صحیح و واقعی ؛ چنین برنامه ای است :
کامپایلر ، برنامه یا نرم افزار یا ابزاری است که کد زبان سطح بالا را ابتدا به زبان اسمبلی و سپس به زبان ماشین ترجمه می کند .
همچنین این آزمایشات ثابت کردند که کد منبع -Source Code - هیچ زبان سطح بالا -HLL- بخصوص زبان برنامه نویسی انگلیسی -Cal3040 یا Cal4700 یا EnglishPL- را نمی توان بدست آورد.
و یک چیز دیگر را نیز ثابت کرد :
دیکامپایلر ، یک نرم افزار گول زننده و ضعیف است که هرگز نمی تواند هیچ مشکلی را حل کند و مثلا نمی تواند کدی را که دیکامپایل نکرده اما دیس اسمبل -DisAssemble- کرده است را مجددا ، ری اسمبل -ReAssemble- نماید !!
البته بجز Binary Ninja که توانایی ReAssemble را دارد .
در حالیکه دیس اسمبلر -DisAssembler - می تواند کد را مجددا ری اسمبل -ReAssemble - نماید .
مثل دیس اسمبلرهای زیر که خاصیت ری اسمبل و مهندسی معکوس را نیز دارند :
C32Asm
OLLYDBG
X86/x64DBG
Spiro
RosAsm
درواقع ، دیکامپایلرها ابزارهای اضافی هستند و باید آنها را از لیست ابزارهای مهندسی معکوس ، حذف کرد .
ضمن اینکه این آزمایش ، بار دیگر عدم کارایی زبانهای سطح بالا را نیز ثابت کرد .
وقتیکه ما با زبان ماشین یا اسمبلی برنامه می نویسیم ، مهندسی معکوس ، بسیار سریعتر و آسانتر است و آن چیزی که مهندسی معکوس می شود یا عینا همان کد اولیه است و یا چیزی بسیار شبیه به کد اولیه .
به همین دلیل است که من اصرار دارم تمام مردم جهان ، فقط با زبان ماشین یا فقط با زبان اسمبلی ، برنامه نویسی کنند تا کد منبع با کد مقصد ، یکسان باشد و مهندسی معکوس نیز آسانتر و سریعتر شود و به واقعیت نزدیکتر باشد .
دیس اسمبلی = سورس کد = کد منبع
DisAssembly=Source Code
روشی که من در برنامه نویسی با زبان اسمبلی بکار می برم ، در نوع خودش جالب است !
من مستقیما به سبک دیس اسمبلی یعنی اسمبلی کاملا سطح پایین ، برنامه می نویسم .
من اینکار را در اسمبلرهای قدرتمند و خالص و استاندارد یعنی Fasm و RosAsm انجام می دهم
در RosAsm حتی بدنه ی اصلی روال ها و توابع نیز با کدهای دیس اسمبلی نوشته می شود
مثال :
push ebp
mov ebp , esp
.....
.....
mov esp , ebp
pop ebp
این چیزی که بصورت یک کد معکوس و قرینه در بالا مشاهده می فرمایید ، شکل واقعی روال ها و توابع زبان برنامه نویسی اسمبلی و سی و سی پلاس پلاس و پاسکال و بیسیک است !!
یعنی تمام روالها و توابع های این زبانها ، پس از کامپایل شدن ، دقیقا به کدهای اسمبلی که در بالا مشاهده می شود ، ترجمه می شوند .
حالا من در زبان اسمبلی و خصوصا در RosAsm و Fasm ، از همان ابتدای کار ، کد برنامه ام را به شکل بالا می نویسم .
بعد که برنامه را اسمبل -Assemble - کردم و سپس آنرا با کمک یک ابزار مهندسی معکوس از قبیل RosAsm یا ollydbg یا x86/x64dbg یا borg disassembler یا ida pro disassembler یا Binary ninja یا c32asm ، دیس اسمبل -DisAssemble - نمودم ، می بینم که کد خروجی همان کد ورودی است !!
یعنی دیس اسمبلی مساوی است با سورس
در زبان اسمبلی RosAsm ، کد منبع ، همان کد مقصد می باشد .
در زبان برنامه نویسی ماشین یعنی هکس ادیتور - hex editor - هم که ناگفته پیداست که کد مقصد ؛؛ همان کد منبع است .
یعنی در هکس ادیتور - Hex Editor - که همان زبان ماشین می باشد ؛ شما از همان ابتدای کار ؛ با کد مقصد؛؛؛ یعنی کدهای از پیش کامپایل شده یا PreCompiled , برنامه تان را می نویسید !!
اگر شما عادت کنید که کد منبع برنامه تان را به سبک دیس اسمبلی یا به سبک hex editor بنویسید یعنی کد برنامه تان را با کمک کد مقصد بنویسید ؛ آنوقت هرگز به دیکامپایلر نیاز نخواهید داشت و فقط یک دیس اسمبلر ساده از قبیل خود RosAsm یا خود hex editor یا هرکدام از ابزارهایی که نامشان را در بالا ذکر کردم ، کافی می باشد .
این سبک از برنامه نویسی ، کار شما را آسانتر می کند و زحمت شما را کمتر می نماید و وقت شما را هدر نمی دهد .
من هیچ دلیل عقلانی برای استفاده از زبانهای برنامه نویسی سطح بالا خصوصا زبان برنامه نویسی انگلیسی ؛ نمی بینم .
وقتیکه زبانهای ماشین یا اسمبلی می توانند تمام کارهای زبانهای سطح بالا را بخوبی و حتی بهتر از خود این زبانها انجام دهند ، برای چه و به کدام دلیل عقلانی ، به سمت زبانهای سطح بالا بروم و وقت خودم را هدر دهم ؟؟؟
هدف از برنامه نویسی ، تولید فایل است . فایل را که تولید کردیم ؛ به مشتری تحویل می دهیم و پولش را می گیریم .
سایر موارد ، اضافی هستند و عملا ما را به بیراهه می کشانند .
من روی زبانهای ماشین و اسمبلی هیچگونه تعصبی ندارم . بلکه نتایج آزمایشات و تجربیات چندساله ام را در این وبلاگ نوشته ام .
این حرف که هر زبان برنامه نویسی برای کار خاصی ساخته شده است و هیچ زبان برنامه نویسی ، همه منظوره و بهترین زبان نیست ، کاملا اشتباه و غلط است .
در پاسخ به این غلط رایج و مصطلح که در دنیای کامپیوتر ، واقعا خیلی ها را فریب داده است ، این را می گویم :
بله شما راست می گویید : هر زبان برنامه نویسی برای کار خاصی ساخته شده است و هیچ زبانی بهترین زبان نیست اما اگر این زبان ، یک زبان سطح بالا باشد!!
اما زبانهای ماشین و اسمبلی ، برای تمام مقاصد و هدف ها و موارد تخصصی و غیرتخصصی ، کاربرد کامل و بی نقص دارند و همه منظوره و بهترین زبانها هستند .
اگر فلان زبان سطح بالا ، محدودیت فنی دارد و دست شما را می بندد آنوقت این حرف شما صحیح و درست است .
اما اگر زبان اسمبلی یا ماشین را بکار می برید که بهترین زبانها می باشند ، این حرف شما متاسفانه کاملا غلط و اشتباه است .
+
خب دیگه این شما و این هم وبسایت دیکامپایلر :
نام وبسایت :