PDA

View Full Version : حرفه ای: ساخت قفل سخت افزاری برای یه نرم افزار



morrning
یک شنبه 12 اردیبهشت 1389, 17:18 عصر
سلام من میخوام یه قفل سخت افزاری برای یه نرم افزار بسازم
ولی در مورد انجام همچین کاری هیچ آگاهی ندارم میشه لطف کنید یه راهنمایی بنمایید

یه سوال دیگه اونم اینکه میشه این جور قفل ها رو دور زد؟

morrning
یک شنبه 12 اردیبهشت 1389, 17:24 عصر
یه سوال دیگه این جور قفل ها از اتصال رشته های usb به وجود میاد یا از یه ac خارجی استفاده میشه

civilm
یک شنبه 12 اردیبهشت 1389, 17:33 عصر
سلام من میخوام یه قفل سخت افزاری برای یه نرم افزار بسازم
ولی در مورد انجام همچین کاری هیچ آگاهی ندارم میشه لطف کنید یه راهنمایی بنمایید

یه سوال دیگه اونم اینکه میشه این جور قفل ها رو دور زد؟

دوست عزيز اينهمه برنامه با قفل سخت افزاري كرك ميشن كه ميشه گفت شركتهاي سازنده هم ادعاي غير قابل كرك شدن را دارند .

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

b.mahsa
یک شنبه 12 اردیبهشت 1389, 21:17 عصر
این روشی که می گم سادست ولی بد هم نیست.
میتونید از اطلاعات سخت افزاری سیستمی استفاده کنید که نرم افزار قراره روش اجرا بشه
مثل شماره hard ,........ تمام این اعداد رو بخونه و یه عدد بسازه با یکسری فرمول های ریاضی . بعد اون رو hash کنید. و ازش استفاده کنید.
فقط یه بدی داره اونم اینه که اگر یه قطعه از اون سیستم تعویض بشه برنامه دیگه قابل اجرا نیست.

REZADG
یک شنبه 12 اردیبهشت 1389, 22:03 عصر
منم با دوستمون موافقم تکنیک های برنامه نویسی بهترین راه هایی که نمی زاره برنامه کرک بشه واسه این که بهتر این موضوع رو درک کنید به بخش کرکینگ برید
این روش هم که نوشتید به راحتی قابل دور زدنه به نظر من چند کتاب کرک خوندن چیزی از کسی کثر نمی کنه یه سری به کتاب هاش بزن این ترفند شما رو فقط با یک کلمه دور می زنن

morrning
سه شنبه 14 اردیبهشت 1389, 11:44 صبح
خوب برنامه من ساخته شد و قفل هم این طور کار میکنه که از یه ac خارجی یه عدد منحصر به فرد میگیره حالا دو تا عدد هم یکی سریال مادر برد و هارد رو هم میگیره و با هم یه رشته تشکیل میده حالا بعد از انجام عملیات ریاضی روی رشته مورد نظر کد فعال سازی ساخته میشه!
حالا اگه خدا قسمت کنه و برنامه انتشار پیدا کنه یه شماره محصول هم همراه هر بسته برای شناسایی با هر بسته عرضه میشه

چند تا کتاب هم خوندم ولی فکر کنم وقتی برنامه هایی مثل فتوشاپ و ویندوز کرک میشن خوب نباید انتظار زیادی داشت:ناراحت:

pirmard
سه شنبه 14 اردیبهشت 1389, 12:25 عصر
خوب برنامه من ساخته شد و قفل هم این طور کار میکنه که از یه ac خارجی یه عدد منحصر به فرد میگیره حالا دو تا عدد هم یکی سریال مادر برد و هارد رو هم میگیره و با هم یه رشته تشکیل میده حالا بعد از انجام عملیات ریاضی روی رشته مورد نظر کد فعال سازی ساخته میشه!
حالا اگه خدا قسمت کنه و برنامه انتشار پیدا کنه یه شماره محصول هم همراه هر بسته برای شناسایی با هر بسته عرضه میشه

چند تا کتاب هم خوندم ولی فکر کنم وقتی برنامه هایی مثل فتوشاپ و ویندوز کرک میشن خوب نباید انتظار زیادی داشت:ناراحت:


بهترین کار برای قفل سخت افزاری اینه که یکی از توابع مهم برنامه رو توی سخت افزار پیاده کنین . یعنی مثلا تابع محاسبه مالیات توی سخت افزار (برای یه برنامه حسابداری مثلا) باشه .

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

REZADG
سه شنبه 14 اردیبهشت 1389, 13:39 عصر
چند تا کتاب هم خوندم ولی فکر کنم وقتی برنامه هایی مثل فتوشاپ و ویندوز کرک میشن خوب نباید انتظار زیادی داشت:ناراحت:

