PDA

View Full Version : قراردادن فایل های برنامه در Dll



محمد زارع
شنبه 09 تیر 1386, 13:21 عصر
سلام

مدتیه بدنبال راهی هستم تا بتونم فایلهای مورد نیاز برنامه رو در قالب یه فایل Dll قرار بدم و داخل برنامه اونرو فراخونی کنم چون اینطوری بنظرم بشه فایلهای ضروری برنامه رو از دید کاربرها مخفی کرد(!!؟؟) ولی متاسفانه به جای امیدوار کننده ای نرسیدم.

از دوستانی که در این بخش کار کردن تقاضا دارم تا بحث رو دست بگیرن و کمک کنن.به نظرم میتونه مشکل و سئوال خیلی از دوستان باشه.در ضمن اگه زحمت بکشید و جوابها رو در قالب مثال بیان کنید خیلی خیلی ممنون میشم.

با تشکر از همگی:تشویق:

محمد زارع
سه شنبه 12 تیر 1386, 14:43 عصر
خسته نباشید!!!

اینجور که معلومه قضیه خیلی بغرنج بوده و همگی بی خبر بودیم.
خدا کنه لااقل یه نفر از مریخ بیاد جواب همه اعضا! رو بده.:متعجب:

newgoldenman
سه شنبه 12 تیر 1386, 15:43 عصر
من هم موافقم! اتفاقاً من هم دنبال یادگیری ساخت و استفاده ی DLL ها هستم!
دوست عزیز شکیبا باشید!...

ghafoori
سه شنبه 12 تیر 1386, 20:54 عصر
دوستان عزیز یک پروژه از نوع class library تعریف کنید بعد از منو project->add new item یک فایل resource به برنامه اضافه کنید و روی فایل جدید کلیک کنید تا طراح ان بالا بیاید حالا هر چی خواستید به ان اضافه کنید پروژه را کامپایل کنید

choobin84
چهارشنبه 13 تیر 1386, 07:12 صبح
من هم موافقم! اتفاقاً من هم دنبال یادگیری ساخت و استفاده ی DLL ها هستم!

دوست عزیز شکیبا باشید!...


http://www.barnamenevis.org/forum/showpost.php?p=361782&postcount=2

__H2__
چهارشنبه 13 تیر 1386, 08:36 صبح
سلام

مدتیه بدنبال راهی هستم تا بتونم فایلهای مورد نیاز برنامه رو در قالب یه فایل Dll قرار بدم و داخل برنامه اونرو فراخونی کنم چون اینطوری بنظرم بشه فایلهای ضروری برنامه رو از دید کاربرها مخفی کرد(!!؟؟) ولی متاسفانه به جای امیدوار کننده ای نرسیدم.

این کار جزء ابتدایی ترین کارها در برنامه نویسی است و در تمام زبان ها امکان دارد.
من برای یک تاپیک دیگری نمونه کد این برنامه را نوشته بودم و از تصاویر داخل dll در یک exe دیگر استفاده می کند (گرچه میتوان مستقیماً تصاویر و دیگر فایلها را در داخل همان exe قرار داد و نیازی به dll نیست)
دانلود مستقیم کد نمونه:
http://www.h02.ir/download.aspx?File=Exe-Dll-Resources.vb.zip

محمد زارع
شنبه 16 تیر 1386, 13:15 عصر
_H2_عزیز سلام

با تشکر از شما بخاطر زحمتی که کشیدید.
اما یه مشکل، من در برنامه خودم تقریباً همون کاهایی را که شما کردیدو انجام دادم و عکس های خودم رو داخل DLL ریختم ولی موقع فراخونی یه Error بصورت"Value of 'null' is not valid for 'stream'." میده!

اگه ممکنه راهنمایی کنید.:ݘ:
باز هم متشکرم.

__H2__
یک شنبه 17 تیر 1386, 14:16 عصر
سلام
حتماً درست انجام نداده اید،
1- مطمئن شوید فایل داخل پروژه embeded شده باشد (احتمالاً همین ایراد را دارد)
گزینه Show All Files در Sulotion Explorer را روشن کنید و فایل را پیدا کنید و با راست کلیک روی آن گزینه Include را انتخاب کنید و بعد هم در پنجره Properties گزینه build Action را روی Embedded Resource تنظیم کنید

2- نام پروژه خودتان را قبل از نام فایل باید درست و صحیح تایپ کنید

ضمناً با عرض شرمندگی به علت مشکلی خاص، شاید چند روزی نتوانم به اینجا سر بزنم، مجدداً میبخشید و خدانگه دار.

محمد زارع
دوشنبه 18 تیر 1386, 08:41 صبح
سلام
حتماً درست انجام نداده اید،
1- مطمئن شوید فایل داخل پروژه embeded شده باشد (احتمالاً همین ایراد را دارد)
گزینه Show All Files در Sulotion Explorer را روشن کنید و فایل را پیدا کنید و با راست کلیک روی آن گزینه Include را انتخاب کنید و بعد هم در پنجره Properties گزینه build Action را روی Embedded Resource تنظیم کنید

2- نام پروژه خودتان را قبل از نام فایل باید درست و صحیح تایپ کنید

ضمناً با عرض شرمندگی به علت مشکلی خاص، شاید چند روزی نتوانم به اینجا سر بزنم، مجدداً میبخشید و خدانگه دار.


دوست عزیز خیلی ممنونم.
با راهنمایی شما مشکلم حل شد.

امیدوارم در هر جا هستی موید باشید.

زارع

محمد زارع
دوشنبه 10 فروردین 1388, 23:35 عصر
سلام

باید توجه داشت که بعد از اینکه فایلهای مورد نیاز در برنامه رو داخل یه فایل DLL ریختیم و از اون تو برنامه استفاده کردیم، موقع نصب، اون فایل DLL در سیستم مقصد کپی میشه و یه برنامه نویس دیگه می تونه براحتی مثل خود ما از اون توی برنامه خودش استفاده کنه!!!! حالا سئوال اینجاست که چه کار میشه کرد تا اگه فایل DLL دست هر کی افتاد نتونه ازش استفاده کنه؟ مثلاً اگه قراره تو برنامه یه فایل txt که برای برنامه ما جنبه حیاتی داره و نباید دست کسی بیافته استفاده بشه بطوریکه تنها استفاده کننده اون خودمون باشیم؟

با تشکر:تشویق:
زارع

__H2__
چهارشنبه 12 فروردین 1388, 00:16 صبح
سلام
شما میتوانید فایلهای خود را با کمک فضای نام System.Security.Cryptography رمزنگاری و ذخیره کنید.

محمد زارع
چهارشنبه 12 فروردین 1388, 09:16 صبح
سلام
شما میتوانید فایلهای خود را با کمک فضای نام System.Security.Cryptography رمزنگاری و ذخیره کنید.


سلام
از شما بسیار ممنون و سپاسگذارم
ولی من اصلاً در این زمینه کار نکردم میشه لطفاً بیشتر راهنمایی کنید؟:خجالت:

ممنون از توجهتون:تشویق:
زارع

محمد زارع
پنج شنبه 13 فروردین 1388, 22:52 عصر
سلام دوباره

امیدوارم که جشن روز 13 به در به همه خوش گذشته باشه.:قلب:

--H2-- عزیز، اگه زحمتی نیست در خصوص راهکارتون بیشتر راهنمایی فرمائید.:تشویق:

ممنون
زارع

__H2__
یک شنبه 16 فروردین 1388, 19:43 عصر
سلام

ولی من اصلاً در این زمینه کار نکردم میشه لطفاً بیشتر راهنمایی کنید؟
اگه زحمتی نیست در خصوص راهکارتون بیشتر راهنمایی فرمائید


میبخشید و شزمنده، چند روزی وقت نشد سری به این سایت بزنم...
شما میتوانید فایل خود را با یکی از الگ.ریتم های رمزنگاری، کد کنید و سپس ان را در اسمبلی خود embedded کنید.
در زمان استفاده هم طبیعتاً در داخل خود برنامه و بدون extract فایل را رمزگذشایی و استفاده میکنید.

مثلاً


Dim data1() As Byte = {1, 2, 3, 4, 5, 6, 7, 8}
Dim data2() As Byte
Dim cryptodata() As Byte
Dim k_iv() As Byte = {110, 2, 40, 7, 58, 14, 114, 5}
Dim k_key() As Byte = {255, 110, 78, 3, 0, 12, 124, 1}

Dim key As New System.Security.Cryptography.DESCryptoServiceProvi der
key.IV = k_iv
key.Key = k_key

cryptodata = Encrypt(data1, key.CreateEncryptor)

'...
'cryptodata = DES-Cryptography-Algorithm
'...

data2 = Decrypt(cryptodata, key.CreateDecryptor)

'...
'...
'...
'...
'...


Public Shared Function Encrypt(ByVal data() As Byte, ByVal key As System.Security.Cryptography.ICryptoTransform) As Byte()
Using _
memoutput As New System.IO.MemoryStream, _
cstrm As New System.Security.Cryptography.CryptoStream(memoutpu t, key, System.Security.Cryptography.CryptoStreamMode.Writ e)

cstrm.Write(data, 0, data.Length)
cstrm.Close()
Return memoutput.ToArray
End Using
End Function

Public Shared Function Decrypt(ByVal cryptodata() As Byte, ByVal key As System.Security.Cryptography.ICryptoTransform) As Byte()
Const BUFFERSIZE As Integer = 4 * 1024

Using _
meminput As New System.IO.MemoryStream(cryptodata), _
cstrm As New System.Security.Cryptography.CryptoStream(meminput , key, System.Security.Cryptography.CryptoStreamMode.Read ), _
memout As New System.IO.MemoryStream()

Dim buffer(BUFFERSIZE - 1) As Byte
Dim iRead As Integer
Do While (True)
iRead = cstrm.Read(buffer, 0, BUFFERSIZE)
If (iRead <= 0) Then Exit Do
memout.Write(buffer, 0, iRead)
Loop

Return memout.ToArray()
End Using
End Function


- طبیعتاً باید محدودیت های RAM را در نظر داشته باشید، اگر فایل شما خیلی بزرگ باشد، شاید نتوان کل عملیات رمزگشایی را یکجا در RAM انجام داد، یا حداقل باید برخی دستورات را اصلاح کرد تا عملکرد کم مصرف تری داشته باشند !

- طبیعتاً اگر کد شما به راحتی Decompile شود، کد فوق فقط سدی در برابر افراد کنجکاو تازه کار خواهد بود.

- در نمونه فوق data1 معرف داده های اصلی و اولیه است که باید خودتان با منبع مناسب پرش کنید.

- و cryptodata هم همان دیتای میانی و رمزنگاری شده میباشد و میتوانید در قالب یک فایل در داخل اسمبلی خود قرار دهید.

- data2 هم داده رمزگشایی شده است که قائدتاً باید باید با داه اصلی اولیه data1 برابر باشد.

- k_iv و k_key را هم شما میتوانید به عنوان نوعی Password در نظر بگیرید.

- معمولاً فایلهای داخل یک اسمبلی ارزش چندان زیادی ندارند، من نمیدانم کارتان چیست ولی شاید با یک بازنگری به این نتیجه برسید که شاید کلاً نیازی به این کارها نباشد.

موفق باشید.