PDA

View Full Version : سوال: استفاده از قفل سخت افزاري TinyHID و كدهاي مربوط به كنترل قفل



soroush_k12
شنبه 21 شهریور 1388, 19:43 عصر
سلام
من با استفاده از قفل سخت افزاري TinyHID براي بانك خودم قفل گذاشته ام.و براي كنترل وجود و صحت قفل سخت افزاري USB از كد هاي زير در فرم وردي برنامه استفاده كرده ام.

Tiny1.Initialize = True
Tiny1.UserPassWord = "D23794196CA4BE610A5A282AEE19C"
Tiny1.ShowTinyInfo = True
If Tiny1.DataPartition = "soroush karimi" And Tiny1.TinyErrCode = 0 Then GoTo E1 Else DoCmd.Quit
E1:

مشكل من اينجاست كه اگر شيئ اكتيو ايكس از روي فرم وردي برنامه delete و يا حتي rename شود برنامه بدون نياز به قفل اجرا ميگردد.
از دوستاني كه در اين خصوص تجربه دارند خواهش ميكنم در اصلاح اين كد مرا ياري دهند.
با تشكر

nabeel
شنبه 21 شهریور 1388, 20:09 عصر
ضمن سلام

مدتها قبل توی فایل کمک قفل Trial Keeper Professional هم اشاره کرده بودم که استفاده از قفلهای مبتنی بر OCX در داخل Access چندان منطقی نیست
شما یکی از روشهای دور زدن ساده اون رو پیدا کردید که البته تا حدودی راه مقابله داره
متاسفانه دور زدن این نوع قفلها در داخل اکسس یه مقدار ساده تر از اونی هستش که فکر میکیند

در اکسس قفلهای مبتنی بر OCX دارای حاشیه امنیت کمتری نسبت به قفلهای DLL هستن

موفق باشید

soroush_k12
شنبه 21 شهریور 1388, 21:18 عصر
ضمن سلام


شما یکی از روشهای دور زدن ساده اون رو پیدا کردید که البته تا حدودی راه مقابله داره

موفق باشید

سلام اگر ممكنه راه اين مقابله رو كمي برام توضيح بدين
من فعلا امكان استفاده از قفلهاي مبتني بر dll رو ندارم
ممنونم

nabeel
شنبه 21 شهریور 1388, 22:00 عصر
سلام

فایلی که قفل رو روش گذاشتید بفرستید ( فقط بخش مربوط به چک کردن قفل ) به همراه OCX مربوط به قفل
البته بعد از تغییر باز هم میشکنه ! ولی کمی مشکلتر

موفق باشید

soroush_k12
یک شنبه 22 شهریور 1388, 18:55 عصر
سلام

فایلی که قفل رو روش گذاشتید بفرستید ( فقط بخش مربوط به چک کردن قفل ) به همراه OCX مربوط به قفل
البته بعد از تغییر باز هم میشکنه ! ولی کمی مشکلتر

موفق باشید

سلام با تشكر از همكاري شما جناب آقاي nabeel
فايل نمونه و فايل ocxرا گذاشتم.در برنامه نمونه در صورت وجود و صحت قفل برنامه اجرا و در غير اينصورت بلافاصله بسته ميشود ولي اگر شيئ اكتيو ايكس از داخل فرم delete ويا rename شود پيغام خطا داده شده ولي فرم همچنان اجرا ميشود.
به نظر شما براي بالاتر رفتن امنيت قفل چه تغييراتي و ترفندهايي در كدها بايد داد.
با تشكر مجدد

nabeel
یک شنبه 22 شهریور 1388, 19:45 عصر
ضمن سلام

ارائه راه کارهای کلی رو به همون تیم طراحی منشور سیسمن محول میکنم چرا که به هر حال هر کسی باید از محصول خودش حمایت کنه
در مورد این محصول هم نظر نمیدم , چرا که قبلاً به اندازه کافی در فرومهای دیگه در خصوص اون بحث شده که البته مشکلاتش در اکسس دو چندان محیطهای دیگه هستش ( همین الان هم در بخش امنیت و VB بحث اون داغه )

ولیمشکل فعلی شما رو براتون حل میکنم

با تغییر نام کنترل عملاً شما کد خطای 424 رو دریافت میکنید که در این نوع قفل هم میتونیم با اتکا به اون عملیات رو متوقف کنیم ولی به دلایل امنیتی در وضعیت فعلی از اون صرف نظر میکنم !؟!
برای مشکل شما دو رویکرد رو پیش میگیریم :
1 - چک نمودن اسامی کنترلهای موجود در داخل فرم
در صورت وجود نداشتن کنترلی با نام تعیین شده از سوی شما , برنامه از مدار خارج بشه ( در مثال ارسالی من برنامه تنها پیغام خطا میده )
2 - جهت جلوگیری از حذف یک کنترل هم
شما میتونید از شمارش تعداد کنترلها استفاده کنید ( گو اینکه روش 1 همین رو هم توی دل خودش داره )

نمونه کد در داخل فایل ارائه شده , نیم نگاهی به اون داشته باشید ( البته در حد ایده اولیه هستش که دلیلش برمیگرده به اینکه مشکل شما رو در واقع باید منشور سییمین به صورت کامل حل کنه )