البته این جوریه ولی اون وقط باید انتظاری به این نداشته باشیم که فردا زنده ایم همه چیز رو احتمال پیاده شده و ما این احتمال رو باید بدیم که برنامه ی ما کرک نمیشه و در ضمن قفل های سخت افزاری چون مشابه هم هستن اکثرا زود کرک می شن
ولی خود نظر نظر شماست ما فقط پیشنهاد می دیم

majid_vb_2008
چهارشنبه 15 اردیبهشت 1389, 11:11 صبح
سلام اينجا رو يك سر بزن
http://www.barnamenevis.org/forum/showthread.php?t=150122

majid3829
جمعه 05 شهریور 1389, 18:09 عصر
سلام كتابي است كه به ما ساخت قفل سخت افزاري را آموزش بدهد

SilverLearn
جمعه 05 شهریور 1389, 18:41 عصر
سلام كتابي است كه به ما ساخت قفل سخت افزاري را آموزش بدهد



سلام اين كه نوشتي به صورت سوال هست يا واقعا همچين كتابي هست؟

Artisoft
شنبه 06 شهریور 1389, 03:28 صبح
سلام.به نظر من قفل نرم افزاری بهتره.کار با قفل سخت افزاری اگه خوب بود مایکروسافت و سایمانتیک نورتون و خیلی ازین غول های برنامه نویسی ازش استفاده می کردند. پس خوب نیت.استفاده از قفل سخت افزاری سرعت کار با برنامتو میاره پایین.
نرم افزاری بهتره.
یه راه خوب اینه که برنامت رو هر سیستم یه کد 8 رقمی بده و اون شرکت که از تو برنامرو می خره اونو به تو اطلاع بده و تو کد فعال سازی رو که فقط مخصوص اون کامپیوتره بهشون میدی.هر دو کد رو هر کامپیوتر متفاوته و کسی نمیتونه پیداش کنه اما یه بدی داره و اون اینه که اگه کسی بفهمه که تو چه طوری کد دوم رو از روی کد اول به دست میاری می تونه نرم افزارتو هک کنه اما راه حل داره و اون اینه که کد دوم اینترنتی و بدون دخالت فرد توی برنامه ثبت بشه و کسی نفهمه چطور به دست آمده. از این سیستم شرکت های مثل نورتون - آدوب و خیلی ها استفاده میکنن اما باز هم راه دور زدن داره. من خودم یکی دارم می نویسم که خوبه و امنیت برام فراهم میکنه.اون راههای دورو هم میشه گرفت اما باز راههایی هستن که نمیشه کاریش کرد و واسه اونا باید از بمب ساعتی استفاده کنی که هیچ راه دور زدنی نداره.اگه خواستین بگین که راجع به بمب ساعتی توضیح بدم. یه پیام خصوصی بدین اگه خواستین بدونین چیه.

morrning
شنبه 06 شهریور 1389, 10:27 صبح
سلام كتابي است كه به ما ساخت قفل سخت افزاري را آموزش بدهد

شما میتونی یه میکرو کنترلر رو انتخاب کنی و ذر بارش تحقیق کنی البته شرکت هایی هم هستن که از این قفل ها ارائه میدن

farhadsoft
یک شنبه 01 آبان 1390, 15:27 عصر
بهترین راه اینه که
علاوه بر استفاده از آنتی دیباگرها از قفل سخت افزاری هم استفاده بشه و در قفل سخت افزاری مقادیری ذخیره بشه که در برنامه داره استفاده میشه

morrning
چهارشنبه 11 مرداد 1391, 17:40 عصر
سلام . ببخشید که آف تایپینگ بالا میارم . بنده کلی با قفل های سخت افزاری سروکله زدم این تایپینگ فکر کنم مال دو سال و نیم پیشه که بنده تازه داشتم روی این نوع قفل ها کار میکردم. برای اون دوستموم که راهنمایی خواسته بود (البته اگه این تایپینگ رو میخونه) عرض کنم اکثر قفل های سخت افزاری توی ایران داخلشون از یه میکروکنترلر AT MEGA 8 استفاده شده و توی ایران فقط یه کد داخلش ثبت میشه که موقع استارت کار (شروع بزنامه) اون کد با کد فعال سازی و سریال دریافتی از سیتم چک میشه و درستی یا نادرستی رابطه از پیش تعریف شده ای که بین این اعداد هست باعث فعال سازی یا عدم فعال سازی نرم افزار میشه.
برنامه روی این نوع میکرو کنترلر ها در نهایت در قالب یک فایل هگز به میکرو تزریق میشود (در اصطلاح میکرو رو پروگرام میکنیم) و سپس فیوز بیت های rewrite هم غیر فعال میشن. چون دسترسی به صورس از طریق فایل هگز کار سختی هست پس کرک کردن نرم افزار سخت میشود ولی همیشه صد در صد نیست.
یکی از شرکت هایی که از قفل سخت افزاری به وفور استفاده میکنه شرکت طرقه نگار هست که برنامه هلو رو تولید میکنه که متاسفانه من خیلی ها رو دیدم که از نسخه کرک شده استفاده میکنن و کرکر ها قفل سخت افزاری رو دور زدن

