PDA

View Full Version : تمام jumpهای exe



zoncpp
پنج شنبه 21 تیر 1386, 08:18 صبح
سلام
یک روشی یا کدی می خوام که بتونم آدرس تمام دستورهایی که در exe به آنها jump می شود بدست بیارم
OllyDbg وقتی یک فایل exe رو باز می کنه، تشخیص می ده به چه آدرسهایی jmp صورت گرفته و آنها رو با یک فلش نمایش می ده. حالا این کار چطور انجام می شه و چطور تشخیص داده می شه؟ من می خوام برنامه ای بنویسم که بتونم این آدرسها رو در هر exe تشخیص بدم
لطفا راهنماییم کنید، مرسی

Inprise
پنج شنبه 21 تیر 1386, 13:48 عصر
با Disassembler انواع Jump ( و Call ها ) شناسائی میشن و بعد بسته به اندازهء Instruction و 32 یا 64 بیتی بودن سیستم آدرسی که به اون ارجاع شده پیدا میشه . میتونی با استفاده از موتور Disassembler خود Olly‌ که در دسترس هست کد مورد نظرتو بنویسی یا میتونی برای Olly اسکریپت بنویسی . همینطور میتونی از IDA استفاهه کنی و براش یه پلاگین بنویسی که این یکی کمی سخت تر و روش بهتری هست . هر کدوم رو که انتخاب کنی یه دو جین نمونه و راهنما هست که میتونی باهاشون کار رو شروع کنی . البته اگر این مسئلهء من بود صرفا از pefile (http://dkbza.org/pefile.html) استفاده میکردم .

zoncpp
پنج شنبه 04 مرداد 1386, 08:22 صبح
مرسی، ولی این pefile چی هست؟
کد من تو محیط VC هست، راهنما یا لینک دیگه ای سراغ نداری؟ ممنون میشم.

Inprise
پنج شنبه 04 مرداد 1386, 09:50 صبح
از همان پیشنهاد اولم استفاده کن

illegalyasync
پنج شنبه 04 مرداد 1386, 12:53 عصر
PVDasm هم خیلی خوبه میتونی از Engine اش استفاده کنی . Open Source هست . سایتشو ببین http://pvdasm.reverse-engineering.net/index.php?Section=3
میتونی از DLL اش استفاده کنی و فایلهای باینریتو بهش بدی و تو خروجیش یه grep‌ بزنی و jmp ها رو بگیری

saeedIRHA
پنج شنبه 04 مرداد 1386, 19:52 عصر
این یک برنامه برای پیدا کردن (jump(call , فقط باید registery که میخوای
ازش jump هارو پیدا کنی بهش بدی!
هم در فایل DLL عمل میکه هم در فایل exe!
سورس برنامه با C هست،فایل اجریش هم برات گزشتم!

Inprise
پنج شنبه 04 مرداد 1386, 20:50 عصر
پیش فرض غلط کدی که گذاشتی و روشهای مشابه اینه که فرض میکنن تمام یک فایل باینری از Code تشکیل شده در حالیکه در عمل اینطور نیست . هر قطعه باینری ای که معادل آپکد جامپ باشه لزوما یک جامپ نیست . میتونه دیتا باشه یا میتونه هر چیزی باشه خارج از کد سکشن که در نتیجه به درد مقاصد مورد نظر ( که برای یک جامپ قابل تصور هستن ) نمیخوره !

saeedIRHA
دوشنبه 08 مرداد 1386, 05:31 صبح
یک سؤال برام پیش امد، اگر ما offset شروع تا پایان Code section رو
پیدا کنیم، این روش میتونه موثر باشه ؟

Inprise
سه شنبه 09 مرداد 1386, 07:32 صبح
اگر فایل Packed نباشه و فقط یک Code Section داشته باشه آره .

saeedIRHA
سه شنبه 09 مرداد 1386, 11:00 صبح
یک فایل PE مگر میتونه بیشتر از یک Code section داشته باشه ؟

Inprise
سه شنبه 09 مرداد 1386, 11:22 صبح
لینکرهای مایکروسافت و بورلند چنین PE ای تولید نمیکنن اما میتونی خودت بسازی . illegalyasync از اینکارها کرده فکر کنم اگر دوست داشته باشه خوبه که بیاد توضیح بده .

saeedIRHA
سه شنبه 09 مرداد 1386, 14:44 عصر
من هم واقعاً ممنون میشام اگر ایشون یا خوده شما در مورد این مسئله صحبت کنید!
باز هم تشکر

mountainking
سه شنبه 09 مرداد 1386, 14:50 عصر
یک فایل PE مگر میتونه بیشتر از یک Code section داشته باشه ؟
از fasm استفاده کن. برای این کار عالیه. هر جور که دلت بخواد میتونی سکشن هارو ایجاد کنی. هر نوع سکشنی هر کجای برنامه که بخوای. عالیه.

saeedIRHA
سه شنبه 09 مرداد 1386, 14:53 عصر
ممنون ، ولی من نمی خوام Section خاصی ایجاد کنم،فقط میخوام بدونم چطوری ممکنه
در یک فایل PE بیشتر از یک Code section داشته باشیم!؟؟؟؟

mountainking
سه شنبه 09 مرداد 1386, 14:56 عصر
خوب یه سکشن شروع میکنه بعد یه جامپ میده به یه سکشن دیگه!

mountainking
سه شنبه 09 مرداد 1386, 15:15 عصر
باید دستی EP رو مشخص کنی. توی fasm ابتدای برنامه یه label به عنوان EP معرفی میکنی و میزاریش اونجایی که میخوای برنامه شروع بشه. بعد call ها و jumpهای توی این سکشن دسترسی به بقیهء سکشنها رو مقدور میکنن. برای مثال توی fasm مینویسی:

...
entrypoint start
...
section 'avaly' readbale writeable executable
...
start: ;in entry pointete
...
stdcall yeFunctionAzYeSectionedige ;inam dastresy be ye sectione dige
...
section 'dovomy' readable writebale executable
proc yeFunctionAzYeSectionedige
...
endp

illegalyasync
چهارشنبه 10 مرداد 1386, 12:28 عصر
مجوز هر کدوم از section هاتو میتونی runtime تغییر بدی و از همونجا کد اجرا کنی . خیلی از پکرها یا ویروسها همینکارو میکنن . code section یا در کل هر سکشنی چیز خاصی نیست . وقتی page ها allocate میشن مجوزشون رو از section ای که بهش تعلق دارن به ارث میبرن . تنها معنی سکشن همینه

mountainking
چهارشنبه 10 مرداد 1386, 13:49 عصر
آقای illegalyasync میشه لطف کنید بفرمایید این تغییر رانتایم مجوز سکشنها دقیقا به چه درد میخوره؟:متفکر: البته تو مرحلهء debug میتونه بدرد بخور باشه. ولی وقتی برنامه رو طراحی میکنی معلومه هر سکشن باید چه مجوزی داشته باشه پس اینی که گفتی یعنی چه؟ :گیج: مِدونی، موضوع executable بودن یه سکشن وقتی معنی داره که شما یه چیز executable توش داشته باشی. یعنی کد. و این که توی یه سکشن هنگام اجرا کد خواهد بود یا نه موقع نوشتن برنامه واضحه. تازه فقط readable writeable بودن یک سکشن کافیه تا اگه اون سکشن حاوی کد بود بتونه بعد از تحویل گرفتن یه جامپ به درستی برنامه رو پیش ببره!:چشمک:

illegalyasync
چهارشنبه 10 مرداد 1386, 15:17 عصر
نه . executable بودنش هم لازمه
تو جواب قبلیم گفتم که یه سری از ویروسها و یه سری از پکرها از این روش استفاده میکنن . مثلا کد رو میذارن تو دیتاسکشن و در زمان خاصی دیکریپت و همونجا اجراش میکنن و بعد بلافاصله مجوز execution کلیه page های قبلی رو لغو میکنن . بدون این روش نوشتن کد پلی مورفیک غیر ممکنه . از بین پکرها هم Aspack از همین روش استفاده میکنه . اگر DEP‌رو فعال کنی Aspack کار نمیکنه و دلیلش جلوگیری کردن از اجرای کد از Page هائی هست که هنگام Allocation‌مجوز Execute نداشتن .

mountainking
پنج شنبه 11 مرداد 1386, 17:15 عصر
پس لطف کن با یه هگز ادیتور یه برنامه رو باز کن و خصوصیات executable و code رو از سکشن کد بگیر. اجراش کن. اجرا شد؟ دیدی که اجرا میشه. این برنامه هایی هم که گفتی به یه دلیل دیگه مجوزها رو تغییر میدن که برمیگرده به همون چیزی که گفتم : رفتارهای debug و antidebug گونه!.

Inprise
پنج شنبه 11 مرداد 1386, 19:40 عصر
به نظر میرسه تو مفهوم Page و Section ای که illegal در موردش حرف میزنه را متوجه نشدی .
Page هائی که داخل Code Section "در حافظه" هستند باید مجوز Executable داشته باشن و Loader سیستم عامل بعد از فراخوانی PE خودش کد سکشنها رو پیدا میکنه و Page های اونها رو Executable میکنه . بقیه Page ها هم بصورت پیش فرض مجوز سکشنی که بهش تعلق دارن رو به ارث میبرن مگر اینکه صراحتا" این مجوز تغییر کنه
( Memory BreakPoint ها همینطور کار میکنن . یعنی Page ای که bp روی اون قرار داره مجوز اجرائیش لغو میشه و هنگام رسیدن به اون Page فرآیند execution متوقف میشه و debugger با فهمیدن این مسئله رسیدن به نقطه مورد نظر رو اعلام میکنه - ر-ک همه چیز در مورد bp ها در بخش امنیت نرم افزار )

یک سکشن تا وقتی که با مشخصه text. یا همون CODE متمایز شده باشه بعد از فراخوانی توسط سیستم عامل تمام آفستهاش اجرائی هستن . البته این مسئله خیلی هم بدیهی هست و نیازی به این همه توضیح نبود .

تعیین کردن مجوز سکشن در زمان لینک باعث میشه هنگام ساختن باینری سکشنهای مختلف به شکل مناسب ساخته بشن . اگر یک سکشن به عنوان Data معرفی بشه و Executable نباشه تو نمیتونی ازش کد اجرا کنی مگر اینکه با VirtualProtect و خانواده اش ابتدا مجوز Page ها رو Executable کنی . از اونجائی که هر PE حداقل یک کدسکشن داره که توسط هدر EP اونجا معرفی میشه مجوز Page‌هاش در حافظه همیشه executable است

برای اینکه بهتر اینو متوجه بشی یه کد ساده بنویس که در زمان اجرا بدون تغییر مجوز Page ها بتونی از تو استک کد اجرا کنه ؛ که طبعا چنین چیزی امکان نداره .

illegalyasync
پنج شنبه 11 مرداد 1386, 23:16 عصر
mountainking توضیحاتی که اینپرایز داده رو خوب بخون اما من تو چنین بحثهائی فرض میکنم افراد مطالب اولیه و ابتدائی رو میدونن که الان به نظر میرسه فرض غلطی بوده حالا از اول توضیح میدم


پس لطف کن با یه هگز ادیتور یه برنامه رو باز کن و خصوصیات executable و code رو از سکشن کد بگیر. اجراش کن. اجرا شد؟ دیدی که اجرا میشه. این برنامه هایی هم که گفتی به یه دلیل دیگه مجوزها رو تغییر میدن که برمیگرده به همون چیزی که گفتم : رفتارهای debug و antidebug گونه!.

قبل از اون توضیح باید بدونی که گرفتن خصوصیت؟ executable از کد سکشن اصلا بی معنیه و هیچ مفهومی نداره . اینو از کجات در آوردی ؟ :لبخند:

وقتی یه فایل باینری لینک میشه فایل اجرائی تولید میشه . این فایل اجرائی یه سری سکشن داره که هر کدوم یه سری قابلیت دارن . این قابلیتها تو فرمت فایل اجرائی تعریف شده و سیستم عامل در موردشون اطلاع داره . مثلا در فرمت PE که روی ویندوز فرمت اصلی فایلهای اجرائی هستش Code Section اون بخشی از فایل باینری هست که وقتی به مموری مپ میشه تمام Page های اون بخش از مموری دارای مجوز خوندن و نوشتن و اجرا هستن و Data Section اون بخشی هست که تمام Page هاش امکان خوندن و نوشتن دارن و ....
بنابراین لینکر فقط بر اساس کدی که برنامه نویس نوشته و کانفیگی که به کامپایلر داده فایل باینری حاوی یه سری سکشن تولید میکنه . اگه سکشنی که لینکر باید تولید کنه مجوز Executable داشته باشه یعنی کد سکشن هست و هر چی باینری در اون بخش هست در زمان اجرا در Page های executable قرار میگیرن . بنابر این وقتی یه فایل اجرائی رو اجرا میکنی این اتفاقها میفته :

1- کدهای کد سکشن در Page هائی که مجوز Executable دارن قرار میگیرن
2- کدهای دیتاسکشن و فضائی که برای هیپ و استک در نظر گرفته شده در بخشی قرار میگیرن که Page ها مجوز خوندن و نوشتن دارن فقط
3-و بعد با استفاده از اطلاعات هدر برنامه اجرا میشه

حالا اگه جوابهائی که در صفحه قبل دادم در مورد ویروسهای پلی مورفیک و پکرها و ....کل مطلب روشن میشه

mountainking
شنبه 13 مرداد 1386, 12:51 عصر
میبخشید اگر من با اطلاعات غلط حرف زدم. پس حالا که شما بیشتر میدونید اینو برام توضیح بدید تا بیشتر یاد بگیرم:
توی یه PE32 اگه مقدار مربوط به قسمت characteristics هدر سکشن کد رو به 40000004 تبدیل کنیم چی میشه؟

illegalyasync
شنبه 13 مرداد 1386, 13:32 عصر
وقتی لینکر کد تولید میکنه اگر سکشن مورد نظر Executable معرفی شده باشد , در PE اون سکشن حاوی کد معرفی میشه . اگر مقدار Characteristics رو به مثلا 40000040h تغییر بدی از اون به بعد اون سکشن دیگه کد سکشن نیست , یک دیتا سکشن هست .

وقتی تو جواب قبلیم بهت گفتم که اون جمله ات مفهوم نداره به همین معناست . کد سکشن جائی هست که با Page هاش بصورت executable برخورد میشه . اگر اینطور نباشه دیگه کدسکشن نیست .

لینکر این اطلاعات رو تولید میکنه تا لودر بتونه وقتی قسمتهای مختلف باینری رو میریزه تو حافظه به درستی مجوز پیج رو اختصاص بده .

mountainking
شنبه 13 مرداد 1386, 13:44 عصر
اگر مقدار Characteristics رو به مثلا 40000040h تغییر بدی از اون به بعد اون سکشن دیگه کد سکشن نیست , یک دیتا سکشن هست . .
خوب حالا این دیتا سکشن با کرکتریستیک 40000040h نمیتونه کد اجرا کنه؟

تو inprise میگی :
یک سکشن تا وقتی که با مشخصه text. یا همون CODE متمایز شده باشه بعد از فراخوانی توسط سیستم عامل تمام آفستهاش اجرائی هستن .

اگر منظورت از text. اسم عمومی ای هستش که کامپایلرها اصولا برای کد سکشن انتخاب میکنن باید بگم این فقط اسمه نه چیز دیگه ای! اون charactristics یه سکشن هستش که مشخص میکنه CODE یا چیز دیگه ایه! البته اگه منظورت از charractristics، .text بوده حق با توئه!

یه چیزه دیگه که یادم رفت بگم:
آقای اینپرایز منظورت از :"به نظر میرسه تو مفهوم Page و Section ای که illegal در موردش حرف میزنه را متوجه نشدی ."چیه؟
من کجای حرفام این دوتا رو با هم اشتباه گرفتم؟ خوب این واضحه که اگه خصوصیات سکشنی رو دستکاری کنی پیجهاش اون خصوصیات رو به ارث میبرن! حالا من گفتم خصوصیات کد سکشن رو با هگز ادیتور عوض کن. این کجاش اشتباه گرفتن پیج با سکشنه؟

illegalyasync
شنبه 13 مرداد 1386, 14:59 عصر
خوب حالا این دیتا سکشن با کرکتریستیک 40000040h نمیتونه کد اجرا کنه؟اگر BaseofCode اونجا نباشه نه نمیتونه مگر با تغییر مجور Page ها . اگر BaseofCode اونجا باشه بهر حال لودر اونو کدسکشن فرض میکنه . چون بنارو براین میذاره که حداقل یک EP باید وجود داشته باشه و base میخاد . ( مگر برای DLL که میتونن فقط شامل دیتا هم باشن . مثلا DLL هائی که در واقع resource file هستن . اونا مجبور به داشتن EP نیستن و لازم نیست baseofcode داشته باشن و در این حالت هم اگه کد سکشنی بسازی و بعدا اونو به دیتاسکشن تبدیل کنی هیچ کدی اونجا اجرا نمیشه )

اینم از صفحه نقل قول میکنم شاید دلیل اشتباهتو که این÷رایز گفته متوجه بشی


تازه فقط readable writeable بودن یک سکشن کافیه تا اگه اون سکشن حاوی کد بود بتونه بعد از تحویل گرفتن یه جامپ به درستی برنامه رو پیش ببره

اولا Writable بودنش لازم نیست . فقط اگه کسی بخواد کد self-modifying بنویسه ( مثل ویروسهای ÷لی مورفیک ) به مجوز نوشتن نیاز داره .
دوما وقتی برنامه باینری درست شد دیگه خوندنی یا نوشتی بودن اون سکشن بی معنی هستش ! تو وقتی داری تو مرحله کدنویسی سکشن تعریف میکنی از خوندنی و نوشتنی و اجرائی استفاده میکنی که لینکر بفهمه چه سکشنی با چه مجوزی باید بسازه ! وقتی باینری ساخته شد فقط و فقط سکشنها دارای عنوان هستن که اون عنوان یه سری مشخصه داره . یعنی اگه بگی سکشنی خوندنی هست عبارت بی معنی ای گفتی و ممکنه فرض کنن تو مسئله رو با ÷یج اشتباه گرفتی . کدسکشن وقتی لود میشه همه ÷یجهاش خوندنی و اجرائی هستن و دیتاسکشن وقتی لود میشه همه ÷یج هاش خوندنی و نوشتنی هستن . تازه میشه اینها رو تغییر هم داد .
اگر موقع نوشتن مطلب از عبارتها به دقت استفاده میکنیم سوء تفاهمی ÷یش نمیاد چون هر کسی با ÷یش زمینه ذهنی خودش مطالب دیگرانو میخونه و با تصور خودش اونها تفسیر میکنه ....

mountainking
دوشنبه 15 مرداد 1386, 08:00 صبح
اولا Writable بودنش لازم نیست . فقط اگه کسی بخواد کد self-modifying بنویسه ( مثل ویروسهای ÷لی مورفیک ) به مجوز نوشتن نیاز داره .

یعنی میخوای بگی هیچ data ای در کد سکشن پیدا نمیشه که رانتایم مدیفای بشه؟!

کد زیر رو توی masm32 اسمبل و لینک کن ببین سکشن cseg چه خصوصیاتی داره. برنامه اجرا میشه ولی EP توی cseg نیست!!!

586.
model stdcall, flat


include windows.asm
include kernel32.asm


includelib kernel32.dll


cseg segment 'code' ;cseg
invoke ExitProcess,0
cseg ends


پس یا اشتباه میگی یا من متوجه نشدم!
البته در تمام گفته هام به این نکته حتما توجه کنین که نهایتا خصوصیاتی که میگم به پیج مربوطه میرسه!!!

illegalyasync
دوشنبه 15 مرداد 1386, 09:30 صبح
یعنی میخوای بگی هیچ data ای در کد سکشن پیدا نمیشه که رانتایم مدیفای بشه؟!


این ربطی به بحثمون نداشت ولی جوابت شرط داره .
اگر خودت مجوز Write رو نداده باشی یا گرفته باشی حتی داخل کد سکشن هم نمتونی مقدار یک آفست رو عوض کنی . فقط میتونی بخونی یا اجرا کنی . اگر مجوز رایت داشته باشه میتونی روش بنویسی اما نوشتن روی یه آفست معنیش این نیست که اون دیتا هست
منظور از دیتا متغیرها و ریسورسهای برنامه هست . در حالت عادی متغیرها و ریسورسهای برنامه در دیتاسکشن هستن نه کد سکشن .


کد زیر رو توی masm32 اسمبل و لینک کن ببین سکشن cseg چه خصوصیاتی داره. برنامه اجرا میشه ولی EP توی cseg نیست!!!

همه اون مشخصاتی رو که من گفتم داره و EP هم در تنها کدسکشن برنامه هست . حالت خوبه ؟

mountainking
دوشنبه 15 مرداد 1386, 09:52 صبح
اوه شت! ریدم!!
ببخشید اشتباه کردم. لطفا اینو تو fasm تست کن:

entry start
section 'cseg' readable writabel
proc hello
nop
ret
endp

section 'aseg' readbale writable
:start
stdcall hello
invoke ExitProcess,0

illegalyasync
دوشنبه 15 مرداد 1386, 10:02 صبح
baseofcode ات در aseg هست ( بخاطر entry start ) که تنها کدسکشن برنامه است و همین به عنوان EP در نظر گرفته میشه ( به دو تا جواب قبلم رجوع کن اونجا همینو توضیح دادم )
هنوز این مسئله ساده روشن نشده ؟

اگه جوابهائی که من دادم رو خوب و به دقت خوندی که احتمالا اینطور نیست من فقط یه توضیح دیگه باقی مونده که هنوز ندادم اونم اینه که
اگر قرار بود اجرا شدن کد فقط منوط به مجوز رید باشه و مجوز رایت هم که برای نوشتن هست هدف وجود مجوز Execute فقط عشق و حال تفریح هست ؟ یا هیچ هدفی نبوده و همینطوری از روی بیکاری در نظر گرفتنش ؟

کدی که نوشتی چون کنار section کلمه executable رو ننوشتی فکر میکنی Page های کد سکشن نباید Executable باشن ؟ شاید به همین دلیل اینپرایز نوشته که این دو تا مسئله رو قاطی کردی.....
بازم تکرار میکنم
وقتی داری کد مینویسی سعی میکنی به لینکر بفهمونی کحا کد سکشن هست و کجا دیتا
و وقتی لینکر باینری رو تولید کرد هر جا که کدسکشن باشه همه Page هاش مجوز Executable دارن . خیلی مسئله ساد ایه

mountainking
دوشنبه 15 مرداد 1386, 10:12 صبح
پس لطف کن بگو پیجی که از cseg تهیه میشه چطور قابل اجراس و executable بودن رو از کجاش در میاره؟!

illegalyasync
دوشنبه 15 مرداد 1386, 10:35 صبح
هر جا Proc داشته باشی اونجا به عنوان کد در نظر گرفته میشه ! اینم فکر میکنم واضحه
برای اینکه بتونی تست کنی یه پیشنهاد خیلی ساده بهت میدم
یک شلکد که یه MessageBoz رو نمایش میده رو بردار و در cseg ات بصورت دیتا ( db ) معرفی اش کن و بعد سعی کن اجراش کنی ;)

mountainking
دوشنبه 15 مرداد 1386, 12:27 عصر
آقا این شل کد چی هست؟ یه جور بگو منم بفهمم. MessageBoz چیه؟ اگه توضیح بدی ممنون میشم.

Inprise
دوشنبه 15 مرداد 1386, 13:12 عصر
شلکد اینه : http://en.wikipedia.org/wiki/Shellcode
مسج باکس اینه : http://msdn2.microsoft.com/en-us/library/ms645505.aspx
گوگل هم اینه : http://www.google.com

اگر حوصله نداشتی میتونی از اکسپلویتهائی که تو Metasploit 2.7 هست استفاده کنی . یه سکشن Readable-Writable تعریف کن و شلکد رو بصورت یک آرایه ذخیره کن . بعد از لینک و اجرا این قطعه باینری در دیتاسکشن قرار میگیره و page هاش مجوز اجرا ندارن . بعد jmp کن به اول این آرایه و ببین شلکدت اجرا میشه یا نه . طبیعتا اجرا نمیشه .آدرس اول و آخر آرایه ات بدست بیار . مثلا یه اشاره گر به آرایه ات تعریف کن که باعث میشه از روی هیپ در دسترس باشه . با VirtualProtectEX مجوز Execute رو به Page هائی که محتوی آرایه ات هستن و آدرسشون رو داری اضافه کن . حالا مجددا jmp کن به اول آرایه و ببین شلکدن اجرا میشه یا نه . که طبعا" اجرا میشه مگر اینکه روی کامپیوترت DEP یا Data Execution Protection فعال باشه که باعث میشه از دیتاسکشن Page هائی که Executable شدن نتونن کد اجرا کنن ( قدیم تر ها وقتی یک برنامه اکسپلویت میشد , Payload رو برای اینکه آنتی ویروس بهش گیر نده بصورت رمز شده وارد یک بافر میکرد و بعد اونجا بازش میکردن و اجرا میشد ؛ با استفاده از DEP جلوی این نوع فعالیتهای مخرب و اجرای کد روی دیتاسکشن با تغییر مجوز Page گرفته میشه )

اگر بازم از این نکاتی که من نوشتم چیزی دستگیرت نشد من شخصا بهت توصیه میکنم این مسئله رو بیخیال بشی چون دیگه بیشتر از این ارزش نداره

mountainking
چهارشنبه 17 مرداد 1386, 15:21 عصر
هیچ کدوم رو نفهمیدم. هرچند گوگل رو هم نفهمیدم چیه ولی به نظر آسونتر میرسه. یه مقدار رفرنس معرفی می کنی بخونم؟ البته اگه امکان داره. ممنون میشم.

mountainking
یک شنبه 21 مرداد 1386, 00:18 صبح
سلام اگه امکانش هست بگین چرا این برنامه MessageBox رو نشون میده در حالی که کد مربوط به اون در محلی با تنها مجوز readable هست؟ شاید با توضیح این مثال بفهمم اشتباهم کجاست.:لبخندساده:

Inprise
یک شنبه 21 مرداد 1386, 01:31 صبح
اگه یادت باشه بهت گفتم تو تفاوت مفهوم Section و Page رو دقیقا نمیدونی و از ابتدای این Thread دلیل سوء تفاهمت همینه که illegal هم توضیح داد . اگر یکبار برگردی و از ابتدای این مبحث بدون اینکه دنبال گرفتن نتیجه باشی مطالب رو بخونی شاید مفید باشه .

کدت روی ماشین من اجرا نمیشه چون DEP ام فعاله . مفهومش چیه ؟ یعنی یکی از Page هائی که در Data Section قرار داشته با مجوز Execution در حال اجرای کد هست . ( دسترسی Read یا Write در بخش دیتا کاملا عادیه و DEP جلوش رو نمیگیره . علتش هم ساده است . چون Page مورد نظر مجور execution نداره و همین باعث میشه آپکدی از اون محل اجرا نشه . دسترسی به داده یا خواندن و نوشتن بلامانع هست )

http://i15.tinypic.com/6hgmdjt.jpg

اگر هم در محیط ollydbg کلید M رو فشار بدی یا Alt+m رو بزنی میبینی که Initial Access همه Page های Section دیتای تو RWE است یعنی همگی مجوز خوندن و نوشتن و اجرا دارن . این مسئله ارتباطی به Readable بودن سکشنی که تو در کدت معرفی کردی نداره ! به پست 34 من هم مراجعه کن

illegalyasync
یک شنبه 21 مرداد 1386, 10:24 صبح
هر جا Proc داشته باشی اونجا به عنوان کد در نظر گرفته میشه ! اینم فکر میکنم واضحه

Post no 32