ورود

View Full Version : راهنمایی در خواندن فایل باینری با حفظ ساختار فایل؟



one hacker alone
پنج شنبه 20 تیر 1392, 14:27 عصر
با یاد خدا
سلام
ماه رمضان مبارک باشه انشاالله بار معنوی این ماه تاثیر مفیدی رو زندگیتون داشته باشه
ببینید شما وقتی یه فایل باینری .exe رو میکشید تو برنامه notepad و با پسوند txt ذخیره میکنید بعد که فایل رو باز میکنید و با پسوند ,exe ذخیره میکنید دیگه اونه برنامه exe کار نمیکنه و ساختارش به هم میریزه
حالا اگه همین روند رو تو notepad++ باز کنید تبدیل به فایل متنی کنید و بعد باز پسوندش رو exe کنید فایل کار میکنه و اجرا میشه
حالا میخواستم بدونم من تو vb6 چجوری میتونم فایلی رو بخونم و تو فایل txt ذخیره کنم که بعد ها با تبدیل پسوند ساختارش حفظ بشه
نکته: ما میتونیم فایل ها رو به صورت باینری تو وی بی بخونیم باز به پسوند .exe ذخیره کنیم اما من میخوام محتویات فایل داخل textbox نشون داده بشه و حتی با txt ذخیره بشه و بعدها به صورت exe تغییر نام داده بشه
نکته : مشکل خوندن فایل هست یعنی اگه من بتونم فایل رو به اون حالت که notepad++ میخونه بخونم دیگه مشکلی برای exe کردن نیست

mehran901
جمعه 21 تیر 1392, 12:15 عصر
با یاد خدا
سلام
ماه رمضان مبارک باشه انشاالله بار معنوی این ماه تاثیر مفیدی رو زندگیتون داشته باشه
ببینید شما وقتی یه فایل باینری .exe رو میکشید تو برنامه notepad و با پسوند txt ذخیره میکنید بعد که فایل رو باز میکنید و با پسوند ,exe ذخیره میکنید دیگه اونه برنامه exe کار نمیکنه و ساختارش به هم میریزه
حالا اگه همین روند رو تو notepad++ باز کنید تبدیل به فایل متنی کنید و بعد باز پسوندش رو exe کنید فایل کار میکنه و اجرا میشه
حالا میخواستم بدونم من تو vb6 چجوری میتونم فایلی رو بخونم و تو فایل txt ذخیره کنم که بعد ها با تبدیل پسوند ساختارش حفظ بشه
نکته: ما میتونیم فایل ها رو به صورت باینری تو وی بی بخونیم باز به پسوند .exe ذخیره کنیم اما من میخوام محتویات فایل داخل textbox نشون داده بشه و حتی با txt ذخیره بشه و بعدها به صورت exe تغییر نام داده بشه
نکته : مشکل خوندن فایل هست یعنی اگه من بتونم فایل رو به اون حالت که notepad++ میخونه بخونم دیگه مشکلی برای exe کردن نیست

سلام، شما هم به همچنین ،

مسئله ی ساده ای هست ... واسه تبدیل ی فایل اگزه به تکست و بلعکس میتونین طبق سینتکس زیر عمل کنین در ضمن مشکلی برای برگردوندن از تکست به اگزه نیست

name "c:\a.exe" as "c:\b.txt"

و بلعکس :

Name "c:\b.txt" as "c:\c.exe"

one hacker alone
جمعه 21 تیر 1392, 14:18 عصر
چیزی که شما میگین مال زمانی هست که ما با فایل کاری نداشته باشیم
یعنی شما فایل b.txt رو باز کنید محتوای اون رو کپی کنید تو یه notepad دیگه و با exe ذخیره کنید میبینید که دیگه کار نمیکنه
اما نوت پد ++ جوری اون رو باز میکنه که من اگه محتوا رو تو جای دیگه ذخیره کنم مثلا برای شما ایمیل کنم شما اون رو با پسود exe ذخیره کنید فایل سالم و اجرا میشه
راهکار ارائه بدین

IamOverlord
جمعه 21 تیر 1392, 14:50 عصر
ببینید در حالت عادی اصلا نگران این مسئله نباشید... دلیل این که این اتفاق تو Notepad می افته اینه که مثلا شما فرض کن کاراکتری با کد اسکی x رو نمی تونه نمایش بده، بعد به جاش کاراکتری با کد اسکی y می ذاره یا اصلا حذفش می کنه... بعد که شما Save می کنی با این دستکاری هایی که کرده تا نمایش بده Save می کنه... اما اگه توجه کرده باشید ++Notepad اگه یه کاراکتری رو نتونه نمایش بده به جاش تو یه کادر کوچولو یه توضیح مختصر می ده... مثلا می نویسه STX یا NUL یا...

