injection
مقدمه
شاید همیشه برای همه(کسانی که تو کار نفوظ هستن) این سوال هست که چرا وقتی کدی رو به یک فایل اجرایی دیگه اضافه میکنیم با اجرا کردن فایل اول فایل دوم هیچ وقت اجرا نمیشه این کار معمولا به دو روش صورت میگیره استفاده از stub ها و استفاده از injection
Static Injection
تزریق(injection) متدی میباشد که نفوظ گر با دستکاری برنامه ها یا پروسس ها باعث اجرای برنامهای دیگرمی شود.2 نوع تزریق وجود دارد تزریق ایستا(static injection)و تزریق پویا(dynamic injection) .تزریق استا قبل از اجرای برنامه صورت میگیرد وتزریق پویا بعد ازبارگزاری پروسس در حافظه صورت میگیرد
static injection
در تزریق ایستا برنامه مخرب که حجم فوق العاده کوچکی داره روی یکی از قسمتهای غیر ضروری فایل باینری بازنویسی میشه و EntryPoint برنامه با یک Jmp ساده دستکاری میشه ، تا ضمن اجرای برنامه ویروس هم اجرا بشه .
حال ما میخواهیم تزریق ایستا را مورد برسی قرار دهیم برای این کار ما بازی ویندوزMineswipperرا تغییر داده تا در هنگام اجرا به ما پیغام i am trojan را نشان دهد ابتدا به C:\WINDOWS\system32 رفته و یک کپی از winmine.exe را در desktopیامحل مورد نظر قرار میدهیم ما برای تزریق از برنامهOllyDbg که یک اسمبلر32بتی ودیباگر برای محصولات مایکروسافت میباشد استفاده میکنیم.که از ویژگیهای ان تحلیل کد باینری هنگامی که به سورس برنامه دسترسی نداریم میباشد که شما میتوانید انرا از ادرس زیردربافت کنید
http://rapidshare.com/files/97676241/odbgSND.zip
http://home.t-online.de/home/ollydbg
ابتدا برنامه ollydbg را نصب کنیدروی دکمه open کلیک کرده و برنامه winmine.exe رابازکنید چیزی که داخل برنامه میبینید کدهای اسمبلی مربوط به بازی مین روب میباشد فضای برنامه شامل اطلاعات مهم و همچنین اطلاعات غیر ضروری میباشد که با noop یعنی خالی پر شده است این بخشها مکان خوبی برای قرار دادن کدهای مورد نظر بدون خراب شدن فایل میباشد
حالا در ollydbg پنجره سمت راست زیر منو انرا scroll down کنید تا به مکانی برسید که تعداد زیادی noop در کنار هم وجود دارد اینجا مکانی هست که فضای کافی برای قرار دادن کدهایتان وجود دارد.به این مکان غار(cave )نامیده میشود
حال ما کد خود را در این محل قرار میدهیم. تابعی که میخواهیم از ان استفاده کنیم msgboxA میباشد که به صورت
msgboxA(0,"this is static injection","this is staric injection",0)
میباشد کهکد ان به اسمبلی بصورت
Push 0
Push “i am trojan”
Push “i am trojan”
Push 0
Call User32.MessageBoxA
میشود در کد ماشین و سطح پایین ما باید برای رشته this is static injection یک فضا اختصاص دهیم وسپس ادرس محل ارا با تابع
Push <Address> به تابع ارسال کنیم
حال شروع به اضافه کردن کد به محل مورد نظر میکنیم
ابتدا دستهای از noop های موجود در غار را انتخاب میکنیم(حدود 20 تا)سپس روی این محدوده راست کلیک کرده selectBinary/Edit را انخاب میکنیم
حالا در فیلد ascii ظاهر شده مینویسیم i am Trojan
حالا متن شما به مکان مورد نظر اضافه شده است حالا ollydbg نیاز به تحلیل کد وارده دارد برای این کار دکمهctrl+A را فشار دهید بعد از این کار شما متن this is static injection را در ان ادرس خواهید دید حالا در زیر مکانی که رشته خود را اضافه کردید روی DB00 دابل کلیک کنید و در کاردی کا ظاهر میشود بنویسید
push0
ودر خط زیری بنویسید push و ادرس رشته ای که درپنجره ollydbg در ستون سمت چپ قرار دارد مینویسیم
push <sting address>
در خط بعد هم دوباره
push <sting address>
را تایپ میکنیم در خط بعدی دوباره مینویسیم
push 0
و در اخرین خط تابع MsgBoxA را فراخوانی میکنیم
call user32.MessageBoxA
حالا ادرس اولین push 0 را در جایی یاداشت میکنیم
حالا * را فشار دهید تا به نقطه اغاز برنامه برسید حالا 6 سطر ریزرین را انتخاب کرده با ctrl+c کپی کرده و در جایی دیگر مانند notepad قرار دهید تا هنگامی که یک سری دستورها را تغییردادیم انها را سر جای خود قرار دهیم حالا روی خط اول دابل کیک کرده و می نویسیم
jmp<address code>
این address code ادرس مکانی هست که کد ما از انجا شروع میشود توجه داشته باشید که بیشتر از 1 خط تغییر میکند خطهای تغییر یافته بصورت قرمز نمایش داده میشود . خطهایی که تغییر کرده اند باید اضافه شوند با استفاده ازکپی که در ابتدا از انها در مکانی دیگر قرار دادیم با ایجاد این پرش روند اجرا به کد ما منتقل میشود و بعد از ان باید روند اجرا را دوباره به برنامه اصلی بازگردانیم قبل از این کار باید کدهایی را که در ایجاد پرش تغییر کردند را در زیر کد خود بازنویسی کنیم حالا به مکانی که پرش خود را ایجاد کردید بروید و روی ان راست کلیک کرده و follow را انتخاب کنید اگر کارها را درست انجام داده باشید با این کار شما به نقطه شروع کد خود خواهید رفت(یعنی به اولین push 0) حالا کدهای تغییر یافته را در زیر کد خودمان یعنی call msgboxA اضافه میکنیم توجه هنگامی که میخواهید کد های تغییر یافته را اضافه کنید اگر کدی به شکل'PUSH winmine.1234567' بود انرا به صورت push 1234567 بنویسید حالا نوبت به نوشتن سطر اخر و بازگردانی اجرا به برنامه اصلی میباشد حالا در انتها پرش اخر را اضافه میکنیم
Jump<address>
که address مکان اولین خط کد بعد از پرشی است که از اول برنامه به کدمان انجام دادیم میباشد حالا راست کلیک کرده Copy to executable / All Modifications/copyall را انتخاب میکنیم حالا پنجره جدید ظاهر میشود روی این راست کلیک کرده و save to file راانتخاب میکنیم و برنامه را save میکنیم .حالا به مکانی که فایل را ذخیره کردیم رفته و انرا اجرا میکنیم خواهیم دید که یک MsgBoxبا متن I am Trojan ظاهر خواهد شد
موفق باشید
این هم خود مقاله با فورمت pdf
http://rapidshare.com/files/106617598/Sa...n.rar.html
نویسنده Lord_Viper