Reverse Code Engineering

逆向工程代码 обратная код машиностроения

Reverse Code Engineering

逆向工程代码 обратная код машиностроения

Reverse Code Engineering

Share what I know............... learn what I don’t

(انجام پروژه های مرتبط، برای اطلاعات بیشتر به صفحه "ارتباط با من" مراجعه کنید)

آخرین نظرات

انواع مختلفی از عملیات ریاضی رو میشه توی زبان سی پیاده سازی کرد در اینجا هم ما چند نمونه از این عملیات رو مثل جمع و تفریق, - - , ++ و % رو مورد بررسی قرار میدیم.

کد برناممون هم بصورت زیر هستش:

int a = 0;

int b = 1;

a = a + 11;

a = a - b;

a--;

b++;

b = a % 3;


کد دیس اسمبل شده بالا بصورت زیر هستش:

00401006        mov     [ebp+var_4], 0

0040100D        mov     [ebp+var_8], 1

00401014        mov     eax, [ebp+var_4] 1

00401017        add     eax, 0Bh

0040101A        mov     [ebp+var_4], eax

0040101D        mov     ecx, [ebp+var_4]

00401020        sub     ecx, [ebp+var_8] 2

00401023        mov     [ebp+var_4], ecx

00401026        mov     edx, [ebp+var_4]

00401029        sub     edx, 1 3

0040102C        mov     [ebp+var_4], edx

0040102F        mov     eax, [ebp+var_8]

00401032        add     eax, 1 4

00401035        mov     [ebp+var_8], eax

00401038        mov     eax, [ebp+var_4]

0040103B        cdq

0040103C        mov     ecx, 3

00401041        idiv    ecx

00401043        mov     [ebp+var_8], edx 5


خط اول:

مقدار 0 به متغیر اول انتقال داده میشه (جلسه قبل در مورد انواع متغیرها توضیح دادم پس فک نکنم نیاز به توضیح در مورد این متغیر محلی باشه)

پس a = 0

 

خط دوم:

مقدار 1 به متغیر دوم انتقال داده میشه پس b = 1

 

خط سوم:

متغیر a به رجیستر eax انتقال داده میشه تا بشه روش عملیات محاسباتی انجام داد

 

خط چهارم:

0Bh (یا همون 11 خودمون) به eax اضافه میشه و نتیجه توی eax نگهداری میشه

پس eax = a + 11

 

خط پنجم:

مقدار eax به متغیر a انتقال داده میشه

یعنی a = eax  که در کل میشه a = a + 11

 

خط ششم:

متغیر a به رجیستر ecx انتقال داده میشه

 

خط هفتم:

متغیر دوم یعنی b از ecx کم میشه و نتیجه توی ecx نگهداری میشه

پس یعنی ecx = ecx – b

 

خط هشتم:

مقدار ecx به متغیر a انتقال داده میشه پس نتیجه a – b به a انتقال داده میشه

 

خط نهم:

متغیر a به رجیستر edx انتقال داده میشه

 

خط دهم:

از edx یک واحد کم میشه

 

خط یازدهم:

رجیستر edx به متغیر a انتقال داده میشه که یعنی a = a – 1 یا همون a – خودمون

 

خط دوازدهم:

مقدار متغیر b به eax انتقال داده میشه

 

خط سیزدهم:

یه واحد به رجیستر eax اضافه میشه

 

خط چهاردهم:

حالا رجیستر eax به متغیر b انتقال داده میشه که یعنی b = b + 1 یا همون b++ خودمون

 

خط پانزدهم:

متغیر a به رجیستر eax انتقال داده میشه

 

خط شانزدهم:

CDQ 4بایت رو به 8 بایت ارتقاء میده

در اینجا هم از edx:eax ایجاد میشه

 

خط هفدهم:

عدد 3 به ecx انتقال داده میشه

 

خط هجدهم:

زمانی که دستور idiv اجرا میشه مقدار eax بر ecx تقسیم میشه ( a / 3) و نتیجه در eax و باقیمانده در edx نگهداری میشه

 

خط نوزدهم:

مقدار رجیستر edx که باقیمانده هستش به متغیر b انتقال داده میشه که نتیجه ی اجرای این چند دستور a = a % 3 میشه


با رنگ از هم دیگه جدا کردم که راحتتر متوجه بشید.

موفق باشید.

pcrlth0n


نظرات (۱)

 خیلی با حوصله و عمیق توضیح داده اید متشکرم
ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی