PDA

View Full Version : تغییر یک بایت از فایل exe در حال اجرا



mah.yar
شنبه 15 خرداد 1389, 09:51 صبح
با سلام
آیا میشه برنامه ای نوشت که وقتی اجرا شد یک یا چند بایت از فایل خودش رو تغییر بده.
فرض کنیم برنامه test.exe داریم. با دستور زیر میتونیم کل بایت های این فایل رو بگیریم:

byte[] stream = System.IO.File.ReadAllBytes("test.exe");
بعدش بیایم یکی از بایتهاشو تغییر بدیم.
ولی بعدش که میخوایم با دستور زیر روی فایل رایت کنیم، مثلا نمیشه.چون برنامه در حال اجراست.

System.IO.File.WriteAllBytes("test.exe", stream);

در کل میخوام یه بایت از برنامه رو چک کنم اگر x بود یه کاری کنه اگر y بود یه کار دیگه.و خودم بتونم طبق شرایط هر بار که اجرا میشه این x یا y بودنش رو تغییر بدم.

نظر شما چیه. راه منطقیش چیه؟

hamedsabzian
شنبه 15 خرداد 1389, 09:57 صبح
شما به انتهابی فایل exe هر چی بخوای میتونی اضافه کنی! ولی این اضافه کردن به هر حال باید توسط یه برنامه ی دیگه باشه!

cardano7
شنبه 15 خرداد 1389, 11:55 صبح
آخه برادر من این چه کاریه؟
به فرض هم که آنتی ویروس ها برنامه ی شما رو با یک ویروس اشتباه نگیرند، این همه ابزار هست برای این کار. شما می تونید از Settings.settings موجود در برنامه ی خودتون استفاده کنید. قابلیت save کردن داده رو هم داره.
اگه هدفتون اینه که برنامه تشخیص بده که آیا این برنامه در حال اجرا هست یا نه، این روش اشتباهی هست. چون ممکنه به هر دلیلی برنامه ناخواسته Terminate بشه و این جوری تا ابد برنامه در حال اجرا شناخته میشه.

میشه هدفتون از این کار را توضیح بدید. شاید هم حق با شما باشه!

mah.yar
شنبه 15 خرداد 1389, 12:25 عصر
ضمن تشکر فراوان؛


میشه هدفتون از این کار را توضیح بدید. شاید هم حق با شما باشه!

واقعیتش،یکی از دوستان تعریف میکرد که یه برنامه ای هست که برای رشته سخت افزاره. این برنامه رو فقط یک بار میتونیم رو سیستم نصب کنیم.یعنی اگه این برنامه رو نصب کنیم،بعد حتی ویندوز رو هم دوباره نصب کنی یا حتی این فایل رو داخل فلش بزاری ببری رو هر سیستم دیگری، نصب نمیشه.
مجبوری دوباره از اینترنت دانلود کنی(یا اینکه قبل از نصب یه کپی ازش بگیری).
به همین خاطر فکرم درگیر شد. و تنها راهی که به ذهنم رسید دستکاری خود فایل اجرایی بود!

حرف جناب cardano7 کاملا درسته ولی اگر توجه کرده باشید وقتی از settings استفاده میکنیم،به فرض مقدار پیش فرض 1 در settings ذخیره شده باشه و ما از طریق برنامه مقدار 2 رو توش ذخیره کنیم،ظاهرا برنامه مقدار جدید(در اینجا 2) رو یه جای دیگه تو ویندوز ذخیره میکنه نه خود فایل؛ به همین خاطر اگه فایل رو ببریم یه سیستم دیگه و اجراش کنیم باز همون مقدار پیش فرض 1 رو داره نه 2.
امیدوارم منظورمو رسونده باشم.


شما به انتهابی فایل exe هر چی بخوای میتونی اضافه کنی! ولی این اضافه کردن به هر حال باید توسط یه برنامه ی دیگه باشه!
ای کاش خود فایل اجرایی میتونست خودشو تغییر بده مثل آدمیزاد. راهی نیست؟

DEVIL_BOY
شنبه 15 خرداد 1389, 12:36 عصر
ببخشید انجا یک سوال پیش میاد:خجالت:
من نمی دونم اون کسی که بخواد برنامه رو ببره Setup میبره نه فایل exe رو هااااااااا من که نوفهمم

DEVIL_BOY
شنبه 15 خرداد 1389, 12:38 عصر
راستی یادم رفت اگه فایل روی CD باشه که دیگه اصلا قابل تغییر نیست پس باید Setup باشه:قهقهه:

mah.yar
شنبه 15 خرداد 1389, 17:34 عصر
راستی یادم رفت اگه فایل روی CD باشه که دیگه اصلا قابل تغییر نیست پس باید Setup باشه
آره. این دوستمون میگفت Setup هست.
بالاخره این فایل Setup یه فایل اجرایی هست دیگه.
به نظر شما این setup چیکار میکنه که دیگه نصب نمیشه.