پی نوشت :
البته شما فایل رو به صورت MDB ظاهراً عرضه میکنید ! , حذف آبجکت در داخل MDE ذره ای مشکل تره

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

36880

موفق باشید

pmoshir
دوشنبه 23 شهریور 1388, 10:33 صبح
با سلام

چطور میشه از unregister شدن فایل tiny.ocx جلوگیری کرد؟.یا اگر unregister شد در داخل برنامه مجدد register بشه؟

با تشکر

pmoshir
دوشنبه 23 شهریور 1388, 10:59 صبح
دوست عزیز سروش

من یه پیشنهاد دارم.شما برای استفاده از قفل های tiny از شی استفاده نکنید.شما در قسمت open فرم ورودیتون کد گذاری کنید.


Dim tiny1 As TINYLib.Tiny
Set tiny1 = New TINYLib.Tiny
tiny1.Initialize = True
If tiny1.TinyErrCode <> 0 Then MsgBox "", vbCritical + vbMsgBoxRight, ""
If tiny1.TinyErrCode <> 0 Then DoCmd.Quit

nabeel
دوشنبه 23 شهریور 1388, 19:02 عصر
سلام pmoshir


چطور میشه از unregister شدن فایل tiny.ocx جلوگیری کرد؟.یا اگر unregister شد در داخل برنامه مجدد register بشه؟
جلوگیری از Unregister شدن که امکان پذیر نیست
در خصوص اینکه در داخل برنامه Register بشه هم قبلاً یه جای دیگه صحبت شده بود , به نظر من رجیستر کردن در داخل برنامه منطقی نیست
در صورت Unregsiter شدن یک کنترل, خطای 429 از سوی برنامه صادر میشه که شما میتونید از همین مورد استفاده کنید و جلوی اجرای نسبی !! برنامه رو بگیرید

موفق باشید

soroush_k12
دوشنبه 23 شهریور 1388, 20:50 عصر
ضمن سلام

ارائه راه کارهای کلی رو به همون تیم طراحی منشور سیسمن محول میکنم چرا که به هر حال هر کسی باید از محصول خودش حمایت کنه
در مورد این محصول هم نظر نمیدم , چرا که قبلاً به اندازه کافی در فرومهای دیگه در خصوص اون بحث شده که البته مشکلاتش در اکسس دو چندان محیطهای دیگه هستش ( همین الان هم در بخش امنیت و VB بحث اون داغه )

ولیمشکل فعلی شما رو براتون حل میکنم

با تغییر نام کنترل عملاً شما کد خطای 424 رو دریافت میکنید که در این نوع قفل هم میتونیم با اتکا به اون عملیات رو متوقف کنیم ولی به دلایل امنیتی در وضعیت فعلی از اون صرف نظر میکنم !؟!
برای مشکل شما دو رویکرد رو پیش میگیریم :
1 - چک نمودن اسامی کنترلهای موجود در داخل فرم
در صورت وجود نداشتن کنترلی با نام تعیین شده از سوی شما , برنامه از مدار خارج بشه ( در مثال ارسالی من برنامه تنها پیغام خطا میده )
2 - جهت جلوگیری از حذف یک کنترل هم
شما میتونید از شمارش تعداد کنترلها استفاده کنید ( گو اینکه روش 1 همین رو هم توی دل خودش داره )

نمونه کد در داخل فایل ارائه شده , نیم نگاهی به اون داشته باشید ( البته در حد ایده اولیه هستش که دلیلش برمیگرده به اینکه مشکل شما رو در واقع باید منشور سییمین به صورت کامل حل کنه )

پی نوشت :
البته شما فایل رو به صورت MDB ظاهراً عرضه میکنید ! , حذف آبجکت در داخل MDE ذره ای مشکل تره

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

36880

موفق باشید

سلام
مطالب بسيار مفيدي بود و استفاده زيادي در برنامه خودم كردم.
بسيار از توجه شما ممنونم

pmoshir
سه شنبه 24 شهریور 1388, 17:28 عصر
با تشکر جناب nabeel

در برنامه من از شی tiny استفاده نمیکنم و وجود قفل رو در هنگام باز شدن فرم ورودی چک میکنم. هنگامی که unregister میکنم هیچ پیغام خطایی دریافت نمیکنم؟؟چرا؟؟

اگه مشکلم رو حل کنید ممنون میشم.

nabeel
سه شنبه 24 شهریور 1388, 18:29 عصر
سلام pmoshir

ظاهراً این قفل مشخصه ای با عنوان TinyErrorCode دراه که کد خطا رو به صورت داخلی بر میگردونه ( شاید بشه گفت خطا رو Raise میکنه )
خود من شخصاً با این قفل کار نکردم ولی با این اوصاف نمونه فایل خودتون رو بفرستید تا بررسی بشه
قاعدتاً باید کد خطایی که بشه از اون استفاده کرد برگشت داده بشه

موفق باشید

