PDA

View Full Version : سوال: تبدیل فایل اجرایی به فایل متنی ساده؟!



IranVB
چهارشنبه 02 آذر 1390, 22:15 عصر
با سلام خدمت همه دوستان برنامه نویس

میخواستم سوال کنم که آیا میتوان یک فایل اجرایی را به فایل متنی تبدیل سپس دوباره به شکل اولش یعنی همان فایل اجرایی تبدیل کنیم؟!!!!!

پیشاپیش متشکرم

_behnam_
چهارشنبه 02 آذر 1390, 22:27 عصر
اگه توی محتوای آن تغییری ایجاد نشه مشکلی پیش نمیاد.

محسن واژدی
چهارشنبه 02 آذر 1390, 23:09 عصر
سلام
همانطور که آقای _behnam_ هم گفتند اگر در محتویات فایل تغییری ایجاد نشود مشکلی پیش نمی آید
برای باز کردن فایل بصورت متنی میتوانید از Open ... For Input As #1 استفاده کنید

موفق باشید

IranVB
چهارشنبه 02 آذر 1390, 23:17 عصر
ممنون، اما منظور من چیز دیگری بود، یعنی آیا میشود یک فایل اجرایی را به یک فایل متنی تبدیل کرد بگونه ای که جتی اگر آنرا دستی هم ویرایش کنیم و حتی اگر مثلا نصفی از آنرا cut و سپس دوباره در همان جای اصلی بچسبانیم (یعنی ساختار از باینری خارج شده باشد) مشکلی در فایل اجرایی ایجاد نشود
امیدوارم واضح توضیح داده باشم
خیلی ممنون

Mr'Jamshidy
پنج شنبه 03 آذر 1390, 00:18 صبح
نه این امکان نداره مگر این که در همون حالت بایناری کار کنی

ببین دوست من این توضیح رو قبلا هم به یکی دادم به شما هم میگم
----
بایت ها از 8 بیت(مبنای 2) تشکیل شده که هر بایت از 0 تا 255 رو میتونه در خودش نگهداری کنه

هر عدد هم مشخصه یک کاراکتر هست

اما این وسط یک مشکلی وجود داره

Microsoft برای برخی عدد ها کاراکتری مشخص نکرده

زمانی که شما یک فایل رو در TextBox لود میکنی تکست باکس میاد و اون عدد هایی که کاراکتر نداره رو به ؟ تبدیل میکنه

وقتی شما اطلاعات رو از TextBox میگیری و توی فایل ذخیره میکنی دیگه اون بایت ها به حالت اول بر نمیگردن و به همون صورت علامت سوال ذخیره میشن

بعد از ذخیره چون قسمت حجیمی از اطلاعات شما آسیب جدی دیده دیگه اون فایل قابلیت اجرا نداره
------
راه حل

شما باید یک Hex Editor طراحی کنی تا برای تغییر دستی به مشکلی بر نخوری

امیدوارم تو توضیحات بالا نکته گنگی وجود نداشته باشه

IranVB
پنج شنبه 03 آذر 1390, 00:37 صبح
بایت ها از 8 بیت(مبنای 2) تشکیل شده... خیلی ممنون از توضیحات جامعتون، فقط این مورد را زیاد متوجه نشدم،

محسن واژدی
پنج شنبه 03 آذر 1390, 00:56 صبح
تنها راهی که میتوانید بدون هیچ دغدغه ای فایل باینری خود را (که در اینجا exe است) در قالب یک فایل متنی بریزید این است که کدهای برنامه به هگزاد تبدیل کنید
کد زیر را بررسی کنید:

Private Sub Command1_Click()
Dim bChr As Byte, sChr$
Open "c:\test.exe" For Binary As #1
Open "c:\res.txt" For Output As #2

Do
Get #1, , bChr
sChr$ = Hex(bChr)
If Len(sChr$) = 1 Then
sChr$ = "0" & sChr$
End If
Print #2, sChr$;
Loop While Not EOF(1)
Beep
Close 1, 2
Shell "notepad c:\res.txt", vbMaximizedFocus
End Sub


اما اگر بخواهید کاراکترها را بصورت واقعی مشاهده کنید به عنوان مثال header فایل اجرایی را بصورت MZ... مشاهده کنید همانطور که آقای جمشیدی هم گفتند از انجایی که برای برخی از اعداد کاراکتری تعریف نشده است بایستی از نشانه هایی جایگزین این اعداد استفاده کنید (شبیه notepad++) و با دستورالعمل هایی که میتوانند پیچیدگی برنامه را هم بیشتر کنند در زمان های بعد این نشانه ها را بازخوانی کنید

هرجای کد ابهامی وجود داشت بفرمائید

موفق باشید