mah.yar
شنبه 15 خرداد 1389, 22:18 عصر
اونوقت اگه فایل setup به یک سیستم دیگه منتقل بشه باز نصب میشه.
اون setup فقط یک بار نصب میشد. درواقع یک بار مصرفه.

cardano7
یک شنبه 16 خرداد 1389, 00:18 صبح
اگه بشه در Description فایل تغییر ایجاد کرد، آیا مشکل شما حل میشه؟

mah.yar
یک شنبه 16 خرداد 1389, 08:15 صبح
اگه بشه در Description فایل تغییر ایجاد کرد، آیا مشکل شما حل میشه؟
میشه؟ چه جوری؟

cardano7
یک شنبه 16 خرداد 1389, 12:38 عصر
میشه؟ چه جوری؟

زیاد مطمئن نیستم. اما این روش (http://msdn.microsoft.com/en-us/library/system.diagnostics.fileversioninfo.filedescription .aspx) را امتحان کنید.

mah.yar
یک شنبه 16 خرداد 1389, 21:32 عصر
امتحان کردم، قابلیت get داره. set نداره.

cardano7
دوشنبه 17 خرداد 1389, 09:17 صبح
امتحان کردم، قابلیت get داره. set نداره.

:متفکر: راست میگی
آخرین راهی که به نظرم میرسه اینه که یک کد دیگه رو بسازی که وقتی برنامه ات کارش تموم شد اون کد بیاد و اون بایت رو تغییر بده یا اصلا خود برنامه را پاک کنه.

Hamishebahar
دوشنبه 14 تیر 1389, 21:02 عصر
سلام دوست عزیز.
شما به یک روش میتونی این کارو انجام بدی.
یک exe میسازی که کارش تغییر در فایل Exe باشه و اونو در resource برنامه ذخیره میکنی.
حالا هر وقت خواستی در یک بایت برنامه تغییر ایجاد کنی.اونو از داخل Resource استخراج و اجرا و بعد برنامه خودتو میبندی.حالا فایل exe بلافاصله تغییرات رو در فایل ایجاد میکنه و بعد هم خودش بسته میشه.
موفق باشید.

iman_me
دوشنبه 14 تیر 1389, 23:54 عصر
سلام دوست عزیز.
شما به یک روش میتونی این کارو انجام بدی.
یک exe میسازی که کارش تغییر در فایل Exe باشه و اونو در resource برنامه ذخیره میکنی.
حالا هر وقت خواستی در یک بایت برنامه تغییر ایجاد کنی.اونو از داخل Resource استخراج و اجرا و بعد برنامه خودتو میبندی.حالا فایل exe بلافاصله تغییرات رو در فایل ایجاد میکنه و بعد هم خودش بسته میشه.
موفق باشید.
ببخشید ولی این تاپیک قدیمی و همونطور که قبلا گفتم اگه برنامه روی سی دی باشه نمیشه این کار رو کرد ولی اگه فقط روی فلش جابجا هزار و یک راه داره :کف:

mah.yar
سه شنبه 15 تیر 1389, 12:50 عصر
همونطور که قبلا گفتم اگه برنامه روی سی دی باشه نمیشه این کار رو کرد
این مشکل رو میشه با یه ترفند حل کرد.از آنجاییکه نمیشه در داخل CD با نرم افزار فایل یا فولدر ایجاد کرد، پس وقتی برنامه اجرا شد، میایم یه فایلی ایجاد میکنیم.اگر قابیلیت write داشتیم که فایل ایجاد میشه و مشکلی نیست.در غیر این صورت با یک پیام مناسب برنامه خاتمه پیدا میکنه.

Resource ی که hamedsabzian گفتند سرچ کردم.مطالب جالبی دیدم.

iman_me
سه شنبه 15 تیر 1389, 13:13 عصر
این مشکل رو میشه با یه ترفند حل کرد.از آنجاییکه نمیشه در داخل CD با نرم افزار فایل یا فولدر ایجاد کرد، پس وقتی برنامه اجرا شد، میایم یه فایلی ایجاد میکنیم.اگر قابیلیت write داشتیم که فایل ایجاد میشه و مشکلی نیست.در غیر این صورت با یک پیام مناسب برنامه خاتمه پیدا میکنه.

Resource ی که hamedsabzian گفتند سرچ کردم.مطالب جالبی دیدم.
خوب اینم یه راه حله ولی بنظر خودتون این واسه یه برنامه درست درمون خجالت اور نیست؟؟؟؟:کف:

FastCode
سه شنبه 15 تیر 1389, 16:13 عصر
راه دیگه اینه که روی سی دی رایت کنید.
برای اطلاعات بیشتر به CodeProject برید و یه سرچ بزنید خیلی چیزها گیرتون میاد.