PDA

View Full Version : استفاده از DLL در پروژه کار با API



amear_k
شنبه 09 اردیبهشت 1391, 13:50 عصر
سلام به همه برنامه نویسا
یه سوال فنی... ممنون میشم کمکم کنید


من در حال آماده کردن یه پروژه کاری برای یک نرم افزار سروری هستم که از طریق API فعالیتاشو انجام میده
به طور مثال برای ساختن کاربر جدید باید لینک زیر رو ارسال کنیم براش
Http://serverip/user.asp?action=newuser&username=user1&password=123456

چندتا مسئله برام وجود داره:
اول اینکه این سیستم رو بدون DLL طراحی کردم و مشکلی نداره اما می خواستم بدونم با DLLی که می خوام به مشتری تحویل بدم چطور میشه
یعنی DLL امنیت کدنوشته شده رو داره؟ می تونن به کد های توش دسترسی داشته باشن و متوجه بشن از چه سیستم و الگوریتم هایی استفاده کردم؟ (به عبارتی کدهای کامپایل شده اش قابل برگشته؟)

دوم اینکه برای ارتباط با نرم افزار سروریم از WebBrowser استفاده کردم که نتیجه به صورت فایل XML بر میگرده... میخواستم بدونم چطور میشه WebBrowser رو توی DLL تعریف کنم و باهاش صفحه ای رو باز کنم و اطلاعاتش رو بخونم؟! دقیقا به همون حالت عادی؟ DLL هیچ محدودیتی برای اینکار ایجاد نمیکنه؟

نکته قابل توجه اینه که... می خوام یه جورایی SDK درست کنم و به مشتری بدم. بدون هیچ نرم افزار اضافی فقط فایل DLL یا .H که قابل بازبینی کدها نباشه برای مصرف کننده

ممنون میشم راهنمایی کنید یا راه بهتری بهم پیشنهاد بدین

mehdi.mousavi
شنبه 09 اردیبهشت 1391, 19:26 عصر
یه سوال فنی... ممنون میشم کمکم کنید

سلام.
به برنامه نویس خوش آمدید. ما اینجا "عموما" مطالب غیر فنی رد و بدل نمی کنم، بنابراین کلیه سوالات فنی محسوب میشن (مگر اینکه خلافش ثابت بشه). ;)


اول اینکه این سیستم رو بدون DLL طراحی کردم و مشکلی نداره اما می خواستم بدونم با DLLی که می خوام به مشتری تحویل بدم چطور میشه یعنی DLL امنیت کدنوشته شده رو داره؟ می تونن به کد های توش دسترسی داشته باشن و متوجه بشن از چه سیستم و الگوریتم هایی استفاده کردم؟ (به عبارتی کدهای کامپایل شده اش قابل برگشته؟)

هر دو فایل PE هستن، Layout یکسانی دارن و Flag ای درون فایل تعیین میکنه که اون فایل EXE هستش یا DLL (بدون توجه به extension فایل). اما، اگر کد مورد نظر رو به یک DLL منتقل کنید (جدا از معماری سیستم که ممکنه اینو بهتون تحمیل کنه، یا نکنه)، اضافه شدن DLL مسائل جدیدی رو در پی داره: DLL Injection (http://www.blizzhackers.cc/viewtopic.php?p=2483118)، DLL preloading attacks (http://support.microsoft.com/kb/2389418) و ... اما (و این اما بزرگ هستش)، این به این معنا نیست که نمیشه توابع داخلی فایل exe ی شما رو از بیرون Call کرد. :) خلاصه کنم، هر کدوم خوبی ها و بدی هایی داره، بنابراین در وهله اول، به ساختار برنامه نگاه کنید و بر اون مبنا تصمیم گیری کنید. در مورد برگشت کد نیز، بستگی داره. نمیدونم چرا اینقدر نگران الگوریتم برنامه هستید، اگر هدف الگوریتم مزبور تولید یک Encryption Function هستش، اینکارو نکنید (بدلیل Side-Effect هایی که درست کردن چنین Black Box هایی داره). در غیر اینصورت، ممنون میشم قدری توضیح بدید که چرا الگوریتم برنامه اینقدر براتون ارزشمند هستش.


دوم اینکه برای ارتباط با نرم افزار سروریم از WebBrowser استفاده کردم که نتیجه به صورت فایل XML بر میگرده... میخواستم بدونم چطور میشه WebBrowser رو توی DLL تعریف کنم و باهاش صفحه ای رو باز کنم و اطلاعاتش رو بخونم؟! دقیقا به همون حالت عادی؟ DLL هیچ محدودیتی برای اینکار ایجاد نمیکنه؟

متوجه نشدم، یعنی برای خوندن فایل XML دارید از Web Browser استفاده می کنید؟؟؟ اگر اینطوره، این کار صحیح نیست و باید از Microsoft XML Parser یا دیگر XML Parser های موجود استفاده کنید. (MS-XML Parser امکان load کردن xml رو از remote url بهتون میده).


نکته قابل توجه اینه که... می خوام یه جورایی SDK درست کنم و به مشتری بدم. بدون هیچ نرم افزار اضافی فقط فایل DLL یا .H که قابل بازبینی کدها نباشه برای مصرف کننده ممنون میشم راهنمایی کنید یا راه بهتری بهم پیشنهاد بدین

بسیار خوب، گمان نمیکنم برای این منظور مشتری حاضر باشه (یا اصلا به دردش بخوره) که بخواد یه Process مجرا (که از دید اون معلوم هم نیست اون کاری که ادعا میکنه رو انجام بده یا خیر) رو اجرا کنه، به صرف اینکه بخواد چند تا تابع رو Call کنه. بنظر من، توابع رو بصورت یک یا چند DLL به مشتری بدید (حتی می تونید از COM Component ها استفاده کنید، اگر مایلید تا مشتری بتونه توابع رو از طریق محیط Managed، یا از طریق دیگر زبان ها نیز Call کنه)...

موفق باشید.

amear_k
یک شنبه 10 اردیبهشت 1391, 16:23 عصر
خیلی ممنونم mehdi.mousavi (http://barnamenevis.org/member.php?41233-mehdi.mousavi) عزیز که وقت گذاشتی
توضیحاتت کامل بود مرسی

ببین الگوریتم های خاصی نیست فقط ما سیستمی رو تهیه کردیم برای OCR های خاص... خودش یه SDK داره اما از اونجایی که شرکتی که من براش برنامه رو تهیه می کنم نمیخواد مشتریاش (که شرکت های برنامه نویسی هستن) متوجه بشن سیستم OCR ساخته ی چه کمپانی خارجی هست تا مستقیما از اون تهیه نکنن ( بلاخره خواسته کارفرماس دیگه :D ) از چند نفر که پرسیدم گفتن بهترین راه ایجاد یه DLL دیگه س!


در مورد امنیت هم فکر کنم منظورم رو نتونستم برسونم.. ببین به فرض ما یه DLL داریم که تابعی برای محاسبه انتگرال داره! کسی میتونه فایل DLL ما رو باز کنه و کدهای نوشته شده من رو ببینه؟اسم فانکشن رو تغییر بده یا الگوریتمشو ببینه؟ و در آخر به نام خودش کامپایل کنه دوباره؟

ببخش من تجربه زیادی تو این زمینه ندارم!