one hacker alone
شنبه 22 تیر 1392, 01:14 صبح
اره آفرین
یعنی من فک کنم همین کاراکتر های غیر معمول که ++ نشون میده در واقع داره ساختار فایل رو حفظ کنه اما خب بهرحال چیزی که جالبه اینه ++ میتونه اون رو به شکل خودش ذخیره کنه
اما خب نودپد معمولی این کارو نمیکنه
من مشکلم کماکان باقیه
من حتی اگه بتونم مثل++ بخونم و خودم یه برنامه برای رایت کردنش داشته باشم خوبه
یعنی به کاراکترهای عجیب رسید علامتی بزاره بعد یه برنامه دیگه بنویسم برای اینکه به این علامات رسید کاراکتر معادلش رو بزاره و بعد با exe ذخیره کنه

vbhamed
شنبه 22 تیر 1392, 12:53 عصر
سلام

منظور شما از استفاده از نوت پد يا تبديل به فايل متني چيه ؟ چرا مي‌خواين فايل exe به متني تبديل بشه، ضمنا در ++Notepadd هم كار خاصي انجام نميشه و محتواي فايل تغيير نمي‌كنه فقط موقع نمايش دادن به شما اونطوري نمايش مي‌ده
اگر هم مي‌گين تو ++Notepadd فايل رو به صورت txt ذخيره مي‌كنيد و بعد دوباره exe، كاري كه واقعا انجام ميشه دقيقا معادل همون چيزي هست كه mehran901 (http://barnamenevis.org/member.php?269113-mehran901) عزيز در پست 2 گفتن و ++Notepadd با تغيير پسوند موقع ذخيره، تغييري در محتواي واقعي فايل نميده

در هر حال در ويژوال بيسيك هم براي اينكه محتواي فايل خراب نشه بايد فايل به صورت باينري خونده و نوشته بشه كه اگر منظور دقيقتون و هدفتون از اينكار رو بگين بهتر ميشه راهنمايي كرد

one hacker alone
شنبه 22 تیر 1392, 15:37 عصر
ببینید در یک کلام شما یک فایل باینری رو جوری باز کنید و اینجا برای من کپی کنید اگه اکه من اون رو کپی کنم تو notepad و با پسوند exe ذخیره کنم کار کنه
همین

m.4.r.m
شنبه 22 تیر 1392, 16:03 عصر
من قدیما یه کارای می کردم

برای این کار شما از داس کمک بگیر همون Edit مربوط به داس یا از طریق خود داس این شکلی

مثلا فایل شما در درایو C هست

C:\>Type Project.exe
C:\>Copy Project.exe + Fl.txt C:FL1.txt



این کارو انجام بده فایل متنی مربوط به فایل اجرایی رو بدست میاری ببین جواب میده

vbhamed
شنبه 22 تیر 1392, 21:11 عصر
ببینید در یک کلام شما یک فایل باینری رو جوری باز کنید و اینجا برای من کپی کنید اگه اکه من اون رو کپی کنم تو notepad و با پسوند exe ذخیره کنم کار کنه
همین
سلام
مسئله خوندن ما از فايل نيست
مسئله اينه كه Notepad فايل رو خراب مي‌كنه و باينري باز كردن توسط ما ربطي به كار Notepad نداره
شما فكر كن اصلا Notepad وجود نداره، حالا بگو قراره چه كاري انجام بدي ؟

one hacker alone
یک شنبه 23 تیر 1392, 00:41 صبح
خب من میخوام فایل های سیستمم رو از جمله zip,exe ,doc رو با ویبی بخونم بعد از طریق کنترل web browser در قالب یک فرم به php لوکال هاستم ارسال کنم و در mysql ذخیره کنم و هر وقت بهشون احتیاج داشتم اونا رو در قالب فرمت قبلیشون (zip , exe , ....) ذخیره کنم و دوباره استفاده کنم
برا همین من میدیدم notepad ++ فایل رو درست میخونه (همه درست میخونن بحث نمایش هست) و من وقتی محتوای فایلی که تو ++ باز شده رو تو نودپد معمولی کپی و با فرمت مربوطه ذخیره میکردم همه چیز درست بود حالا من وقتی بخوام در قالب یک فرم html اینها رو به localhost ارسال و اونجا با php در mysql ذخیره کنم
در واقع من میخوام فایل هام رو اپلود نکنم میخوام متن ارسال کنم برا همین مجبورم محتوای فایل رو ارسال کنم در نتیجه حس میکنم بشه حداقل مثل ++ فایل رو بخونم و به هر کد اسکی که رسیدم یه علامت بزارم وبعد ها که بخوام متن رو به فایل تبدیل کنم به جای علامت کد اسکی مربوطه رو بزارم
پیشنهاد؟ راه حل؟
موضوع اینه که من نمیخوام چیزی در قالب فایل باشه حتی اگه فایل exe رو بخونم و بریزم تو فایل txt باز به دردم نمیخوره چون تبدیل به فایل شده و من نمیخوام چیزی به اسم فایل باشه میخوام متن باشه

m.4.r.m
یک شنبه 23 تیر 1392, 01:03 صبح
یعنی برای این کار هیچ راه دیگه ای به ذهنت نرسید که بیای این کارو واسه نگهداری اطلاعات انجام بدی ؟ این همه راه واسه نگهداری چرا حالا این ؟

one hacker alone
یک شنبه 23 تیر 1392, 01:30 صبح
ببینید دوست گرامی دوستان گفتن میخوای چکار کنی بگو تا بتونیم بهتر راهنمایی کنیم
برا همین من موضوع رو باز کردم وگرنه من روی نگهداری داده ها از نظر امنیت و ... نظر نخواستم که شما فک کنین من این راه رو به اشتباه انتخاب کردم اگه بحث امنیت بود هزار راه هست این کار قسمتی از یک پروژه ی بزرگ هست که نیازی هم نیست من توضیح بدم فقط میخوام قابلیت ارسال فایل البته نه به صورت فایل بلکه به صورت متن میسر بشه که اگه کسی یکم فکر کنه میفهمه کارهای مفید و بزرگی میشه با این سبک انجام داد
حالا از این موضوعات که بگذریم اصلا شما فک کنید من یک راه خیلی بد رو برای امنیت یا انتقال یا هرچی انتخاب کردم حالا میخوام این موضوع با کمک شما حل بشه

SlowCode
یک شنبه 23 تیر 1392, 02:51 صبح
آقا من نمیدونم این همه بحث واسه چیه!
شما میای فایل رو باز میکنی بعد بایت ها رو که همون کداسکی هستن رو در قالب یه رشته به اون صفحه ات میفرستی!
تا اینجاش مشکلی نیست!
مشکل وقتی به وجود میاد که شما میخوای این متن چند هزار کاراکتری رو به اون صفحه بفرستی!
من ثبلا امتحان کردم ولی موفق نشدم! الان دوباره امتحان میکنم اگه تونستم خبر میدم.

اگه کسی یکم فکر کنه میفهمه کارهای مفید و بزرگی میشه با این سبک انجام داد
:لبخند:بله کارهای خیلی بزرگی میشه انجام داد. تقریبا همشون هم واسه مباحث منفی هست:شیطان:
فقط اینو بگم شما میتونی فایل رو از طریق ایمیل هم بفرستی که دردسرش به مراتب کمتره یعنی درواقع دردسری نداره!
ولی خب اون کارایی رو که میتونی تو روش قبلی انجام بدی با این نمیتونی و دستت نسبتا بسته است.

vbhamed
یک شنبه 23 تیر 1392, 10:54 صبح
سلام
اين يك نمونه
فايل 1.exe رو در فايل 2.txt ذخيره مي‌كنه و شما مي‌تونيد محتويات 2.txt رو در ديتابيس بنويسيد، بعد محتويات 2.txt رو بهش بدين تا 2.exe رو بهتون بده
البته اسامي قابل تغيير هستن، ضمنا چون به صورت كد هگز ذخيره شده، حجم فايلتون دو برابر ميشه
Private Function Encode(ByVal fname As String, fEncode As String)

Open fname For Binary As #1
Open fEncode For Output As #2

Dim x() As Byte, s As String, i&

ReDim x(LOF(1))
Dim y

Get #1, , x

For i = 0 To UBound(x)
Print #2, IIf(Len(Hex$(x(i))) < 2, "0" & Hex$(x(i)), Hex$(x(i)));
Next

Close #1, #2

End Function

Private Sub Decode(fEncode As String, ByVal fname As String)

Open fEncode For Input As #1
Open fname For Binary As #2

Dim i&, x As Byte, l&, strEncode

l = LOF(1)
strEncode = Input(l, #1)
l = Len(strEncode) - 2

For i = 1 To l Step 2
x = CByte("&h" & Mid$(strEncode, i, 2))
Put #2, , x
Next

Close #1, #2

End Sub

Private Sub Form_Load()

Dim s$

s = Encode("c:\1.exe", "c:\2.txt")

Decode "c:\2.txt", "c:\2.exe"

End Sub

one hacker alone
دوشنبه 24 تیر 1392, 00:30 صبح
سلام ممنون کارمیکنه
میشه یه توضیح در مورد دستورات بدین
کلیات کار که مشخص هست فقط تو تابع اول دو خط زیر برام مبهم هست


ReDim x(LOF(1))
Print #2, IIf(Len(Hex$(x(i))) < 2, "0" & Hex$(x(i)), Hex$(x(i)));

در تابع دوم هم این:


x = CByte("&h" & Mid$(strEncode, i, 2))

vbhamed
دوشنبه 24 تیر 1392, 08:47 صبح
با دستور Dim x() As Byte يك آرايه بدون بعد از نوع بايت تعريف كرديم كه با اين دستور اون رو تعيين بعد مي‌كنيم برابر سايز فايل
ضمنا براي خوندن باينري متغير يا آرايه حتما بايد از نوع بايت باشه

در دستور Print گفتيم اگر هگزادسيمال كاراكتري كه قراره به هگزادسيمال تبديل بشه 2 حرفي بود خودش و اگر نه يك 0 قبلش بزار (براي اطمينان از اينكه هر كاراكتر دقيقا 2 بايت فضا اشغال كرده)

در تابع دوم هم با اين روش عدد هگزا دسيمال به مبناي 10 و نوع بايت تبديل شده