Reverse Code Engineering

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

Reverse Code Engineering

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

Reverse Code Engineering

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

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

آخرین نظرات

آنالیز بدافزار ZeroAccess (قسمت دوم)

شنبه, ۲ آبان ۱۳۹۴، ۰۹:۰۵ ب.ظ

خوب همونطور که گفته بودیم دستور int 2dh باعث میشه که از آدرس 413BC0 پرش کنیم و همچین آدرس 413BC1 هم اجرا بشه و در آدرس 413BC2 متوقف بشیم.

pop esi چی کار کرد؟

آدرس 413BB9 که توسط Call در آدرس 413BB4 در پشته پوش شده بود رو پاپ میکنه. پس الان ESI ما محتوی مقدار 413BB9 هستش.

در ادامه از این 9 واحد کم میشه و الان ESI محتوی 413BB0 هستش.

دستور lodsd یا بعبارتی (LODS DWORD PTR DS:[ESI]  ) مقدار آدرس 413BB0 رو به اندازه 4بایت(Dword) در EAX لود میکنه.  پس الان EAX ما مقدار 0 میگیره. و خود ESI هم 4 بایت کاهش پیدا میکنه.

 

pop ebp ؟؟؟؟

این دستور هم آخرین عنصری که الان روی stack قرار داره (یه بعبارتی بالای پشته) رو پاپ میکنه. سوال اینجاست که الان چه چیزی روی پشته قرار داره؟!!

 

اگه یکم به عقب برگردید میبینید که ما توسط دستور Call در آدرس 413A3B فراخوانی شدیم پس الان باید آدرس 413A40 روی پشته قرار داشته باشه.

پس این دستور باعث میشه ما دیگه از اجرای ادامه دستورات از آدرس 413A40  جلوگیری کنیم.

و با دستور retn ما به آدرس 413ADD خواهیم رفت.


برگشت به 00413ADD :



در اینجا هم 3 تابع پیش رو داریم میخوایم نگاهی به اینها بندازیم:

 

ابتدا تابع sub_413A2B :



با دستور lodsd آشنا هستید 4 بایت از آدرس ESI میخونه و در EAX قرار میده

خط بعد مقدار بدست آمده توسط lodsd (یعنی EAX) با EDX , XOR میکنه.

stosd برعکس lodsd عمل می کنه و مقدار EAX رو در EDI قرار میده.

دو دستور بعد هم یک مقایسه و یک پرش هستش.

 

با توجه به کل این 6 دستور می توان فهمید که این حلقه تا زمانی که edi بزرگتر یا مساوی با ebp شود اجرا می شود.

همچنین باید متوجه شده باشید که دستورات xor و sub یه جورایی دارند عمل رمزگشایی رو انجام میدهند و کلید شروع این رمزگشایی هم edx هستش.

برای اینکه نتیجه رو بصورت عملی ببینید می تونید در آدرس 413A35 یک BP قرار بدید و تغییرات کد ها رو بعد از اجرای این حلقه مشاهده کنید.

(از قبل یادتون هست که ebp حاوی آدرس 413A40 و edi حاوی آدرس 413BAC هستش پس تغییرات رو میان این دو آدرس جستجو کنید:) )

 

تابع  sub_401000:

 

وقتی وارد این تابع می شویم:


دو دستور در ابتدا وجود دارد سپس تابع 413A18 فراخوانی می شود.


ما نمونه مشابه این کد رو قبلا دیدیم:) این یکی هم انگار یک حقه int 2dh هستش.

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

دستور Call رو نمونش رو قبلا تحلیل کردیم. میاد آدرس بعد خودش رو در پشته قرار میده بعد به دستور بعد خوردش پرش می کنه.

Eax مقدار 1 رو میگیره و بعد اون هم یک دستور int 2Dh وجود داره. در این حالت اگه دستورات رو در دیباگر دنبال می کنید خواهید دید که ما از retn پرش می کنیم, pop edx هم اجرا خواهد شد و در آدرس 413A26 متوقف میشید.

باقی دستورات هم نمونش قبلا تحلیل شده, تحلیل این قسمت برعهده شما :)

 

قبل از اینکه ادامه تحلیل رو انجام بدیم میخوام توابعی که تحلیل کردیم رو در IDA نامگذاری کنم بصورت زیر:



حال باید تابع Call ebp رو بررسی کنیم قبل از شروع باید یادتون باشه که ebp الان محتوی آدرس 413A40 هستش.


نظرات (۰)

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