Reverse Code Engineering

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

Reverse Code Engineering

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

Reverse Code Engineering

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

آخرین نظرات

آنالیز و کشف الگوریتم (2)

سه شنبه, ۲۰ مرداد ۱۳۹۴، ۰۷:۰۴ ب.ظ

3 تا فایل دیگه برای آنالیز در اینجا قرار میدم.

مثل قبل اول خودتون سعی کنید بعد به ادامه مطلب مراجعه کنید.


لینک دانلود



AnalyseMe001.exe

 

وقتی این مثال رو در IDA Pro مشاهده می کنیم میبینیم که یک تابع تعریف شده و 5 مرتبه با مقادیر متفاوت فراخوانی شده:

حالا این تابع رو در IDA Pro بررسی می کنیم:



1- ابتدا داخل متغیر محلی  var_4 مقدار 0 قرار داده شده.

2-سپس arg_4 که آرگومان دومی هستش که به این تابع دادیم رو با مقدار 0 مقایسه کرده.

اگه مقدار آرگومان دوم ما برابر با صفر باشه این شرط برقرار میشه و پرشی به کدهای سمت راست انجام میشه و در این صورت اجرا تابع به اتمام میرسه.

اما اگه مقدار آرگومان دوم ما برابر با صفر نباشه ما پرشی به کدهای سمت چپ انجام میدیم که بدنه ی این تابع هستش

 

3-مقدار متغیر محلی var_4 که الان محتوی صفر هستش به eax انتقال داده میشه

 یعنی eax = var_4

4- آرگومان اول arg_0 به eax اضافه میشه 

یعنی  eax = var_4 + arg_0

5- حال مقدار eax به var_4 انتقال داده می شه

 یعنی var_4 = var_4 + arg_0

6- مقدار آرگومان دوم arg_4 به ecx انتقال داده میشه 

یعنی ecx = arg_4

7- از ecx یک واحد کم میشه

 یعنی ecx = arg_4 – 1

8- مقدار ecx دوباره به arg_4 برگردونده میشه

 یعنی arg_4 = arg_4 – 1

 

9- در آخر پرشی به مرحله 2 انجام میشه و دوباره تمام این روال اتفاق میافته تا زمانی که مقدار آرگومان دوم ما برابر با صفر بشه.

 

اگه پست های قبل رو دنبال کرده باشید متوجه میشید که این حلقه ی while هستش. ولی همونطور که میدونید میشه اینکارو با for هم انجام داد.

ما اگه بخوام کدی برای تحلیلی که انجام دادیم بنویسم بصورت زیر میشه:



خوب من فقط تابعی که در AnalyseMe001.exe وجود داره رو پیاده سازی کردم و می دونید که این تابع 5 بار فراخوانی شده با مقادیر متفاوت.

 

حالا اگه کدی که نوشتیم رو کامپایل کنم:



میبینید که عملکرد تابع تفاوتی نداره فقط یه سری دستورات اضافی تر وجود داره اون هم بخاطر تنظیمات و نوع کامپایلر هستش.

 

 


AnalyseMe002.exe

 

 

در این مثال یه تابع فراخوانی شده:


گراف این تابع خیلی مشابه مثال قبل هستش ولی اگه دقت کنید میبینید که یه سری دستورات متفاوت هستند:



 

1- مقدار 1 به var_4 تعلق می گیره

2- آرگومانی که به این تابع داده شده با صفر مقایسه میشه (میبینید که این تابع فقط یک آرگومان گرفته)

3- اگه آرگومان تابع کوچکتر یا مساوی با صفر باشه پرش به دستورات سمت راست انجام میشه.

مثل مثال قبل کادر سمت راست دستورات خروج از تابع هستش و کادر سمت چپ دستورات درون تابع.

5- var_4 یعنی مقدار 1 به eax انتقال داده میشه

 پس eax = var_4

6- arg_0 با eax ضرب میشه و مقدارش درون eax ریخته میشه

 پس eax = arg_0 * var_4

7- نتیجه ضرب بالا در var_4 ریخته میشه

پس تا اینجا داریم var_4 = arg_0 * var_4

8- arg_0 به ecx انتقال داده می شه

9- مقدار ecx یک واحد کم میشه

پس ecx = arg_0 - 1

10- مقدار ecx به arg_0 انتقال داده میشه 

پس arg_0 = arg_0 – 1

11- در اینجا پرشی به مقایسه مرحله ی 2 انجام میشه و تا زمانی که arg_0 بزرگتر از 0 هستش این حلقه ادامه داره.

 

حالا کدی که بعد از تحلیل می نویسیم به صورت زیر هستش

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



من این رو کامپایل می کنم و نتیجش رو با مثال اصلی مقایسه می کنیم.



میبینید که یه سری تفاوت وجود داره و دلیلش رو قبلا گفتم. ولی عملکرد تابع با مثال اصلی یکسان هستش.

 

 


AnalyseMe003.exe

 

این مثال رو خودتون انجام بدید و نتیجه رو در نظرات قرار بدید.









  • موافقین ۱ مخالفین ۰
  • ۹۴/۰۵/۲۰
  • ۹۲۸ نمایش

آنالیز و کشف الگوریتم

نظرات (۰)

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