PDA

View Full Version : اجرای یک فایل دیگر



dadvand
سه شنبه 17 مهر 1386, 00:37 صبح
سلام
من زیاد اسمبلی کار نکردم
اگه میشه دوستان یک راهنمایی بکنند
چطوری با کد اسمبلی یک برنام دیگه رو اجرا کنیم یعنی یک فایل exe رو در حافظه لود کنیم و سپس اجراش کنیم

ممنون از دوستان

__H2__
سه شنبه 17 مهر 1386, 15:02 عصر
سلام
اگر منظورتان تحت ویندوز است و باVisual Assembly کار میکنید باید از API مخصوص که نامش WinExec است و در کتابخانه kernel32.dll قرار دارد استفاده کنید.
API مذکورمسیر و یکسری خصوصیت را میگیرد و فایل مورد نظر را اجرا میکند و در اصل وقتی دبل کلیک روی exe ای میکنید خود ویندوز هم همین API را فراخوانی میکند.

dadvand
چهارشنبه 18 مهر 1386, 01:17 صبح
سلام
نه منظور من کد اسمبلی هست حتی بدون استفاده از توابع API در کد اسمبلی
یعنی حتی از call winexec هم استفاده نکنم

mountainking
چهارشنبه 18 مهر 1386, 08:47 صبح
من فکر میکنم تحت یک سیستم عامل باید حد اقل برخی از قوانین اون سیستم عامل رو رعایت کنی تا بتونی یه سری کارها رو انجام بدی. مثلا اگه نخوای از winexec , shellexecute, createprocess, createthread یا shellexecuteEx و . . . برای بارگذاری یه فایل اجرایی استفاده کنی باید از مکانیزم هایی استفاده کنی که بتونی بر مبنای فضای مورد نیاز برنامه ابتدا به اندازهء کافی رم از سیستم بگیری بسیاری از موضوعات رو به سیستم عامل توضیح بدی بسیاری از استانداردها رو هم به برنامهء بارگذاری شده بقبولونی! اینا یعنی دوباره استفاده از توابع سیستم عامل که در این حالت نه تنها از یه تابع که از چندین تابع API باید استفاده کنی. حالا همین مراحل رو میتونی در مورد همین توابع در نظر بگیری. یعنی به جای استفاده از اونها یه جوری اونها رو دور بزنی. باز داستان تکرار میشه تا برسی به پایین ترین سطوح. خوب اینجا یه چند تا سوال مطرح میشه: آیا این سطح در سیستم عامل مورد نظر در اختیار تو قرار میگیره یا نه؟ اگر قرار بگیره، تو توابع بهتری آماده میکنی یا سیستم عامل توابع بهتری رو ارائه کرده؟ و در اینجا مهمترین سوال مطرحه: چه نیازی به این کار داری؟.
البته من در بالا داستان رو کاملا وارونه مطرح کردم اما چون هیچ پیاده سازی درکار نیست و از طرفی خواستم ارزش سوال آخر معلوم باشه اینطور نوشتمش. البته فکر میکنم داستان بسیار قابل بسط باشه. اگر ایرادی در حرفام هست از اساتید میخوام منو راهنمایی کنن!!!

__H2__
چهارشنبه 18 مهر 1386, 09:33 صبح
سلام
کاربر mountainking مسئله را به طور کامل و بسیار شفاف توضیح دادند و کاملاً صحیح است و واقعاً لذت بردم!
همانطور که راه ارتباطی شما با سیستم عامل DOS وقفه هابوده (Int)
راه ارتباطی شما با سیستم عامل ویندوز API ها هستند.

بالاخره اگر API فوق را نخواهید خودتان باید تمام هدرهای PE مربوط به EXE را فرا بگیرید (خواندن از فایل با API) و برایشان کد نویسی کنید ... دستورات ز چه آفستی لود میشود... exe شما از کتابخانه API خاصی استفاده میکند و نیاز به بارگذاری فایل DLL هم وجود دارد .... بلاک ماژول چگونه و چطور لود شوند ...برنام باید به کرنل ویندوز معرفی شود ..
بدون شک و تردید در همین پله اول خواهید ماند، چون اگر به تمام ورژنهای PE تسلط هم داشته باشید ویندوز اجازه نمیدهد برنامه شما در RAM بچرخد و هر کاری که میخواهد انجام دهد!

بعد باید از ویندوز درخواست RAM آزاد کنید، حدس بزنید با چه وسیله ای ؟؟؟؟ با API !
بعد باید اقدام به ساخت ریسمان جدید برای هدایت برنامه کنید، باز حدس بزنید از چه طریق؟؟
و قص علی ...

dadvand
چهارشنبه 18 مهر 1386, 23:28 عصر
سلام
ماشالا اینقدر شفاف توضیح دادید که من بیخیال شدم .
حالا یک سوال دیگه و کوچیکتر خداکنه این یکی لااقل غیر ممکن نباشه
یک تابع API رو هم نمیشه با اسمبلی نوشت
مثل createremotethread
این تابع رو خیلی از نرم افزارها مثلا ویروسها یا آنتی ویروسها hook میکنند و تغییرش میدن .
میشه با کداسمبلی دورشون زد چون اونا API رو hook میکنند

ممنون

illegalyasync
پنج شنبه 19 مهر 1386, 01:16 صبح
کد اسمبلی چوب هری پاتر نیست . اگه اینجور فکر میکنی باید ذهنت رو اصلاح کنی
اسمبلی در محیط Protected mode همون امکاناتی که بقیه زبونها بهت میدن رو میده
چه امکاناتی ؟
استفاده از کردن از API و System Service های سیستم عامل
هیچ امکان و گزینه دیگه ای هم وجود نداره . خوب دقت کن . هیچ ! تنها تفاوت اسمبلی با سی یا هر زبون دیگری در یه محیط Protected mode این هست که جزئیات بیشتری رو باید با اسمبلی خودت مدیریت کنی در حالیکه در زبونهای سطح بالا اینکار رو خود زبون و rtlش انجام میدن . تو برای برنامه نوشتن تحت یه سیستم عامل protected mode مثل ویندوز باید
یا از API استفاده کنی
یا از Native API استفاده کنی
یا درایور بنویسی و از سیستم سرویسها استفاده کنی
و نوشتن اینا با سی یا اسمبلی تفاوتی با هم ندارن در عمل . یعنی نتیجش فرقی نمیکنه و فقط خودتی که به دلائل مختلف میتونی یکی رو انتخاب کنی و براش مزایائی قائل بشی
این از این



من زیاد اسمبلی کار نکردم
اگه میشه دوستان یک راهنمایی بکنند
چطوری با کد اسمبلی یک برنام دیگه رو اجرا کنیم یعنی یک فایل exe رو در حافظه لود کنیم و سپس اجراش کنیم


نه منظور من کد اسمبلی هست حتی بدون استفاده از توابع API در کد اسمبلی
یعنی حتی از call winexec هم استفاده نکنم


نه در ویندوز چنین امکانی وجود داره نه در هیچ سیستم عامل دیگه ای


مثل createremotethread
این تابع رو خیلی از نرم افزارها مثلا ویروسها یا آنتی ویروسها hook میکنند و تغییرش میدن .
میشه با کداسمبلی دورشون زد چون اونا API رو hook میکنند

اگه هوک user mode باشه که خیلی ساده هستش
باید برنامه ای بنویسی که این تابع رو صدا کنه و بعد روی صدا زدن همین تابع bp بذاری و دیباگ کنی تا روتین های trampoline‌رو پیدا کنی و بعدش خودت یه detour hook براش بنویسی که هوک رو overwrite کنه
اگه هوک kernel mode باشه کار سخت تره و باید درایور بنویسی

جدا از این بحثها بهتره بگی دقیقا مشکلت چیه و چیکار میخوای بکنی که بشه یه راهنمائی سرراست کرد

dadvand
پنج شنبه 19 مهر 1386, 19:22 عصر
سلام
مشکل من با آنتی ویروس kaspersky است که اجازه نمیده از این تابع استفاده کنم و پیغام میده که یک پروسه داره inject میشه و اونرو terminate میکنه حتی تابع terminateprocess رو هوک میکنم ولی جواب نمیده و حتی خود تابع createremotethread رو هم هوک میکنم یعنی با پارامترهای null میفرستم و توی هوک درستش میکنم ولی بازم میفهمه .

dadvand
پنج شنبه 19 مهر 1386, 19:31 عصر
اگه جواب من با آخرین پستتون داده میشه لطف کنید اینا یه کم بیشتر توضیح بدین
هوک user mode ?
bp بذاری ؟
روتینهای trampoline
detour hook ?

mountainking
شنبه 28 مهر 1386, 08:46 صبح
استاد illegalyasync منتظر جوابتون برای کاربر dadvand هستم. ممنون میشم توضیح بدین.

Inprise
سه شنبه 01 آبان 1386, 04:23 صبح
اگر دنبال bypass کردن KAV هستی باید روی گوگل بگردی و اگه کسی نقیصه ای پیدا کرده بود تو هم ازش استفاده/سوء استفاده کنی . روش عبور از یک آنتی ویروس یک قابلیت نیست که منتظر باشی در یک فروم در موردش بحث کنن و تو یاد بگیری و ازش استفاده کنی . آنتی ویروس رو طوری مینویسن که تو نتونی اینکار رو بکنی . من قبلا دو تا مشکل مختلف روی KAV پیدا کردم که باهاشون ردش میکردم و هر دو الان رفع شدن ، قطعا خیلیها چیزهای دیگری رو پیدا کردن و در موردش نوشتن . هوک های کسپراسکی Kernel Mode هستن و حتی الان نمیتونی با یک درایور کدش رو overwrite کنی چون دائما CRC چک میکنه و ...الخ . در مورد اون الفاظ و ...اگه کسی خواست میتونه برات توضیح بده اما معمولا بهتر است اگر الفبای چیزی رو نمیدونی ابتدا از گوگل استفاده کنی و وقتی باهاش کمی آشنا شدی مشغول به کار کردن و سوال کردن بشی...