alimanam
چهارشنبه 11 مرداد 1391, 18:28 عصر
با سلام

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

روشی که به نظرم میرسه ( البته ایده اصلی توسط استاد عزیزم که مدیر تالار امنیت و مهندسی معکوس هستش ) در اختیارم گذاشته شده , اینه که ما باید برنامه اصلی رو در ابتدا به صورت کد شده ( رمزنکاری شده ) دربیاریم , بعد این برنامه ( برنامه اصلی ) رو درون برنامه ثانویه که حکم راه انداز برنامه اصلی هست Merge کنیم . برای اجرای برنامه , بوسیله تکنیک رمزنگاری نامتقارن در ابتدا سریال فعال سازی برنامه از کاربر خواسته بشه ( در صورت استفاده از این تکنیک احتمال ساخت Keygen برای برنامه نزدیک به صفر هستش ولی خوب برادران چینی و روسی دیگه حرفی برای گفتن باقی نگذاشتن ! ) در صورت درست بودن سریال , برنامه در حافظه از حالت کد شده خارج بشه ( دی کد بشه ) و اجرا !!! توجه بشه که به هیچ عنوان برنامه نباید در هارد دیسک ذخیره بشه چون بالافاصله قابل Patch شدن هستش بزنم به تخته دات نت هم که دیگه " اپن سورسه " ! فقط یک بحث باقی میمونه که برادران کرکر یا یه کاربر سطح مبتدی مثل من با برنامه های مخصوص میتونن به راحتی رد برنامه رو در حافظه بزنن و بکشنش بیرون ( دامپ بشه ) ! , البته برای خارج نشدن برنامه از حافظه هم راههایی هست که نمیشه ازشون قافل شد ولی خوب دست بالا دست ....

توجه بشه که در این روش برنامه اصلی که مرج شده ( درون برنامه Loader ) در صورت ورود سریال فعال سازی # اشتباه # هم اجرا میشه اما خوب اطلاعاتش به درد کسی نمیخوره ! چون به درستی دی کد نمیشه ! در این روش به هیچ عنوان از توابع شرطی استفاده نمیشه چون به راحتی با 1 دقیقه وقت صرف کردن .....

من تقریباً نصف بیشتر این مراحلی که گفتم رو رفتم ( کدشدن برنامه & مرج کردن برنامه اصلی در برنامه لودر + دی کد شدن برنامه در صورت درست بودن سریال فعال سازی +اجراشدن برنامه اصلی در حافظه ) اما برای جلوگیری از دامپ شدن برنامه از حافظه باید بیشتر وقت بزارم . دوستان توجه کنن که هیچ روشی قابل اطمینان 100% نیست فقط میشه کرک شدن برنامه رو به عقب بیاندازیم البته مشهور بودن برنامه هم 100% موثر هستش چون تا برنامه مشهور نباشه ( تجاری نباشه ) کرکری سمتش نمیره !!!

موفق باشید./

Veteran
چهارشنبه 11 مرداد 1391, 21:23 عصر
در صورت درست بودن سریالIf Then
End If


از توابع شرطی استفاده نمیشه
پس جوری میخواین بررسی کنین :متفکر:

alimanam
پنج شنبه 12 مرداد 1391, 05:40 صبح
با سلام


پس جوری میخواین بررسی کنین


توجه بشه که در این روش برنامه اصلی که مرج شده ( درون برنامه Loader ) در صورت ورود سریال فعال سازی هم اجرا میشه اما خوب اطلاعاتش به درد کسی نمیخوره ! چون به درستی دی کد نمیشه ! در این روش به هیچ عنوان از توابع شرطی استفاده نمیشه چون به راحتی با 1 دقیقه وقت صرف کردن .....

جمله بالا رو با یک کلمه تغییر دوباره بخونین متوجه میشین ! ( در صورت ورود سریال فعال سازی اشتباه هم اجرا میشه .... )

