اکثر کسانی که کلمه ShellCode را میشنوند فکر میکنند ارتباطی با Shell Scripting دارد و وقتی که در جواب این موضوع نه میشوند میگویند پس چرا؟ پس ShellCode به چه معناست؟ اصطلاح ShellCode از لحاظ تاریخی برای توصیف سازی کد های مخربی است که در Exploit های ایجاد شده برای نرم افزارهای متنوع به منظور ایجاد یک دسترسی Shell از راه دور استفاده می شوند تا فرد مهاجم توانایی بهتری به منظور تعامل و دسترسی به سیستم قربانی پیدا کند.

به کد نویسی استاندارد زبان C بالا توجه کنید. میتوانیم به راحتی آن را در یک
Compiler ایجاد کنیم و یک دسترسی Shell را برایمان ارائه کند. همین موضوع برای افراد فعال در این حوزه بسیار کار است زیرا میتوانند با استفاده از ایجاد کردن برنامه های نامناسبی مثله کد C بالا ورودی های نامناسب تری را برای دست یابی به همان برنامه استفاده کنند. بهترین پاداش برای مهاجمان این است که
نرم افزار مورد نظرشان از دسترسی بالایی برخوردار باشد تا در حین حمله از دسترسی بالایی که نرم افزار مورد نظر دارد استفاده کنند و همان دسترسی را به سمت خودشان بکشانند.
بیاید حالا کد بالا را در یک Disassembler مانند OllyDB و IDA و Ghidra بازکنیم و خروجی آن را ببینیم:

قسمت های که به شکل قرمز رنگ در آمده است ShellCode ما هستند و در بخش سمت راست کد نویسی های کدمان را به شکل کامل قابل فهم برای انسان به زبان Assembly میبینیم. اما اگر بخواهیم قشنت های قرمز رنگ را بکارگیری کنیم باید از چه تکنیکی استفاده کنیم؟! پاسخ این سوال بسیار سادست ابتدا شما میبایست مقدار های به دست آمده را به حالتی خوانا و قابل فهم برای
نرم افزار تبدیل کنید که در گرفتن ورودی ها از شما آن را قبول کنید اما این حالت خوانا و قابل فهم رو به چه شکل انجام بدیم؟! اصولا شما میبایست کد های خودتون را به بایت های Hex متصل کنید با استفاده از /x به شکل زیر که مثالی از اینکار را برای شما بر روی ShellCode در تصویر اورده اییم
درواقع ShellCode ها به دو دسته مختلف تقسیم بندی میشوند که این دو دسته عبارتند از: