PDA

View Full Version : سوال: چه کاری انجام دهیم با برنامه هایمان کرک نشوند ؟



aradrobo
شنبه 21 مرداد 1391, 19:08 عصر
سلام
وقتی برنامه ای را با سی شارپ می سازیم . یک فایل خروجی .exe به ما می دهد . این فایل خیلی ضعیف هستش و راحت می توان به وسیله یک سری برنامه ها به سورس برنامه دسترسی پیدا کرد .

یک سری برنامه های تبدیلی هم وجود دارند که از فایل ما محافظت می کنند .
من از یک نمونه از این برنامه ها استفاده می کنم . ولی به وسیله آن هم ، باز افرادی هستند که می توانند برنامه را کرک کنند و به سورس برنامه دسترسی داشته باشند .

حال بهترین برنامه که به هیچ وجه نشود آن را کرک کرد چیست ؟

با تشکر از شرکت در پاسخگویی تان

h_r_sh
شنبه 21 مرداد 1391, 20:53 عصر
به هر حال، نرم افزاری که من و شما درست می کنیم، با هر میزان امنیت، از مایکروسافت قوی تر نمی شه. مثل ویندوز و همین Visual Studio که خیلی از ما به صورت کرک شده استفاده می کنیم. ولی راه هایی هست که کرک شدن برنامه رو کمی سخت تر می کنه. مثل این:
http://www.eziriz.com/

aradrobo
شنبه 21 مرداد 1391, 21:35 عصر
به هر حال، نرم افزاری که من و شما درست می کنیم، با هر میزان امنیت، از مایکروسافت قوی تر نمی شه. مثل ویندوز و همین Visual Studio که خیلی از ما به صورت کرک شده استفاده می کنیم. ولی راه هایی هست که کرک شدن برنامه رو کمی سخت تر می کنه. مثل این:
http://www.eziriz.com/

من از .NET Reactor استفاده می کنم . ولی باز هم کرک می شود .

Y_Safaiee
شنبه 21 مرداد 1391, 21:52 عصر
سلام دوست من

راههای بسیار زیادی وجود داره,بهترین راه ها از نظر من :
1.استفاده از قفلهای سخت افزاری,کمترین هک و کرک شدن در این قطعات رویت شده و در حال حاضر امن ترین شیوست.
2.استفاده از نرم افزارهای قفل گذار یا محافظ
3.پاس دادن روال ها به هم(یعنی مثلا نیایم کد اضافه کردنو رویداد کلیک باتون بزاریم بلکه اونو به روالی پاس و باز اون روالو به یکی دیگه پاس بدیم):شما 1 جزوه 30 ای رو حوصله دارید بخونین اما یک کتاب 2000صفحه ای که برای دیدن هر مطلبش باید تو این دو هزار صفحه بگردید رو ندارید.
4.تا حد امکان Embedded کردن کدها و آپشن ها:هرچه قدر از کمپوننت و عوامل خارجی استفاده کنید و کدهاتون خارجی باشه امکان هکش زیاده
5.درسته برنامه نویس باید برنامه رو بهینه و قابل درک برای سایرین بنویسه اما در نرم افزارهای تجاری این امر اصلا توصیه نمیشه پس برنامتونو تا جایی که میشه جوری بنویسید که فقط خودتون بفهمین چی نوشتین,من خودم داکیومنت برای خودم مینویسم تا در پشتیبانی بدونم چیکار کردم.
6.خیلی دوستانو دیدم راحت رمز یا آیتمها رو داخل ریجستری یا کنار برنامه میزارن,این راه اشتباه ترین راه ممکنه چون به راحتی قابل کشفه.
7.مواظب SQL Injection باشید کدهای اس کیو التون رو جوری ننویسین که با نوشتن یک or یا or 1=1 برنامه هک شه.

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

موفق باشی
بایت بایت

Sajjad.Aghapour
یک شنبه 22 مرداد 1391, 10:53 صبح
حال بهترین برنامه که به هیچ وجه نشود آن را کرک کرد چیست ؟


برای این کار بهتره برنامه نویسی نکنید...

aradrobo
یک شنبه 22 مرداد 1391, 13:41 عصر
برای این کار بهتره برنامه نویسی نکنید...

این که جواب قانع کننده ای نشد . برنامه نویسی نکنیم ؟

Sajjad.Aghapour
یک شنبه 22 مرداد 1391, 13:57 عصر
دوست عزیز ابزارهای خیلی زیادی برای Obfuscate کردن نرم افزارهای تولید شده با NET. وجود داره یا هر نرم افزار دیگه. خیلی از اونها به شدت قوی کار میکنند. اما کرکرها حداقل یک قدم از شما جلوتر هستن. این مسئله همیشه بوده و همیشه هم خواهد بود.

دنبال این باشید که از فایل هاتون محافظت کنید با همون NET Reactor. یا هر نرم افزار دیگه ولی دنبال این نباشید که صد در صد از برنامه محافظت کنید. متاسفانه خیلی از نرم افزارهایی که تابه حال نوشته شده اند حتی در همین سطح هم روشون کار نشده....



این که جواب قانع کننده ای نشد . برنامه نویسی نکنیم ؟
من عرضم به اون جمله شما بود که :


حال بهترین برنامه که به هیچ وجه نشود آن را کرک کرد چیست ؟
این جواب من کاملا قانع کننده است. مطمئن باشید/

موفق باشید

tooraj_azizi_1035
یک شنبه 22 مرداد 1391, 14:08 عصر
شما فرض کنید ما یک فایل exe داریم و توسط یک الگوریتم رمز بسیار پیچیده همه محتویات آن را رمز کرده ایم و در دیسک ذخیره کرده ام.
مثلاً هر بایت از این فایل exe را گرفته و به چندین کاراکتر تبدیل کرده ایم.
یک برنامه Startup هم داریم که وقتی کاربر آن را اجرا می کند این برنامه آن فایل کد شده را در حافظه دیکد می کند و اجرا می کند چطور می شود چنین برنامه ای را هک کرد؟ اگر می گوئید می شود یک مثال عملی بزنید.
چنین فایل رمز شده ای را کدام نرم افزار می تواند هک کند و چطور؟ در حالی که هیچ اطلاعی از الگوریتم رمز ندارد و الگوریتم مورد نظر هم الگوریتم مشهوری مانند MD5 و از این دست نیز نمی باشد بلکه کاملاً ساخته خود شخص برنامه نویس هست.

مهرداد صفا
یک شنبه 22 مرداد 1391, 15:30 عصر
شما فرض کنید ما یک فایل exe داریم و توسط یک الگوریتم رمز بسیار پیچیده همه محتویات آن را رمز کرده ایم و در دیسک ذخیره کرده ام.
مثلاً هر بایت از این فایل exe را گرفته و به چندین کاراکتر تبدیل کرده ایم.
یک برنامه Startup هم داریم که وقتی کاربر آن را اجرا می کند این برنامه آن فایل کد شده را در حافظه دیکد می کند و اجرا می کند چطور می شود چنین برنامه ای را هک کرد؟ اگر می گوئید می شود یک مثال عملی بزنید.
چنین فایل رمز شده ای را کدام نرم افزار می تواند هک کند و چطور؟ در حالی که هیچ اطلاعی از الگوریتم رمز ندارد و الگوریتم مورد نظر هم الگوریتم مشهوری مانند MD5 و از این دست نیز نمی باشد بلکه کاملاً ساخته خود شخص برنامه نویس هست.
سلام
اگر چه من کرکر نیستم و تجربه عملی در این زمینه ندارم اما به نظر من موردی که شما مطرحی کردید شاید کرک کردن برنامه را مشکل کند اما غیر ممکن نمیکند.
وقتی کدگذاریهای پیچیده ای مثل پسوردهای برنامه های مختلف از قبیل windows xp,microsoft accsess ... کشف میشوند احتمال کشف شدن کدگذاریهای حتی پیچیده تر هم وجود دارد علاوه بر این هر جا که برنامه دوم برنامه را دیکد میکند کرکر همانجا منتظر خروجی مینشیند و اینکه کرکر ممکن است با debug کردن برنامه دوم در هنگام دیکدینگ الگوریتم را کشف کند. در واقع در اینجا کار کرکر دو مرحله دارد که اول باید برنامه دیکدر را کرک کند و بعد برنامه اصلی.
به هر حال اگر کرکر فکر میکند هیچ چیز غیر ممکن نیست برنامه نویس هم باید همین فکر را کند و به فکر راه مطمئن باشد. فقط اینکه کرکر با آزمون خطا چیزی از دست نمیدهد اما برنامه نویس ممکن است.

fjm11100
یک شنبه 22 مرداد 1391, 16:16 عصر
راه های فنی زیادی هست برای سخت کردن کار اما به هیچ عنوان نمیتونه جلوی کار کرک برنامه را بگیره. اما شما با سیاستهایی میتونی تا حدی با کرک شدن برنامه ات مقابله کنی.
1- از چند روتین چک کردن بطور موازی و در جاهای مختلف استفاده کن و در این یک مورد اتفاقا اصول برنامه نویسی را زیر پا بگذار و یک تابع واحد ننویس که صداش بزنی کد چک کردن را همان جا کپی کن.
2- وقتی برنامه ات آماده کامپایل بود یک نسخه جدا تهیه کن و با find & replace اسم تمام چیزها را بهم ریخته و حتی عمدا اشتباه بزار!!!(مثلا اسم متد print را بزار getkeycode و از این دست کارها!!!) اینطوری بیچاره کرکر میره سر کار اساسی
3- بهتره یک نرم افزار را یکجا release نکنی و بعضی از ویژگی ها را بزاری واسه نسخه بعد! اینزوری تو از مشتری هات جلوتری و میتونی تند تند نسخه بدی و کرکرها به پای تو نرسند(این سیاست شرکتهای خارجی است اینطوری هم رقبا و کپی کارها و کرکرها جا میمونند و هم نرم افزار شما بدلیل افزایش سریع نسخه و انتشار مرتب معروفتر میشه!!!)

ali_habibi1384
یک شنبه 22 مرداد 1391, 16:40 عصر
هر برنامه اي كه نوشته ميشه و قابليت كرك شدن داره حالا شما از هر سخت افزار و نرم افزاري يا اسپاگيتي كد هم كار كرده باشي.سخت افزارها و نرم افزارهايي كه براي pack كردن فايلتون وجود داره فقط باعث ميشه راه رو براي طرف سخت تر كنه همين.
پس به اين نتيجه ميرسيم اگر ميخوايد كرك نشه برنامه ننويسيد!
براي كسب اطلاعات بيشتر پيشنهاد ميكنم تاپيكتونو در بخش مهندسي معكوس مطرح كنيد.

syntiberium
یک شنبه 22 مرداد 1391, 16:52 عصر
اگر نرم افزاری بسازید که در آن کاربر را به طور منطقی وادار به اتصال به اینترنت کنید و برای نرم افزارتان سرور اینترنتی داشته باشید تا نرم افزار را از نظر کرک شده بودن چک کند اونوقت احتمال کرک شدنش خیلی کمه و باید در پایان برنامه کد ها رو پیچیده کنید مثلا ساده ترین کار عوض کردن نام متغییر هاست چون نامشون قابل مشاهده هست . البته وادار کردن کاربر به اتصال به اینترنت می تونه از محبوبیت برنامه کم کنه .

aradrobo
یک شنبه 22 مرداد 1391, 19:16 عصر
لطفاً بیشتر راهنمایی کنید . من نمی خواهم مقاله ای در این زمینه بنویسم . من می خواهم از روش هایی که می گویید در برنامه های خودم استفاده کنم . لطفاً بیشتر توضیح دهید

Y_Safaiee
یک شنبه 22 مرداد 1391, 21:40 عصر
با سلام مجدد

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

موفق باشین
بایت بایت

fjm11100
یک شنبه 22 مرداد 1391, 23:34 عصر
یونس عزیز راجع به تشکر که باید عرض کنم متاسفانه نه توی این سایت که توی هیچ سایت فارسی دیگه ای هم ظاهرا رسم نیست!!! ما که عادت داریم شما هم کم کم عادت می کنی. اینکه حرفهای شما مجدد تکرار شده بخاطر این بوده که شما حق مطلب را ادا کردی و بقیه هم نظرات خودشان را داده اند و خب این همپوشانی فقط کامل بودن کامنت شما را نشان می دهد و فکر نمیکنم ناراحت کننده باشد.

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

aradrobo
پنج شنبه 26 مرداد 1391, 20:26 عصر
دوستان عزیز . من همه ی روش هایی که شما گفتید را انجام دادم . ولی وقتی برنامه را به یکی از دوستانم می دهم . وی سورس برنامه را تا حدی بدست می آورد . و می تواند برنامه را کرک کند .

لطفاً راهکارهای جدیدی بدهید .

ali_habibi1384
جمعه 27 مرداد 1391, 10:17 صبح
اگر نرم افزاری بسازید که در آن کاربر را به طور منطقی وادار به اتصال به اینترنت کنید و برای نرم افزارتان سرور اینترنتی داشته باشید تا نرم افزار را از نظر کرک شده بودن چک کند اونوقت احتمال کرک شدنش خیلی کمه و باید در پایان برنامه کد ها رو پیچیده کنید مثلا ساده ترین کار عوض کردن نام متغییر هاست چون نامشون قابل مشاهده هست . البته وادار کردن کاربر به اتصال به اینترنت می تونه از محبوبیت برنامه کم کنه .
ميشه بگي چطور با اتصال به اينترنت جلوي كرك شدن گرفته ميشه؟
فرض كن من يه كركر ، قسمتي كه برنامه شما ميخواد به اينترنت وصل بشه رو كامنت ميكنم و قسمت ديگه اي كه مجوز ورود رو به برنامه رو از اينترنت ميگيرم داده جعلي ميذارم يا شرطش رو nop ميكنم. خب حالا برنامه شما كرك شده.

لطفاً بیشتر راهنمایی کنید . من نمی خواهم مقاله ای در این زمینه بنویسم . من می خواهم از روش هایی که می گویید در برنامه های خودم استفاده کنم . لطفاً بیشتر توضیح دهید
دوست عزيزم آقاي aradrobo تاپيكتونو در بخش مهندسي معكوس مطرح كنيد نتايج جالبي خواهيد گرفت.
درضمن استفاده از قفل سخت افزاري امنيت برنامه شما رو تامين نميكنه فقط برنامه شما رو از قراردادن روي اينترنت براي حمله بيشتر كركر ها محافظت ميكنه. والا كسي كه قفل سخت افزاري رو داره يعني كل برنامه رو داره.

fjm11100
جمعه 27 مرداد 1391, 14:41 عصر
بدست آوردن سورس مهم نیست مهم اینه که بتونه راحت از سورس سر دربیاره. مثلا اگر نام تابع بجای GetSerialNumber بشه textbox1_click خب طرف را تا حدی میزاره سر کار
ضمنا شما میتونی کدهای c# را runtime اجرا کنی یعنی دقیق کدت را بصورت string دریافت کنی و اجراش کنی. حالا تصور کن شما کل تابع چک قفل را بصورت string بنویسی تا در زمان اجرا کامپایل و اجرا شوند. خب تا اینجا که هنری نکردیم تازه کد را مستقیم گذاشتیم جلوی چشم طرف. اما اگر همین رشته را که کد شماست encrypt کنی چی؟ اون وقت مثل دستور if شما میشه a342#4!@ که طرف کلا هنگ میکنه. البته این راه هم بطور قاطعانه جلوگیری نمیکنه چون اونوقت طرف میاد روتین encryption و decryption را بررسی میکنه و کلیدها را بدست میاره. حالا اگر کلیدها را توی قفل سخت افزاری بزاری باز کار یارو را سخت تر میکنی. آخرش اینه که برنامه ها همشون کرک میشن ولی شما با سخت تر کردن کار خوندن سورس و کرک را مشقت آور می کنی