ببینین , برنامه اصلی در ابتدا باید توسط الگوریتم رمزنگاری شده ایی که قبلاً باهاش رمز شده دی کد بشه , مسئله ایی که مهمه اینه که این دی کد شدن همیشگی هستش یعنی با هر سریالی که کاربر وارد کنه انجام میشه !!! حالا چه درست و صحیح باشه چه غلط ! اگر درست باشه عملیات دی کد شدن به درستی انجام میشه و برنامه به صورت آرایه ایی از بایت به تابع اجرا کننده , سپرده میشه که در حافظه اجراش کنه , اگرم هم سریال فعال سازی صحیح نباشه باز همه این کارها تکرار میشه ولی چیزی که اتفاق میفته اینه که اون آرایه چیز به درد بخوری نیست و فایل اجرا شده یک فایل اجرایی قابل استفاده برای کسی نیست . اگر دقت کرده باشین در این منطقی که توضیح دادم هیچ کجاش از توابع شرطی استفاده نمیشه .

موفق باشید./

morrning
جمعه 14 مهر 1391, 20:52 عصر
ببینین , برنامه اصلی در ابتدا باید توسط الگوریتم رمزنگاری شده ایی که قبلاً باهاش رمز شده دی کد بشه , مسئله ایی که مهمه اینه که این دی کد شدن همیشگی هستش یعنی با هر سریالی که کاربر وارد کنه انجام میشه !!! حالا چه درست و صحیح باشه چه غلط ! اگر درست باشه عملیات دی کد شدن به درستی انجام میشه و برنامه به صورت آرایه ایی از بایت به تابع اجرا کننده , سپرده میشه که در حافظه اجراش کنه , اگرم هم سریال فعال سازی صحیح نباشه باز همه این کارها تکرار میشه ولی چیزی که اتفاق میفته اینه که اون آرایه چیز به درد بخوری نیست و فایل اجرا شده یک فایل اجرایی قابل استفاده برای کسی نیست . اگر دقت کرده باشین در این منطقی که توضیح دادم هیچ کجاش از توابع شرطی استفاده نمیشه .

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

alimanam
جمعه 14 مهر 1391, 22:52 عصر
با سلام


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

عزیزم قرار نیست فایلی به دست شما برسه که بخواین اون رو منتشر کنین , فایل دی کد شده در حافظه اجرا میشه نه از روی هارد دیسک . کد فعال سازی متشکل میشه از سریال معمولی برنامه نویس + سریال سخت افزاری سیستم . یعنی این دی کد شدن فقط و فقط ( در صورت داشتن سریال فعال سازی معتبر ) روی یه سیستم ( با همان سریال سخت افزاری ) جواب میده . محدودیتی که هست اینه که برای هر سیستم کار کد شدن برنامه اصلی دستی انجام بگیره . البته من در Exe Protector ای که نوشتم این کار به صورت برنامه نویسی شده انجام میگیره . در ضمن برای محافظت از Dump شدن برنامه هم راه حل هایی در نظر گرفتم که به نظرم تا حد زیادی کار کرکر رو خیلی سخت میکنه .

موفق باشید./

morrning
دوشنبه 17 مهر 1391, 09:48 صبح
عزیزم قرار نیست فایلی به دست شما برسه که بخواین اون رو منتشر کنین , فایل دی کد شده در حافظه اجرا میشه نه از روی هارد دیسک .
برای برنامه هایی با حجم کم شاید جواب بده ولی اگه حجم برنامه زیاد بشه حافظه زیادی صرف نگه داری برنامه میشه که خودش محدودیت هایی ایجاد میکنه.مگر اینکه کلاس های حیاتی برنامه رو کد کنیم و در موقع استارت دیکد و به پروژه الصاق کنیم اونم به صورت ران تایم که خود اونم محدودیت هایی ایجاد میکنه.

alimanam
دوشنبه 17 مهر 1391, 11:27 صبح
با سلام


برای برنامه هایی با حجم کم شاید جواب بده ولی اگه حجم برنامه زیاد بشه حافظه زیادی صرف نگه داری برنامه میشه که خودش محدودیت هایی ایجاد میکنه.مگر اینکه کلاس های حیاتی برنامه رو کد کنیم و در موقع استارت دیکد و به پروژه الصاق کنیم اونم به صورت ران تایم که خود اونم محدودیت هایی ایجاد میکنه.