soroush_k12
چهارشنبه 25 شهریور 1388, 19:52 عصر
در صورت Unregsiter شدن یک کنترل, خطای 429 از سوی برنامه صادر میشه که شما میتونید از همین مورد استفاده کنید و جلوی اجرای نسبی !! برنامه رو بگیرید

موفق باشید[/quote]
سلام
ممكنه نمونه كدي رو كه اين خطا رو كنترل ميكنه (مثلا در صورت وجود اين خطا از برنامه خارج بشه) رو بنويسيد
با تشكر

nabeel
شنبه 28 شهریور 1388, 22:36 عصر
سلام soroush_k12

ببنید یکی از الگوهای کنترل خطا به صورت زیر هستش

Private Sub Form_Load()
On Error GoTo Err_Form_Load
'Your Codes Here
Exit_Form_Load:
On Error Resume Next
Exit Sub
Err_Form_Load:
Select Case Err.Number
Case 0
Resume Exit_Form_Load:
Case YourErrorCodes ' X,Y,Z
'Docmd.Quit Or ....
Case Else
MsgBox Err.Number & " " & Err.Description, vbExclamation, "Error in module Form_Form1 - sub Form_Load"
Resume Exit_Form_Load:
End Select
End Sub


شما به جای X,Y,Z میتونید کدهای خطای خودتون رو قرار بدید , و به فراخور رفلکس مناسب رو نیز در داخل برنامه نشون بدید

موفق باشید

pmoshir
دوشنبه 30 شهریور 1388, 10:21 صبح
من در قسمت open فرم ورودی این کد رو استفاده میکنم:


Dim tiny1 As TINYLib.Tiny
Set tiny1 = New TINYLib.Tiny
tiny1.Initialize = True
If tiny1.TinyErrCode <> 0 Then MsgBox " ", vbCritical + vbMsgBoxRight, ""
If tiny1.TinyErrCode <> 0 Then DoCmd.Quit
tiny1.SpecialID = "6666666"
If tiny1.TinyErrCode <> 0 Then MsgBox "", vbCritical + vbMsgBoxRight, ""
If tiny1.TinyErrCode <> 0 Then DoCmd.Quit
tiny1.UserPassWord = "5633333333333"
tiny1.ShowTinyInfo = True
If tiny1.TinyErrCode <> 0 Then MsgBox "", vbCritical + vbMsgBoxRight, "
If tiny1.TinyErrCode <> 0 Then DoCmd.Quit


حالا چطور از unregister جلو گیری کنم؟؟؟

nabeel
دوشنبه 30 شهریور 1388, 14:15 عصر
سلام pmoshir

در چند پست قبلي پاسخها رو داده بودم هر چند در داخل هر كدومش بخشي رو ولي جواب شما رو مجدداً با اتكا به همونها ميدم .

Private Sub Form_Load()
On Error GoTo Err_Form_Load

Dim tiny1 As TINYLib.Tiny
Set tiny1 = New TINYLib.Tiny
tiny1.Initialize = True
If tiny1.TinyErrCode <> 0 Then MsgBox " ", vbCritical + vbMsgBoxRight, ""
If tiny1.TinyErrCode <> 0 Then DoCmd.Quit
tiny1.SpecialID = "6666666"
If tiny1.TinyErrCode <> 0 Then MsgBox "", vbCritical + vbMsgBoxRight, ""
If tiny1.TinyErrCode <> 0 Then DoCmd.Quit
tiny1.UserPassWord = "5633333333333"
tiny1.ShowTinyInfo = True
If tiny1.TinyErrCode <> 0 Then MsgBox "", vbCritical + vbMsgBoxRight, ""
If tiny1.TinyErrCode <> 0 Then DoCmd.Quit

Exit_Form_Load:
On Error Resume Next
Exit Sub

Err_Form_Load:
Select Case Err.Number
Case 0
Resume Exit_Form_Load:
Case 429
MsgBox "Your Action Here"
Case Else
MsgBox Err.Number & " " & Err.Description, vbExclamation, "Error in module Form_Form1 - sub Form_Load"
Resume Exit_Form_Load:
End Select
End Sub

پي نوشت :
هونطوري كه قبلاً هم گفتم ؛ نسخه هاي مبتني بر OCX مشكل خاصي دارن كه به راحتي در داخل Access دور زده ميشن
من براي دور زدنش در روش شما ، حالا خود OCX رو مجدداً به يكي از فرمها اضافه ميكنم و ...

موفق باشيد

pmoshir
دوشنبه 30 شهریور 1388, 15:41 عصر
با تشکر از شما جناب nabeel

فقط یه سوال؟ شی tiny control باید در فرم قرار بگیره؟؟؟

nabeel
دوشنبه 30 شهریور 1388, 16:09 عصر
سلام pmoshir

با مطالعه پستهاي قبلي ، ملاحظه مي كنيد كه ، در جايي گفتم ، كنترلي رو كه توي فرم گذاشتيد بر ميداريم و قفل رو طي فرايندي خاص به طور كامل غير فعال مي كنيم و در مورد روش شما هم كه ، يه دونه كنترل توي فرم قرار ميديم و ...
در مجموع هيچ جاي امني براي OCX در داخل Access وجود نداره ( در مجموع در داخل Office )

موفق باشيد