Reverse Code Engineering

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

Reverse Code Engineering

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

Reverse Code Engineering

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

آخرین نظرات

کدهای بلااستفاده (junk code)

جمعه, ۱۷ بهمن ۱۳۹۳، ۰۹:۳۹ ب.ظ

عبارت junk code رو احتمالا توی مباحث مرتبط با مهندسی معکوس مثل مبهم سازی , Anti reversing , کدهای چندریختی و ... باهاش مواجه شدید.

توی این پست قراره در مورد junk code ها به صورت خلاصه توضیح بدم تا یه آشنایی کلی باهاش پیدا کنید.

 

Junk code چیست؟

خوب همونطور که از اسمش پیداس, کدهایی هستند که کاری انجام نمیدند و روی عملکرد برنامه هم تاثیری ندارند و فقط فضایی رو بین دستورات اصلی برنامه اشغال می کنند.

 

دلیل استفاده از junk code ها؟

دلیل استفاده از این هم میتونه متفاوت باشه, میشه برای مبهم کردن عملکرد برنامه برای آنالیز کننده, ناشناس کردن یه بدافزار برای آنتی ویروس, کندتر کردن روند مهندسی معکوس و محافظت بیشتر از نرم افزار استفاده کرد.

 

کدهای بلااستفاده می تونند یه بلوک از دستورات باشند یا تک دستورات اسمبلی , در هر دو مورد این کدها کاری انجام نمیدند.

البته این روش هم دارای یه سری نقاط ضعف هستش,بعنوان مثال کدهای بلااستفاده بیشتر روند مهندسی معکوس روی توی آنالیز ایستا سخت می کنند نه آنالیز پویا, این کدها رو میشه با کمی تجربه تشخیص داد یا میشه با نوشتن اسکریپت هایی برای Olly یا IDA این کارو بصورت اتوماتیک انجام داد.

 

یه سری از دستورات اسمبلی که هیچ کاری انجام نمیدند رو در زیر مشاهده میکنید:


• NOP                       ;No Operation

• PUSH AX POP AX            ;push ax onto the stack and then pop it back off

• XCHG BX,BX                ;trade BX for BX (same as NOP literally in 8086)

• MOV AX,AX                 ;move ax register to AX register

• ROL AX,CL ROR AX,CL       ;rotate register left then rotate right.

• INC CX DEC CX             ;increase CX decrease CX


میتونید از ترکیب دستورات بالا استفاده کنید و یه بلوک کد بلااستفاده همراه با یه سری پرش ایجاد کنید, خلاقیت توی junk code ها حرف اول رو میزنه:)

 

نکته: البته یادتون باشه اگه از دستوراتی استفاده می کنید که روی رجیسترها تاثیر میزارند حتما قبلش رجیسترها رو داخل پشته ذخیره کنید (pushad) و بعد از اتمام کار رجیسترها رو به حالت اول برگردونید (popad)

خوب همونطور که میبینید اینم یه نقطه ضعف هستش و jnuk code هارو لو میده:)

 

توی زبان های سطح بالا, ایجاد junk code ها خلاقیت برنامه نویس رو بیشتر میطلبه. میتونید یه کلاس برای اینکار تعریف کنید و هر از چندگاهی اونرو لابه لایه کدهای برنامتون بکار ببرید ...

 

می تونید برای نمونه کد یا دستورات جستجو کنید. 

اینم یه نمونه junk code دیس اسمبل شده توی IDA:


میبینید که با دستور pushad شروع شده

پایین هم انتهای این کد رو مشاهده می کنید که با دستور popad تمام رجیسترها به حالت اول برمیگرده.





  • موافقین ۰ مخالفین ۰
  • ۹۳/۱۱/۱۷
  • ۹۹۴ نمایش

کدهای بلااستفاده

نظرات (۰)

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