مگه قراره حجم فایل اجرایی چقدر بشه ؟ نهایتاً بیشتر از 5-4 مگابایت ! که این حجم هم به راحتی و بدون هیچگونه افت کیفیت در منابع سیستم قابل اجرا در حافظه است . شما 500 تا کلاس هم نوشته باشی در حجم فایل اجرایی نهایتاً یکی دو مگا بایت اثر میزاره که قابل چشم پوشی است . شما ( منظورم برنامه نویسه ) چون عادت کردین 1500 تا تصویر پس زمینه برای انواع فرمت هاتون قرار بدین به طبع حجم فایل اجرایی سر به فلک میزنه !!! دیده شده حجم فایل نهایی به 150 مگا بایت هم رسیده در حالی که بهترین و کاراترین برنامه هایی ( از هر دسته نرم افزاری ) که به زبان های دات نتی نوشته میشن نهایتاً حجم فایل اجرایی شون زیر 2 مگا بایته چون نه از کامپونت های تجاری خاصی استفاده میکنن نه زیبایی یه اثر هنری ( از نظر ظاهری برنامه ) رو برای برنامه در ذهن دارن .

موفق باشید./

morrning
دوشنبه 17 مهر 1391, 16:26 عصر
اتفاقا من خودم سعی میکنم همه چی رو به صورت ران تایم به پروژم اضافه کنم تا حجم فایل بیاد پایین ولی دوست عزیز گاهی وقتا نمیشه از کامپوننت های تجاری که به برنامه زیبایی میده صرف نظر کرد یا اینکه یه برنامه ای تحویل مشتری داد که مثل ویندوز 95 باشه . از بحث دور نشیم دیکد کردن برنامه در حافظه به نظرم زیاد امن نیست چون میشه با اسکن پردازش های سی پی یو و کپی برداری از رم روی هارد میشه یه فایل HEX یا باینری از برنامه به دست اورد . این مورد رو روی کامپیوتر امتحان نکردم ولی روی میکروکنترلر های AVR تست کردم و فایل باینری رو روی یه میکرو دیگه تست کردم که کاملا جواب داد.

alimanam
دوشنبه 17 مهر 1391, 18:16 عصر
با سلامی دوباره !


اتفاقا من خودم سعی میکنم همه چی رو به صورت ران تایم به پروژم اضافه کنم تا حجم فایل بیاد پایین ولی دوست عزیز گاهی وقتا نمیشه از کامپوننت های تجاری که به برنامه زیبایی میده صرف نظر کرد یا اینکه یه برنامه ای تحویل مشتری داد که مثل ویندوز 95 باشه .

عزیز من که نمیگم استفاده نکن !!! اگه منظورتون از زیبایی استفاده از کامپونت های تلریک , یا DevExpress یا دات نت بار هست که در اکثر مواقع این کامپونت ها اثر زیادی روی فایل اجرایی از نظر حجم نمیزارن چون به صورت DLL مجزا هستن و کنار فایل اجرایی .


از بحث دور نشیم دیکد کردن برنامه در حافظه به نظرم زیاد امن نیست چون میشه با اسکن پردازش های سی پی یو و کپی برداری از رم روی هارد میشه یه فایل HEX یا باینری از برنامه به دست اورد . این مورد رو روی کامپیوتر امتحان نکردم ولی روی میکروکنترلر های AVR تست کردم و فایل باینری رو روی یه میکرو دیگه تست کردم که کاملا جواب داد.

خوب قرار نیست که بشه از روی حافظه کپی برداری بشه . من در پست قبلی هم عرض کردم میشه کاری کرد که عمل دامپ شدن بسیار سخت بشه و من این کار رو کردم جوری که نشه از حافظه برنامه رو بیرون کشید و ذخیره کرد .

موفق باشید./

morrning
سه شنبه 25 مهر 1391, 19:04 عصر
قضیه جالب شد میشه درباره کد کردن برنامه توی حافظه کمی بیشتر توضیح بدید. حس میکنم باید روش خوبی باشه!

alimanam
یک شنبه 21 آبان 1391, 23:24 عصر
با سلام


قضیه جالب شد میشه درباره کد کردن برنامه توی حافظه کمی بیشتر توضیح بدید. حس میکنم باید روش خوبی باشه!

جالبی اش که جالبه :) طبق الگوریتم که در پست های قبل تقریباً توضیح دادم من یک پروتکتور جالب نوشتم که کار برنامه نویسی اش تقریباً تموم شده ( حدود 90% ) برای دمو میتونین این فایل تصویری رو نگاه کنین تا بعداً که منتشرش کنم .

لازم به یادآوریه که در این روش تقریباً نفوذ به برنامه تا قبل از دادن گذرواژه به مشتری تقریباً نزدیک به صفر هستش .

دانلود دمو (https://lh.rs/dVcrVUbhULnK) ( حدود 600 کیلو بایت )

موفق باشید./