علم Cracking 3 شاخه ای از علم Reverse Engineering است. از این رو برای درک معنا و مفهوم علم Cracking باید با Reverse Engineering آشنا شویم. اما برای درک مهندسی معکوس هم باید یک پله عقب تر برویم : تا زمانی که با علم مهندسی نرمافزار یا همان برنامه نویسی آشنا نشویم ، متوجه Reverse Engineering هم نخواهیم شد. به همین خاطر تمام کسانی که مایل به یادگیری علم کرک هستند باید تا حدودی با برنامه نویسی و مهندسی نرمافزار آشنایی داشته باشند.
برای اینکه بتوانیم یک Cracker 4 حرفه ای باشیم باید معنا و مفاهیم خیلی از علوم پایه ای کامپیوتر را بدانیم. در واقع علم Cracking چندان علم آسانی نیست و مشکلات زیادی در راه یادگیری این علم خواهیم داشت. به عنوان مثال لازم هست بدانیم زبان ماشین چیست، CPU 5 چگونه کار میکند، تا حدودی با برنامه نویسی آشنا باشیم، زبان Assembly 6 را بلد باشیم، ساختار فایل های PE 7 را بشناسیم و... . در واقع پیش نیازهای یادگیری علم Cracking زیاد هستند و اگر شما واقعا دوست دارید تا این علم را یاد بگیرید باید به دنبال خیلی از علوم کامپیوتری بروید و دانسته های خود را در مورد خیلی از مسائل کامپیوتری افزایش دهید.
با وجود اینکه مدت زیادی از شیوع این علم در ایران میگذرد اما هنوز آموزش های خوبی برای رواج این علم به زبان فارسی نوشته نشده به همین خاطر بر آن شدیم تا آموزشی را تدوین نماییم و دشواری های راه را برای علاقه مندان تازه کار بر طرف نماییم. ما در این دوره آموزشی سعی داریم تا نیازهای ابتدایی یک تازه کار در دنیای Crack را برای شروع Cracking بر طرف کنیم. بحث های حرفه ای در مورد Cracking نیز در دیگر آموزش های گروه قابل دسترسی هستند.
نکته ای که قبل از شروع باید به آن اشاره کنیم این است که اگرچه مطالب استفاده شده در این مجموعه برای افرادی که با برنامه نویسی آشنا نیستند قابل فهم است اما آشنایی با یک زبان برنامه نویسی سطح بالا (مانند ++C یا Delphi و یا Visual Basic) برای درک بهتر مطالب بسیار ضروری است. به همین خاطر در صورتی که تمایل به یادگیری Cracking دارید، همانطور که قبلا هم اشاره شد باید با یک زبان برنامه نویسی آشنا باشید.
مهندسی نرمافزار ، برنامه نویسی و طراحی
یک برنامه نویس با به کار گیری زبان های برنامه نویسی میتواند برنامه خود را طراحی و برای آن کد نویسی کند. به عنوان مثال میتواند برای برنامه Menu قرار دهد، متن های مورد نظر خود را داخل آن قرار دهد، قسمت های مختلف برنامه را به هم ارتباط دهد و از همه مهمتر برای برنامه خود کد بنویسید تا برنامه یک سری محاسبات اصلی را انجام دهد.
بنابر این به مجموعه کارهایی که برنامه نویس (یا همان مهندس نرمافزار) برای طراحی نرمافزار خود انجام میدهد مهندسی نرمافزار گفته میشود. در واقع اگر بخواهیم یک تعریف دقیق و کتابی از مهندسی نرمافزار داشته باشیم به جمله زیر میرسیم:
• مهندسی نرمافزار عبارت است از به کار گیری اصول علمی (مانند زبان برنامه نویسی) برای طراحی و یا ساخت یک نرمافزار.
Reverse Engineering یا مهندسی معکوس چیست؟
معنای Reverse Engineering به فارسی مهندسی معکوس هست و همانطور که از معنای آن مشخص هست ، این علم طرف مقابل مهندسی نرمافزار میباشد. در واقع مهندسی نرمافزار و مهندسی معکوس دو روی یک سکه هستند. برای درک بهتر این مطلب، موضوع ر بازتر میکنیم:
فرض کنیم که نتیجه نهایی کار یک برنامه نویس (یا همان مهندس نرمافزار) یک فایل exe هست که با اجرای آن یک سری محاسبات انجام میشود. به عنوان مثال این برنامه عددی را از شما میگیرد و با انجام محاسباتی، تغییراتی بر روی آن عدد اعمال میکند و نتیجه را به شما نشان میدهد. تممی این کارها در پشت پرده انجام میشود و شما فقط عددی را به برنامه میدهید و بلافاصله نتیجه ای میبینید. ولی نحوه رسیدن به این نتیجه را نمی بینید. حال شما میخواهید با طریقه انجام محاسبات و نحوه رسیدن به نتیجه آشنا شوید. اولین راه برای آشنایی با نحوه انجام محاسبات این برنامه داشتن Source Code8 آن است. اما در خیلی از موارد شما سورس کد برنامه ها را در اختیار ندارید. تنها چیزی که برای شما موجود هست همان فایل exe و بقیه فایل های جانبی مربوط به برنامه میباشد.
شاید در اولین نگاه فکر کنیم که آشنایی با نحوه انجام محاسبات یک برنامه بدون داشتن سورس کد آن غیر ممکن باشد. ولی با استفاده از علم Reverse Engineering این کار غیر ممکن نیست و ما میتوانیم بدون داشتن سورس کد برنامه و یا اطلاعات دقیقی در رابطه با طراحی آن به مراحل طراحی و کد نویسی برنامه پی ببریم و با طریقه انجام محاسبات آن آشنا شویم.
تعریف زیر یک تعریف ابتدایی از Reverse Engineering هست. وقتی به بخش رابطه بین Reverse Engineering و Assembly برسیم مفهوم دقیق تری از مهندسی معکوس بیان میکنیم :
• Reverse Engineering علمی است که توسط آن میتوان بدون داشتن سورس کد یک برنامه به نحوه انجام محاسبات آن برنامه پی برد.
_________________________________________________________________-
1. مهندسی معکوس
2. در دنیای کامپیوتر Bug به معنی اشتباه یا اشکال در برنامه است. اما معنای اصلی آن در انگلیسی حشره میباشد. روزی که کامپیوتر Mark I در هاروارد خراب شد پس از یک جستجوی طولانی تکنسین ها علت مشکل را پیدا کردند. یک حشره کوچک بین نقاط تماس یک رله قرار داشت. به همین دلیل وجود اشکالات کامپیوتری Bug (حشره) نام گرفت و برطرف کردن این اشکالات کامپیوتری را Debug نامیدند. ( ر.ج کتاب آموزشی اسمبلی برای کامپیوتر های شخصی نوشته شده توسط پیتر نورتن و جان سوچا، فصل 1)
3. علمی برای از بین بردن محدودیت برنامه ها و استفاده نامحدود از آنها.
4. شخصی که به علم Cracking تسلط دارد و از آن استفاده میکند.
5. Central Processing Unit (واحد پردازش مرکزی) که به آن ریز پردازنده هم میگویند. CPU تراشه ای است که در واقع برنامه ها را اجرا میکند.
6. زبان اسمبلی یکی از زبان های سطح پایین است که شباهت زیادی به زبان ماشین دارد و دستورات آن بر گرفته از کلمات انگلیسی و یا مخفف آنها است.
7. Portable Executable
8. سورس کد فایل یا فایل هایی هستند که در آنها اطلاعات اصلی یک برنامه مانند کدهای برنامه نویسی شده قرار دارد و هنوز مرحله Compile را طی نکرده اند.
_________________
و نا اميد نشوند از رحمت خدا مگر كافران -به نام خالق بی کران ها
مهربانی را وقتی دیدم که کودکی خورشید را در دفتر نقاشی هایش سیاه کشید تا پدر کارگرش زیر نور آفتاب نسوزد.
ما زنده به آنيــــــــــــم كه آرام نگيريـــم ------------------------موجيم كه آسودگــي ما عدم ماســــت
وَ اِذا خاطَبَهُمُ الْجاهِلون قالُوا سَلاما
چند جمله كه من سعي ميكنم در زندگيم ، با آنها زندگي كنم:
1- یگانه عملی که در زندگی انسان را به هدفش میرساند، انجام وظیفه است.
2- وقتی کبوتری شروع به معاشرت با کلاغها میکند پرهایش سفید میماند، ولی قلبش سیاه میشود.
3- میخواهی به شخصیت واقعی یک انسان پی ببری ؟ پس به او قدرت بده !
4- منطقی و صادقانه برخورد کردن در همه مراحل شرط اصلی موفقیت است.
5- اگر هفتاد میلیون نفر به یک چیز احمقانه اعتقاد داشته باشند آن چیز همچنان احمقانه است !
6- آدمها باتجربه هیچوقت برگ برنده هاشون رو چند بار رو نمیکن .
7- رحم کنید تا به شما رحم شود.
8- یک ذرّه، به کوچکی و سبکی یک الکترون، میتواند مسیری ایجاد کند که با چشم دیده میشود؛ فقط لازم است که بار داشتهباشد.
9- بیشعورها را خدا هم نمی تواند ادب کند! (با صنايع ادبي)
10- دیگران رو ببخش نه به خاطر اینکه آنها سزاور بخشش تو هستند بلکه به خاطر اینکه تو سزاوار آرامشی.
11- تلاش دلیل وجود است ، تلاش کن چراکه وجود داری.
12- افکار عمومی به طرز شگفت انگیزی اهل مدارا است، همه چیز را تحمل می کند به غیر از نبوغ.
13- اگر با دشمني زياد بجنگي ، بعد از مدتي تمام استراتژي هاي تو را فرا ميگيرد .
14- پيروزي يعني توانايي رفتن از يك شكست به شكست ديگر بدون از دست دادن اشتياق .
و...