danialafshari
جمعه 27 مرداد 1391, 15:18 عصر
دوستان کامل و واضح این موضوع رو شرح دادن من فقط یک پروتکتور قوی معرفی می کنم که خودم ازش استفاده می کنم. The Enigma Protector

aradrobo
جمعه 17 شهریور 1391, 18:03 عصر
بدست آوردن سورس مهم نیست مهم اینه که بتونه راحت از سورس سر دربیاره. مثلا اگر نام تابع بجای GetSerialNumber بشه textbox1_click خب طرف را تا حدی میزاره سر کار
ضمنا شما میتونی کدهای c# را runtime اجرا کنی یعنی دقیق کدت را بصورت string دریافت کنی و اجراش کنی. حالا تصور کن شما کل تابع چک قفل را بصورت string بنویسی تا در زمان اجرا کامپایل و اجرا شوند. خب تا اینجا که هنری نکردیم تازه کد را مستقیم گذاشتیم جلوی چشم طرف. اما اگر همین رشته را که کد شماست encrypt کنی چی؟ اون وقت مثل دستور if شما میشه a342#4!@ که طرف کلا هنگ میکنه. البته این راه هم بطور قاطعانه جلوگیری نمیکنه چون اونوقت طرف میاد روتین encryption و decryption را بررسی میکنه و کلیدها را بدست میاره. حالا اگر کلیدها را توی قفل سخت افزاری بزاری باز کار یارو را سخت تر میکنی. آخرش اینه که برنامه ها همشون کرک میشن ولی شما با سخت تر کردن کار خوندن سورس و کرک را مشقت آور می کنی

خیلی جالب توضیح دادید . چگونه می تواند دستور if را به همین صورت که گفتین تبدیل کنم ؟

joker
جمعه 17 شهریور 1391, 20:05 عصر
شما بينهايت هم كه فايل را رمزنگاري كنيد ، بايت به بايت ، آخرش گير يه چيزي هستين اونم اينكه برنامه شما براي اجرا شدن بايد به زباني تبديل بشه كه CPU هم بفهمه ، در اين نقطه ميشه هركاري با نرم افزار كرد....


در همين سايت برنامه نويس بخشي هست براي امنيت نرم افزارها ( http://barnamenevis.org/forumdisplay.php?66 ) پيشنهاد ميكنم همه مطالبش را مطالعه كنيد ، وقتي علت را بشناسيد‌ ،راحت تر ميتونيد برنامه هاي امن تري بنويسيد





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

ehsan7007
جمعه 17 شهریور 1391, 22:35 عصر
بهترین راه استفاده ی درسته!!

اگه ایرانم کپی رایت اجرا می شد ...
خوب معلومه دیگه ، نرم افزار ها دو برابر کرک می شدن!!!!!! :لبخند:

aradrobo
چهارشنبه 24 آبان 1391, 20:04 عصر
بهترین راه استفاده ی درسته!!

اگه ایرانم کپی رایت اجرا می شد ...
خوب معلومه دیگه ، نرم افزار ها دو برابر کرک می شدن!!!!!! :لبخند:

لطفاً به شوخی نگیرید . من هرکاری می کنم . باز برنامه هارو میشه کرکش کرد . یکی راهنمایی بکنه لطفاً