PDA

View Full Version : قفل سخت افزاری مجزا از پرینتر



Iran-PC
سه شنبه 20 دی 1384, 18:10 عصر
سلام.
من برنامه ای رو سراغ دارم که با یک قفل سخت افزاری محافظت میشه.
قفل به دو صورت هست که هم به پورت USB متصل میشه و هم به LPT
کرک شدهء این برنامه رو هم دیدم.
خواستم ببینم به نظر شما چطور میشه یک همچین قفلی رو شکست.
معمولا برای تست وجود قفل سخت افزاری چه کارهایی انجام میشه؟ (یک برنامه دیگر که همزمان اجرا میشه؟ یا درون برنامه اصلی این کار صورت میگیره؟)
و یک سوال دیگه.
میشه توی ویندوز یک پورت مجازی ساخت؟
یعنی به شکلی که تمام برنامه ها فکرکنند واقعا با یک پورت سخت افزاری واقعی دارند کار میکنند؟

ممنون میشم به همه سوالات جواب بدید و برای ادامه این تاپیک رو نبندید.

Inprise
سه شنبه 20 دی 1384, 19:24 عصر
برنامه هائی که از قفلهای سخت افزاری استفاده میکنند توسط کامپوننت خاصی که به همین منظور طراحی شده با قفل صحبت میکنند ، در صورتیکه اطلاعات دریافت شده از قفل همان چیزی باشه که میبایست باشه ، یعنی قفل صحیح و مناسبه و برنامه کار میکنه ، و اگر قفلی نباشه یا اطلاعات برگشتی صحیح نباشه ، قاعدتا" برنامه کار نمیکنه . برای عبور از این قفلها ، ترافیک در حال عبور بین برنامه و قفل رو مانیتور میکنند ، با روشهای متداول مهندسی معکوس نحوهء عملکرد قفل رو درک میکنند ، و سعی میکنن با روشهای مختلف ، یا اطلاعاتی به برنامه ارسال کنند که او تصور کنه واقعا" قفل مناسبی وجود داره ، یا روتینهای بررسی کنندهء قفل رو داخل برنامه حذف یا از کار بندازن .

پورت مجازی : بله . میشه تعداد بیشماری پورت مجازی با انواع مختلف ساخت ، سریال پارالل یو اس بی و سایرین . کدهای آماده و حتی رایگانی هم برای این مقصود وجود دارند که با یک جستجوی ساده پیداشون خواهی کرد ، البته عموما" به منظور عبور از یک قفل ، برنامه نویسها از Emulator های خودشون استفاده میکنند ، نه برنامه های آماده و موجود ؛ و برای نوشتن یک پورت مجازی ، بسته به نوع عملکردی که از پورت انتظار داری ، باید یک IRQ Hooker بنویسی که درخواستهای منتظر در صف پورت مورد نظرت رو ابتدا از اون صف دراپ و سپس توسط فیلتر درایور خودشون به اونها جواب بدن . چند نمونه فیلتر درایور نمایشی همراه با بستهء DDK ویندوز وجود دارند که برای مطالعه و شروع مناسبند . لازم به ذکره همیشه راههائی وجود داره که از واقعی بودن یا مجازی بودن پورت اطمینان پیدا کرد ، و راههائی وجود داره که راههای مذکور رو بی اثر میکنند و ...؛

M.GhanaatPisheh
سه شنبه 20 دی 1384, 20:51 عصر
برای عبور از این قفلها ، ترافیک در حال عبور بین برنامه و قفل رو مانیتور میکنند ، با روشهای متداول مهندسی معکوس نحوهء عملکرد قفل رو درک میکنند ، و سعی میکنن با روشهای مختلف ، یا اطلاعاتی به برنامه ارسال کنند که او تصور کنه واقعا" قفل مناسبی وجود داره ، یا روتینهای بررسی کنندهء قفل رو داخل برنامه حذف یا از کار بندازن .



سوال
در صورت رمز گذاری اطلاعات عبوری بین طرفین روش قابل اتکای پیشنهادی یا موجود حضرتعالی جهت رویت اطلاعات مبادله شده چیه؟
من توی یه مدلش از الگوریتم Message Digest استفاده کردم و توی نظر اول روش مناسبی به نظر می رسه.

Inprise
چهارشنبه 21 دی 1384, 19:21 عصر
قاعدتا" با توجه به محدودیتهای قفلها ، نمیشه در این موارد از الگوریتمهای مبتنی بر Public Key و با لحاظ کلیه عناصر لازم استفاده کرد ، و روشهای رمزنگاری متداول این جور برنامه ها ، بسادگی با Trace کد و رسیدن به کلید ، قابل عبوره . ( بهر حال اطلاعات رمز شده باید رمزگشائی بشن و نرم افزار دائما" به کلید رمزنگاری مراجعه خواهد کرد و یک دیباگر و کمی حوصله کافیه که کلید پیدا بشه ) ، هر چند که این روزها ، اغلب ، از کار انداختن روتینهای بررسی قفل داخل نرم افزار ، ساده تر از شبیه سازی قفل و ...است ؛

M.GhanaatPisheh
پنج شنبه 22 دی 1384, 14:11 عصر
با توجه به جمیع مقادیر فوق چه پروسه ای برای بالا بردن ضریب اطمینان توصیه می کنی؟

Inprise
پنج شنبه 22 دی 1384, 18:05 عصر
عدم استفاده از راه حلهای تجاری ؛ استفاده از روشهای ابتکاری - مطالعه و کسب تجربه و تمرین . اینها لزوما" هم به چیز خوبی منجر نمیشن ، گاهی برای خیلیها بهتره که از یک پراتکشن تجاری استفاده کنن و خلاص ، و عمر گرانمایه رو مصروف چیزی نکنن که در بهترین حالت ، شاگرد کلاس اولش خواهند بود ، و برای بعضی ها اینطور نیست ؛ حکم چندان کلی نمیشه صادر کرد

Iran-PC
جمعه 23 دی 1384, 23:30 عصر
تو این نمونه قفلی که من دیدم برنامه اصلی یک برنامه دیگر رو فعال میکنه که اون برنامه چک میکنه که قفل وصل هست یا نه.


یک سوال

version.dll چه کاری انجام میده؟
برنامه از این دی ال ال برای شناسایی فایل چک کننده استفاده میکرد که اصلی هست یا بدلی.