ايران ويج

نسخه‌ی کامل: مشگل در static inject
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام .
من یه static inject می خوام انجام بدم.یه سری مشگل خوردم.
تو کد برنامه میام کار های زیر رو انجام می دم.
اول میام یه سکشن کد جدید به فایل مقصد اضافه می کنم.
بعد ep رو روی سکشن جدید تنظیم می کنم.
تابعی که می خوام تو فایل مقصد ازش استفاده کنم (ShellExecute) رو هم تو import table ازافه می کنم.
کدی هم که تزریق می شه این شکلی هست.


کد:
Push 0
Push 0
Push 0
Push Offset exe
Push 0
Push 0
Call ShellExecute
Jmp endst
exe:
        DB 'explorer', 0
یعنی داده هام هم محلی هست نیاز نیست اونارو تو سکشن data ازافه کنم.
کد بالا هگزش تقریبا میشه کد زیر
کد:
szShellcode \
DB 6AH, 00H, 6AH, 00H, 6AH, 00H,
68H, 19H, 10H, 40H, 00H,
6AH, 00H,
6AH, 00H,
0E8H, 6DH, 00H, 00H, 00H,
0EBH, 6AH,
65H, 78H, 70H, 6CH, 6FH, 72H, 65H, 72H, 00H,
;DB 31H, 31H, 31H, 00H
خوب تا اینجا همه چیز حله یعنی ep تغییر می کنه سکشن جدید ازافه شده .
اما وقتی کد بالا رو تو سکشن جدید میریزم دو تا مشگل پیش میاد.
یک آدرس ascii که explorer هست تو فایل مقصد یه چیز دیگست و آدرسی که من ثابت دادم نیست.
دو ascii ها در فایل مقصد دستور شناخته میشن نه داده.
من چه طور آدرس دهی هام رو درست کنم؟
و بعد بهش بفهمونم این asci هست نه دستور؟
(۱۹-بهمن-۱۳۹۱, ۲۰:۳۱:۵۴)mohamadpk نوشته است: [ -> ]دو ascii ها در فایل مقصد دستور شناخته میشن نه داده.

خب باید از روی داده ها jmp کنید!

وقتی دیتا میریزید تو حافظه سیستم نمیدونه که این دیتاست و یا کد؛ و اونو به عنوان مد اجرا میکنه؛ دی نتیجه امکان داره از اون قسمت به بعد تمام مدهای سالمی که گذاشتین هم بک نوع دیگه تفسیر بشن و شما فکر کنید یجای مدتون مشکل داره

------------------
ادیت شد: انگار همینکارو کرده بودی! ندیده بودم Biggrin
آره از روی داده ها جامپ دادم . اما باز داستان همونه.الان مشگل قسمت آدرس دهی رو پیدا کردم.
و آدرس ها رو مشگلش رو پیدا کردم. به جای ثابت دادن تغیر میدم. اما نمی دونم چه طور عدد هگز رو string کنم با wsprintf هر چی بود امتحان کردم اما باز عدد رو که به wsprintf می دم یه چیز دیگه بر می گردونه.

مثلا الان یه عدد دارم به این شکل تو متغیر NewEntryPoint

کد:
0x00008000
بعد این بلا رو سرش میارم
کد:
Mov Ebx, NewEntryPoint
Add Ebx, 50
Invoke wsprintf, Addr tmpstr, TextAddr("%#X"), Ebx
Invoke WriteFile, _hFile, Addr tmpstr, 8, Addr bwr, NULL
نتیجه که تو فایل مقصد نوشته میشه
اینه

کد:
0x30385830
حاج مهدی یا جوکر یکی به داده ما برسه

______________________________
کشف شد .حل شد.ممنونClap
مهندس شما کدتونو رو seven تست میکنین؟
من با explorer سون این مشکل رو داشتم انگار هر سری اجرا میشه ادرس لود بیس رو عوض میکنه
سلام نه تو ویندوز 8 تست کردم.
برای بیس هم کاری نداشتم من چون نمی خوام تو explorer اینجکت کنم.می خوام به به فایل دیگه اینجکت کنم که explorer رو باز کنه ..بعدم چند تا کار دیگه بکنه. که الان درست شد.


_____________
فقط چون تو این تست مهم نبود بقیه برنامه اجرا شه دیگه به ep اصلی نپریدم
سلام
من زياد يا دقت دستورات رو تريس نكردم چون دقيقا نفهميدم منظورتون چيه
ولي در كل براي اينجكت سالم
1- اولين خط اجرايي برنامه اينجكت شده
pushadو سپس pushaf است و در انتها قبل از جامپ بايد با popaf و سپس popad همه چيز رو به حالت قبل در اورد يعني
کد:
pushad
pushaf
.
.
.
.
.
popaf
popad
نميدونم مشكلتون حل شده يا نه
در ضمن سكشن اضافه شده بايد توانايي خواندن و نوشتن و اجرا رو داشته باشد يعني فلگ سكشن بايد هر سه مورد اجرا - نوشتن و خواندن تيك داشته باشد
يك نكته ديگه براي اينپورت توابع بهتر با استفاده از loadlibarya و... استفاده شود ( نميدونم ديكتشو درست نوشتم يا نه ) يعني در حال اجرا تابع مورد نظر از dll تون رو توي حافظه لود كنيد
پ.ن: برنامه اتچ شده در كامپيوتر من اجرا نشد خطا داد

اميدوارم كمك كنه
آره مشگل هل شد.
تو ویندوز 8 و ویندو xp تست کردم.بازم اگر بگی ویندوزت چیه و 32 یا 64 هست ممنون میشم.

در مورد push و pop هم فکر نمی کنم وقتی ep رو گذاشتم رو سکشن جدید نیاز باشه. چون قبلش تو برنامه اتفاقی نیوفتاده که ذخیره و باز یافت بشه.بازم اگه لازمه بگید میزارم.
نقل قول: در ضمن سكشن اضافه شده بايد توانايي خواندن و نوشتن و اجرا رو داشته باشد يعني فلگ سكشن بايد هر سه مورد اجرا - نوشتن و خواندن تيك داشته باشد
خصوصیات هم 60000020H رو گذاشتم.
بازم ممنون.