# Native Code > برنامه نویسی در Delphi > مباحث عمومی دلفی و پاسکال >  كد كردن Exe

## hamidprogramer

سلام من مي خوام بدونم چه جوري ميشه فايل Exe برنامه خودم رو كد كنم تا بوسيله برنامه هاي  Resourse باز نشه يا اگر هم باز شد اطلاعات كد شده رو نشون بده البته خودم از UPX استفاده مي كنم براي فشرده سازي مي خوام بدونم كافي ست يا نه ؟ اگر راهنماييم كنين ممنون ميشم.

----------


## Valadi

یک پروتکتور هست که هکرها از اسمش شوکه می شن و خیلی قویه - نامش دنیدا است 
خواستی من نسخه فول و ریجستر شده این نرم افزار و بقیه محصولات این شرکت (نرم افزار و کامپونت ) pm بده
http://www.oreans.com

----------


## Valadi

یک پروتکتور هست که هکرها از اسمش شوکه می شن و خیلی قویه - نامش دنیدا است 
خواستی من نسخه فول و ریجستر شده این نرم افزار و بقیه محصولات این شرکت (نرم افزار و کامپونت ) pm بده
http://www.oreans.com

----------


## bishtar

> یک پروتکتور هست که هکرها از اسمش شوکه می شن و خیلی قویه - نامش دنیدا است 
> خواستی من نسخه فول و ریجستر شده این نرم افزار و بقیه محصولات این شرکت (نرم افزار و کامپونت ) pm بده
> http://www.oreans.com


نرم افزار های بسیار خوبی از این شرکت موجوده در حد ساده تا متوسط از کرک نرم افزار جلوگیری می کنه ولی برای کرک پیشرفته خیر . چون خود نرم افزار *WinLicense  که گل سر سبد محصولات این شرکت هست کرک شده و روش کرک و آموزش اونم هست.
در جمع باید کد نویسی و روش برنامه نویسی رو  اصولی انجام داد که  کرک مشکل بشه و تا حد زیاد اعصاب خورد کن و وقت گیر .
کاری که این نرم افزار و موارد مشابه انجام می دن در حد 4-10 مرحله محافظت هست که اولین کار و کمی وقت گیر برای کرک dump  نرم افزار از حافظه هست و بعد از اون همه چیز روتین وار حل میشه.
کلا غیر قابل کرک وجود نداره فقط سطح ایمنی ها با هم فرق می کنه.

*

----------


## hamidprogramer

شما چيز بهتري سراغ داريد؟ معرفي نماييد.

----------


## samprp

> کلا غیر قابل کرک وجود نداره فقط سطح ایمنی ها با هم فرق می کنه


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

----------


## bishtar

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


مقالات زیادی در این باره هست که تقریبا همگی از نظر اصول مشابه هستند که تقریبا تکنینکهای ضد کرک رو توضیح می دن .
بخش مهم کار ابتکار و خلاقیت خود شماست که چطوری کد نویسی کنید.
بعنوان مثال یه نمونه رجیستر کردن نرم افزار بود که برای من خیلی جالب بود .
آدرس مقاله یادم نیست ولی روش کار جالب بود بخاطر استفاده از  *Process injection* 
بجای اینکه نرم افزار مستقیما به رجیستری مراجعه کنه و در کلید مربوطه مشخصات کاربر را بنویسد  از  *Windows              Explorer* و *IE* استفاده کرده بود و همینطور برای کنترل مشخصات و خواندن مقادیر هم از *Windows              Explorer* و *IE*  استفاده کرده بود. !!!
در ضمن اینکه برای عملیات ثبت نرم افزار : در رجیستری بیش از هزار کلید خوانده یا نوشته می شد. که اینکار هم با استفاده از 4-5 تا از توابع کتابخانه ویندوز انجام می گرفت که بعضی عملیات نرمال ویندوز را انجام می دادند که فهمیدن اینکه واقعا چه اتفاقی در حال افتادن هست  و یافتن کلیدهای صحیح و محل ثبت نرم افزار در رجیستری بسیار دشوار شده بود.
کلیدها در خانه هایی از رجیستری نوشته می شد که شامل ده ها داده بود و بسیار مراجعه داشت مثل کلید :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer
که یکی از بهترین محلها برای ثبت مشخصات هست

کار مقایسه صحت مشخصات ثبت نام هم فقط از طریق اعمال یک تابع ریاضی روی کد عددی رشته های کاراکتری ورودی بود نه مقایسه رشته های کاراکتری . 
بنظر کار ردیابی و کنترل برای کرک نرم افزار نسبتا دشوار شده بود و نمونه  *Crackme ( پک نشده بدون Anti Debuger Tricks)* را به این سادگی ها نمی شد کرک کرد.
البته چندتا تکنینک دیگه هم داشت که یادم نیست بهر حال تا سه ماه کسی نتونسته بود اونو کرک کنه که رکورد بسیار خوبی بود.
(شرح کامل این crackme  رو فکر کنم تو یه سایت چینی که مخصوص کرکرها ست دیدم)
البته این روش نسبتا قدیمی هست و روشهای جدید دیگری هم هست با کمی جستجو می تونین پیدا کنین و در حمع ترکیب چند روش بهترین نتیجه را خواهد داد.

----------


## samprp

ممنون بابت توضیحاتتون.
منم یه چیزایی در این مورد دیدم .
مثلا اینکه با درهم ریخته کردن متن کد امنیت اونو بالا ببرید (Wikipedia).
و یا استفاده نکردن از متغیر هایی با نام های تابلو که هر کسی با نگاه به هش می تونه بفهمه چیه .

ولی به نظر شما چه طوری باید متنای نوشته شده داخ فایل اجرایی رو پنهان کرد
یا کاری کرد که کسی نتونه بهشون دسترسی داشته باشه ؟؟
آیا این برنامه هایی مثل UPX کارشون کامله؟ یعنی خروجیشون ممکنه دیکد بشه دوباره ؟

ممنون می شم راهنمایی کنید

----------


## diamond_sh

> سلام ، خسته نباشید
> من برای realese برنامه هام مدتی بود که دنبال روش هایی برای بالا بردن امنیت exe ها بودم. . 
> سعی کردم نتیجه کارم رو به طور خلاصه تو چند صفحه بنویسم تا بقیه هم بتونند استفاده کنند.


https://barnamenevis.org/showthread.php?t=96059




> یک پروتکتور هست که هکرها از اسمش شوکه می شن و خیلی قویه - نامش دنیدا است 
> خواستی من نسخه فول و ریجستر شده این نرم افزار و بقیه محصولات این شرکت (نرم افزار و کامپونت ) pm بده


منظورتون themida ست؟ خیلی عالیه

----------


## Nima NT

من Exe Cryptor رو توصیه میکنم ، هم راحته ( دردسر نداره ) ، هم خیلی قویه.

----------


## hamidprogramer

> من Exe Cryptor رو توصیه میکنم ، هم راحته ( دردسر نداره ) ، هم خیلی قویه.


اگر ممكنه يه نسخه اين برنامه رو ارائه كنين تا يه تستي بگيريم.

----------


## Nima NT

ارائه برنامه قفل شکسته یا کرک شده ، چه ایرانی و چه خارجی در این فروم ممنوع هستش، شرمنده ام.
میتونید تو سایت Rapidshare دنبالش بگردی.

----------


## bishtar

> ممنون بابت توضیحاتتون.
> منم یه چیزایی در این مورد دیدم .
> مثلا اینکه با درهم ریخته کردن متن کد امنیت اونو بالا ببرید (Wikipedia).
> و یا استفاده نکردن از متغیر هایی با نام های تابلو که هر کسی با نگاه به هش می تونه بفهمه چیه .
> 
> ولی به نظر شما چه طوری باید متنای نوشته شده داخ فایل اجرایی رو پنهان کرد
> یا کاری کرد که کسی نتونه بهشون دسترسی داشته باشه ؟؟
> آیا این برنامه هایی مثل UPX کارشون کامله؟ یعنی خروجیشون ممکنه دیکد بشه دوباره ؟
> 
> ممنون می شم راهنمایی کنید


یک راه بسیار ساده و تا حدی آبکی بصورت زیر هست :
1- رشته کارکتری خود را تبدیل به رشته عددی کنید.
2- رشته عددی را بصورت متغیر گلوبال در برنامه معرفی کنید
2- یک تایع عمومی برای تبدیل رشته عددی به رشته کاراکتری کار تبدیل تمام رشته ها را انجام
خواهد داد مثل زیر :
که شامل رشته کارکتری تبدیل شده به رشته عددی هست
my_PassWord:array[0..31]of integer=(66,52,53,69,54,65,66,49,69,51,55,51,49,50  ,68,51,50,48,55,52,50,70,55);

این تابع رشته عددی ورودی را تبدیل به رشته کارکتری می کند 
function mypass(input_array:array of integer):string;
var s:string ;
j:integer;
  begin
    s:='';
    for j:=0 to Length(input_array)-1 do
    begin
    s:=s+chr(input_array[j]);
    end;
    result:=s;
  end;

در اینحالت داخل برنامه (resource)  شما هیچ وقت رشته کاراکتری یافت نخواهد شد. و کار کرکر کمی مشکل خواهد شد.
و در اغلب مواقع کرکر به اشتباه تابع دیکود کننده رشته عددی به رشته کارکتری را کرک می کند که موجب تخریب برنامه خواهد شد چون این تابع کار دیکود تمام جملات و توضیحات شما در برنامه را انجام می هد و کمتر به فکر این می افتد که متغیرهای گلوبال(یا محلی) کجا هستند و چطوری فراخوانی می شوند.
البته اضافه کردن کمی خلاقیت به این روش می تواند کابوس بسیار بدی برای کرکر باشد.

----------


## as13851365

*در کل اگه می خواهید برنامه شما هرگز کرک نشه بهترین راه این است که هرگز برنامه ننویسید!!!*

از bishtar جان هم بابت توضیحاتشان ممنون ولی یه سوال !

من قبلا در بخش کرک برنامه یه مدتی فعالیت کردم ولی نتونستم یه چیزی رو درست و حسابی بفهمم و او این است که در بحث کرک توصیه می شه که هرگز از دستور if برای مقایسه کردن استفاده نکنید !
خوب حالا از چی استفاده کنیم ؟
من دستوارت اسمبلی رو هم کمی دستکاری کردم ولی نتونستم چیزی پیدا کنم !
در کل چطور می شه فهمید که دو مقدار X و y یکسان نیست! ( بدون استفاده از مقایسه !!! )
___________

برای دوستانی هم که می خوان برنامه هاشون کمی امنیت داشته باشه یه توصیه هایی می کنم !
*از قفل برای برنامه هاتون استفاده کنید!
هرگز از یک قفل استفاده نکنید ! ( تعداد قفل ها رو زیاد کنید )
هرگز برای چک کردن قفل برنامه هرگز از یک تابع استفاده نکنید! ( هر جا که نیاز داشتید قفل را بررسی کنید تمام دستورات را دوباره بنویسید = در غیر این صورت کرکر فقط تابع رو کرک می کنه و برنامه سه سوته شوت می شه )
در آخر اگر وقت داشتید کمی هم در قسمت های مربوط به کرک و امنیت برنامه فعالیت کنید تا بیشتر روشن بشید )*

----------


## bishtar

> *در کل اگه می خواهید برنامه شما هرگز کرک نشه بهترین راه این است که هرگز برنامه ننویسید!!!*
> 
> از bishtar جان هم بابت توضیحاتشان ممنون ولی یه سوال !
> 
> من قبلا در بخش کرک برنامه یه مدتی فعالیت کردم ولی نتونستم یه چیزی رو درست و حسابی بفهمم و او این است که در بحث کرک توصیه می شه که هرگز از دستور if برای مقایسه کردن استفاده نکنید !
> خوب حالا از چی استفاده کنیم ؟
> من دستوارت اسمبلی رو هم کمی دستکاری کردم ولی نتونستم چیزی پیدا کنم !
> در کل چطور می شه فهمید که دو مقدار X و y یکسان نیست! ( بدون استفاده از مقایسه !!! )


راه حل ساده بجای دستور if واسه مقایسه ار دستور for  یا while یا try و ... استفاده کنید.(هر چند خود حلقه ها هم از if ساخته شده !!!)
خیلی راحت بجای مقایسه کاراکتری x و y  سایر مشخصات اونارو با یه حلقه مقایسه کنید.
مثلا  بصورت یه مقایسه خیلی سطحی :
for i:=0 to  abs(length(x)-lentgh(y)) do
begin
اجرای دستور نادرست بودن رشته ورودی
end;
خیلی راحت کمی هم از حلقه های تو در تو استفاده کنید تا مشکل تر بشه (از کلیه مشخصات مربوط به رشته های کاراکتری یا عددی در حلقه ها جهت مقایشه استفاده کنید).

----------


## Cave_Man

ولی همون تور که خودت هم گفتی در همون حلقه ها وقتی تبدیل به زبون ماشین میشه باز هم شکل if به خودش میگیره و راحت شناسایی میشه.

----------


## Nima NT

از این جور روش ها متاسفانه نمیتونه موثر واقع بشه ، این ها برای یه کراکر حرفه ای یه شوخی محسوب میشه.
بهتره یه جستجوئی در مورد Stolen Code انجام بدی ، این تکنیک یه جورائی دست برنامه نویس رو باز گذاشته و امنیت این روش رو به خلاقیت برنامه نویس مربوط میکنه.

----------


## samprp

> ولی همون تور که خودت هم گفتی در همون حلقه ها وقتی تبدیل به زبون ماشین میشه باز هم شکل if به خودش میگیره و راحت شناسایی میشه


آره درسته . فکر کنم این IF همون اول هم چک می کنه . حالا شاید repeat و until بهتر باشه .




> یه کراکر حرفه ای


خدا اون روز رو نیاره که یکیشون بخواد به برنامه های ما گیر بده.
 همون طور که دوستان گفتن این روش ها برا جوجه کرکراس . که هر کی نیاد از راه رسیده برنامه هامونو هک کنه . 
در مورد این Stolen code هم من زیاد دست گیرم نشد . اگه یه نیمچه مثالی بزنید جمع هم ممنون می شیم .
با تشکر

----------


## Nima NT

در تکنیک Stolen Code برنامه نویس میاد و یه سری از کد های برنامه رو در رم تصحیح میکنه ، برای مثال من برنامه ای دارم که یه تابع اون رو به شکل کد شده درون فایل خودم قرار دادم ، حالا هروقت به اون نیاز دارم اون رو در رم رمزگشایی میکنم و اجرا میکنم ، این تابع در فایل من وجود نداره و این یه نمونه از Stolen Code  هستش.

----------


## samprp

این کاری که شما می کنید یعنی از حالت رمز در می یارید طبیعتا اون یه رشتس و کامپایلم نشده .
چه طوری ممکنه تابعی که کامپایل نشده رو شما از یه استرینگ بخونید و بعد اجراش کنید ؟
:confused:

----------


## as13851365

> راه حل ساده بجای دستور if واسه مقایسه ار دستور for یا while یا try و ... استفاده کنید.(هر چند خود حلقه ها هم از if ساخته شده !!!)


این ها زیاد موثر نیستند !




> بهتره یه جستجوئی در مورد Stolen Code انجام بدی ، این تکنیک یه جورائی دست برنامه نویس رو باز گذاشته و امنیت این روش رو به خلاقیت برنامه نویس مربوط میکنه


اگه می شه یه توضیحی مقاله ای آموزشی و یا یه لینکی بزارید ممنون می شم




> در تکنیک Stolen Code برنامه نویس میاد و یه سری از کد های برنامه رو در رم تصحیح میکنه ، برای مثال من برنامه ای دارم که یه تابع اون رو به شکل کد شده درون فایل خودم قرار دادم ، حالا هروقت به اون نیاز دارم اون رو در رم رمزگشایی میکنم و اجرا میکنم ، این تابع در فایل من وجود نداره و این یه نمونه از Stolen Code هستش.


این کار خیلی خوبه ولی شما اگه می شه یه تابعی رو بذارید که دستوراتی رو که به صورت رشته است رو اجرا کنه ممنون می شم ! ( در برنامه نویسی تحت وب برای اجرای دستوراتی که به صورت رشته است از تابع EVEL استفاده می شه ! حالا در برنامه نویسی دلفی از چه تابعی استفاده می شه ؟ )

----------


## samprp

> در برنامه نویسی تحت وب برای اجرای دستوراتی که به صورت رشته است از تابع EVEL استفاده می شه ! حالا در برنامه نویسی دلفی از چه تابعی استفاده می شه ؟


آخه تو برنامه نویسی وب اون توابع سمت سرور اجرا می شن . اونجا هم که خوب کامپایرا همیشه هستند . مثله کوئری های اسکوئل که اونا هم چون سمت سرور اجرا می شن همیشه متنی هستند .

----------


## as13851365

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

----------


## samprp

> بحث من بیشتر سر توابع است مثلا یک تابع را بعد از این که کامپایل کردیم به صورت رشته ای ( حالا چه به صفر و یک باشد یا دستورات اسمبلی و یا هرچیز دیگری ) در برنامه قرار دهیم و هر کجا که خواستیم در رم لودش کنیم و مانند یک تابع باهاش کار کنیم !


خوب این که همون DLL می شه اونا که هم می شه دوباره مثه فایل اجرایی تغییر دادشون 
نباید کامپایل بشه . باید به صورت رشته بمونه . ولی راه حلش رو نمی دونم

----------


## hamidprogramer

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

----------


## as13851365

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


منظور شما از لینک دانلود برنامه چیه ؟
کدام برنامه رو می گید ؟

اگر می خواهید که در باره این جور مباحث چیزی پیدا کنید به بخش مربوط به کرک و امنیت برنامه مراجعه کنید !

----------


## samprp

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

نظرتون چیه ؟؟؟؟

----------


## Cave_Man

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

----------


## as13851365

منظور شما از رمز ها چیه ؟
یعنی تابع رو الگی درازش کنیم ؟
دستورات بیجایی رو در برنامه استفاده کنیم ؟
داده ها رو کد شده ذخیره کنیم ؟
____________________________

می شه کمی درباره الگوریتم رمزگزاری طولانی توضیح بدید ؟

----------


## samprp

> هر چه الگوریتم رمز گزاری طولانی تر باشه گشودن رمز اون هم مشکل تر خواهد بود.


یه جا یه IF نادرست بزاری اون وقت جناب کرکرکر بیاد اونو حذف کنه تمومه . 
فکر نکنم هیچ کی تا حالا MD5 رو شکسته باشه ولی برنامه هایی که از اون استفاده می شن کرک شدن .

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

----------


## Nima NT

دوست عزیز الگوریتم های رمزنگاری متقارن نظیر MD5 همگی شکسته شده اند تنها الگوریتم های امن ، سیستم های رمزنگاری غیر متقارن هستند که بر پایه دو مولفه Public Key و Private Key کار میکنند.
استفاده از الگوریتم شخصی برای تولید کد فعالسازی یا سریال ریسک بزرگی محسوب میشه.

----------


## as13851365

> دوست عزیز الگوریتم های رمزنگاری متقارن نظیر MD5 همگی شکسته شده اند تنها الگوریتم های امن ، سیستم های رمزنگاری غیر متقارن هستند که بر پایه دو مولفه Public Key و Private Key کار میکنند.
> استفاده از الگوریتم شخصی برای تولید کد فعالسازی یا سریال ریسک بزرگی محسوب میشه.


در حالت کلی هر برنامه ای با هر سطح امنیت و ... نوشته بشه به راحتی می شه کرکش کرد شما که موافق هستید ؟  :خجالت: 

ولی با این اوصاف اگر کمی از این جور الگوریتم ها استفاده بشه بیشر کار جوجه کرکر ها رو سخت می کنه اما یه حرفه ای هرگز خودش رو نمی گشه عقب ! و به راحتی برنامه شما که چه عرض کنم برنامه های دیگه ای رو هم به راحتی کرک می کنه ! ( همان طور که در بخش کرک سایت XXX بعضی از دوستان ثابت کردن که به راحتی می تونند از سطح امنیت خیلی از برنامه ها عبور کنند و هر برنامه ای رو با هر سطح امنیت کرک کنند)

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

----------


## samprp

> در حالت کلی هر برنامه ای با هر سطح امنیت و ... نوشته بشه به راحتی می شه کرکش کرد شما که موافق هستید


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

در ضمن اگه سطح امنیتی بیشتر باشه باعث می شه مدت زمان بیشتری برنامت رو بخرن . تازه وقتی هم که کرک شد به همین سرعت همه ملت از وجود اون کرک با خبر نمی شن (با این کاربرا شاید اصلا با خبر هم نشن) . بعضی ها هم اصلا اعتمادی به کرک ها ندارن .
پس بنابراین بی خیال شدنش زیاد عاقلانه نیست !

----------


## as13851365

> من یه برنامه برا تولید سریال نوشتم که بر اساس مشخصات سیستم هست . 
> به نظر شما یه کرکرکر چه طوری می تونه اونو کرک کنه ؟


*برای دانستن جواب یه همچین سوالاتی حتما به بخش های (امنیت برنامه . کرک ...) مراجعه کنید* 
شما این سریال رو تولید می کنید که چی ؟ یعنی کاربر با استفاده از این سریال می تونه برنامه رو فعال کنه ؟

خوب حتما در برنامه ی اصلی هم این سریال باید تولید بشه بعد اگر این دو سریال با هم برابر بود برنامه ثبت بشه ! یا هرچیز دیگر!
به نظر من برای کرک کردن برنامه نیازی به سریال نیست شما در برنامه اصلی سریال رو بررسی می کنید که ببینید اگر درست بود برنامه مثلا اجرا بشه ! حالا یه کرکر می آید و این شرط رو برعکس می کنه یعنی تا زمانی که برنامه سریال اشتباه بهش وارد بشه برنامه درست کار می کنه ویا می آید و یه جهشی به قسمت درست انجام می ده یعنی برنامه هر سریالی رو درست می دونه و اجرا می شه !
___________________

*اگر قصد فروش برنامه های نوشته شده خودتان را دارید ولی از کرک شدن برنامه خودتان می ترسید اول یک دمو به بازار بدید !*

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


*اگر هم برای نسخه اصلی از قفلی چیزی می خواهید استفاده کنید بهتر است که به موارد زیر توجه کنید :*

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

2 ) *از توابع رندم برای چک کردن قفل استفاده کنید* ( این یکی خیلی حال می ده ) هر چند این هم قابلیت کرک شدن داره ولی خیلی خیلی وقت می بره ! روش کار هم خیلی ساده است مثلا شما می خواهید هنگامی که برنامه می خواهد کاری رو انجام بده ( گزارش بگیره حذف کنه جستجو کنه و.....) بیایید یه عدد تصادفی تولید کنید و براساس این عدد تصادفی قفل رو چک کنید . 




3 ) *از تایمر ها هم برای چک کردن قفل استفاده کنید ! مثلا در مدت زمان هایی برنامه قفل برنامه را چک کنه* ! لزومی نداره از یک تایمر استفاده کنید . از چند تایمر با مدت زمانهای متفاوت استفاده کنید ! و در برنامه بررسی کنید که اگر تایمریی از کار افتاد برنامه دیگه کار نکنه ! مثلا یک تایمر در صفحه اول فرم قرار می دید تا قفل رو بررسی کنه حالا در قسمت های دیگه ی برنامه ( فرم دوم - ..... ) بیایید بررسی کنید ببینید که آیا تایمر کار می کنه یا نه !

4 ) *از چند مدل قفل استفاده کنید !* 

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

خود برنامه بیاد قفل رو از روی خودش چک کنه یعنی یه جورایی با محتوای فایل اجرایی کار کنید .

از روی رجیستر ویندوز قفل رو چک کنید . 

یک فایل در پوشه ی سیستم عامل ایجاد کنید و قفل رو از روی اون هم چک کنید .

از تزریق قفل استفاده کنید یعنی هنگام اجرای برنامه قفل برنامه رو در یکی از پروسه های مهم سیستم عامل مانند explorer تزریق کنید و از روی اون هم قفل رو چک کنید.


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

راههای زیادی وجود داره ولی ( تنبل زرنگ ها بودن بهتر از زرنگ تنبل ها بودن است ) همیشه برنامه را برای افراد حرفه ای در نظر بگیرید تا با راههای حرفه ای بیشتر آشنا بشید .><.


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

----------


## Nima NT

> خوب حتما در برنامه ی اصلی هم این سریال باید تولید بشه بعد اگر این دو سریال با هم برابر بود برنامه ثبت بشه ! یا هرچیز دیگر!


اگه برنامه نویس از این شیوه استفاده کنه برنامه توسط تکنیک Seial Fishing کرک میشه ، بهتره هیچ وقت برنامه سریال رو تولید و سپس مقایسه نکنه ، مثلا" سریال هارو به شکلی تولید کنید که مجموع ارقام اون همیشه صفر باشه ، این طوری دیگه خبری از همون تکنیک نیست.




> ولی با این اوصاف اگر کمی از این جور الگوریتم ها استفاده بشه بیشر کار جوجه کرکر ها رو سخت می کنه اما یه حرفه ای هرگز خودش رو نمی گشه عقب ! و به راحتی برنامه شما که چه عرض کنم برنامه های دیگه ای رو هم به راحتی کرک می کنه !


الگوریتم های غیر متقارن Keygen نمیشن. !!!

----------


## samprp

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




> اگه برنامه نویس از این شیوه استفاده کنه برنامه توسط تکنیک Seial Fishing کرک میشه ، بهتره هیچ وقت برنامه سریال رو تولید و سپس مقایسه نکنه ، مثلا" سریال هارو به شکلی تولید کنید که مجموع ارقام اون همیشه صفر باشه ، این طوری دیگه خبری از همون تکنیک نیست.


این قسمت رو من درست متوجه نشدم . برنامه یه جوریه هست که باید رو سیستمی که بر اساس اون ثبت شده نباید اچرا بشه . می شه بگین چه طوری این کاری رو می شه انجام داد . 
یعنی چی مجموع ارقام صفر باشه ؟ 




> الگوریتم های غیر متقارن Keygen نمیشن


این الگوریتم ها چه جوری تو یه برنامه استفده می شن که کی گن (همون کرک دیگه؟) نمی شن . 

اطلاعات کاملتر در مورد این کیس
برنامه فروخته شده می یاد مشخصات سیستم رو در می یاره (مثلا CPU) و بعد یه HID تولید می کنه (مثلا 20 حرفی) . این کد هم رمزنگاری شدس
بعد اینو به کاربر نشون می ده . کاربر می یاد اینو می ده (نلفن یا اینترنت ) به فروشنده  (مثلا ما) و ما می یایم اینو رو می گیریم و بر اساسش کد SN رو تولید می کنیم و می دیم مشتری .
مشتری تو محل تعیین شده کد SN رو تایپ می کنه و به کاربر می گه که درست هست یا نه و بعد برنامه خارج می شه
موقع اجرا برنامه فروخته شده دوباره HID رو تولید و با SN مقایسه می کنه . در صورت تطابق اجرا در غیر این صورت اختلال . مثلا من کاری کردم وقتی این تطابق درست نباشه پسورد پایگاه داده اشتباه تنظیم بشه . یه متغیر تعریف شده که در صورت True بودنش برنامه اجرا می شه . اینو هم در صورت مطابق نبودن False مقدار دهی می شه . 

عزیزان ، نظرتون چی هست
با تشکر

----------


## samprp

> برای دانستن جواب یه همچین سوالاتی حتما به بخش های (امنیت برنامه . کرک ...) مراجعه کنید


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

----------


## Nima NT

> موقع اجرا برنامه فروخته شده دوباره HID رو تولید و با SN مقایسه می کنه .


اینکه شما دوباره HID رو تولید میکنید ، تمام سریال صحیح میره تو پشته سیستم و من اون رو از پشته بر میدارم به این میگن Serial Fishing یعنی همون دزدیدن سریال.




> این الگوریتم ها چه جوری تو یه برنامه استفده می شن که کی گن (همون کرک دیگه؟) نمی شن .


این برنامه ها کرک میشن ، مقوله keygen جداست ، فرض کن شما یه برنامه نوشتی که این برنامه یه کلید میگیره و یه فایل رو رمزگشایی میکنه ، از این کلید برای رمزگشایی فایل استفاده میشه ، حالا من میتونم شرط رو بردارم که حتی اگه کلید نبود هم برو سراغ رمزگشایی فایل ، ولی با کدوم کلید ؟؟؟
اینجا من باید برنامه رو به روش keygen کرک کنم ، یعنی بیام و با توجه به کد های اسمبلی برنامه کلید واقعی رو تولید کنم ، تو الگوریتم هایی مثل MD5 این کار مثا آب خوردنه ولی تو RSA نه !
چون تو این شیوه شما دوتا کلید داری ، یه کدوم مخفیه و فقط خودت میدونی ، و یه کدوم عمومی و هر کسی میتونه پیداش کنه ، این الگوریتم برای تولید کلید برای زمزگشایی فایل از همین دو کلید داخلی استفاده میکنه و من زمانی میتونم عین اون کد رو بسازم که دو تا کلید رو داشته باشم ، یکی از این کلید ها موجوده ولی اون یکی نه ، لااقل تا به امروز موجود نبوده ، حالا بعدا" واسه اون هم یه روش کرکینگ دربیارن الله اعلم.

----------


## samprp

> اینکه شما دوباره HID رو تولید میکنید ، تمام سریال صحیح میره تو پشته سیستم و من اون رو از پشته بر میدارم به این میگن Serial Fishing یعنی همون دزدیدن سریال.


راه حل چیه ؟

----------


## Nima NT

سریال رو تیکه تیکه درست کن و تیکه تیکه مقایسه کن ، سعی کنی هیچوقت سریال رو به شکل کامل نریزی تو یه متغییر.

----------


## samprp

یعنی نمی شه تیکه ها + تیکه  ها کرد تا سریال اصلی بدست بیاد . 
همین جوری که ما تیکه تیکه می کنیم کرکر هم اونا رو اتصال بده و سریال اصلی رو بگیره ؟؟؟؟

----------


## Nima NT

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

----------


## samprp

خوب اون جایی که سریال رو رمزی می کنن قبلش کرکر می تونه  اون تیکه ها رو کش کنه  (درست قبل از اینکه رمزی بشه)
فکر کنم می تونه ؟

----------


## as13851365

> RSA 
> چون تو این شیوه شما دوتا کلید داری ، یه کدوم مخفیه و فقط خودت میدونی ، و یه کدوم عمومی و هر کسی میتونه پیداش کنه ، این الگوریتم برای تولید کلید برای زمزگشایی فایل از همین دو کلید داخلی استفاده میکنه و من زمانی میتونم عین اون کد رو بسازم که دو تا کلید رو داشته باشم ، یکی از این کلید ها موجوده ولی اون یکی نه ، لااقل تا به امروز موجود نبوده ، حالا بعدا" واسه اون هم یه روش کرکینگ دربیارن الله اعلم.


اگر مقاله ای در باره RSA دارید لطفا در این قسمت قرار بدید !
خوب من دوتا کلید تولید می کنم که یکی رو به صورت عمومی همه بهش دسترسی دارن و یکی رو که پیش خودم نگه می دارم ! حالا من یه برنامه ای رو می نویسم که بررسی می کنه که هر دوکلید وجود داره یا نه ؟
این کلید مخفی که پیش خودم هست رو برنامه باید داشته باشه که کار کنه ؟ اصلا نمی دونم دارم چی می گم !
اما اگه می شه کمی درباره این کلید ها توضیح بدید ممنون می شم .




> خوب اون جایی که سریال رو رمزی می کنن قبلش کرکر می تونه اون تیکه ها رو کش کنه (درست قبل از اینکه رمزی بشه)
> فکر کنم می تونه ؟


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

----------


## samprp

> این تابعی رو که شما سریال قطعات رو باهاش کد می کنی رو پیدا می کن


همه بحث ما سر اینه که چی کار کنیم به راحتی (نشد نداره!) نشه اونو پیداش کرد
وگرنه معلومه اگه اونو پیدا کنی کلا با کد خودت جایگزین می کنی . 
مطلبی در مورد RSAاینم یکی دیگه
_دوست من لطف کنید پستای ارسال شده رو دنبال کنید که هم باعث نشه این همه مطالب رو بی فایده تایپ کنید هم این تاپیک به سرانجامی برسه (واقعا شرمندم ) . 

_دوستان بحث به اینجا رسیده بود که :
ما یه سریال بر اساس سخت افزار تولید می کنیم 
جناب Nima NT می گن که قبل از اینکه سریال تولید بشه برا امنیت بیشتر باید اونو تیکه تیکه تولید کرد و تیکه ها رو هم رمزی کرد و تیکه ها هم ردیفی قرار گرفته شده باشه .

منم می گم : خوب ممکنه کرکر بیاد قبل از اینکه ما بخوایم اونا رو رمزی کنیم کدا رو در بیاره و روال رمزی کردن اون تیکه ها رو دور بزنه . می دونم امکان رفعش به طور کامل نیست . و فقط یه سواله ؟؟؟

----------


## Nima NT

فرمایشات شما صحیحه ، ولی کش رفتن همین تیکه ها خیلی هم ساده نیست ، شما فکر کن بیای یه سریال رو به آرایه ای از بایت تبدیل بکنی و این آرایه رو 500 تیکه بکنی ، حالا برای کش رفتن سریال شما من باید 500 بار عمل Copy و Past رو انجام بدم ؟!؟!؟!.
فکر نمی کنید اینطوری کار من یه کم بیشتر از یه کم سخت میشه. ؟!

----------


## samprp

آها این درسته کار یکم سخت تر می شه.
تا اینجا به جاهای خوبی رسیدیم . 
فقط شما اگه یه مثال کوچیک بزنی خیلی از این نامفهومات برطرف می شه
فرض کنید ما مثلا سریال مادربرد رو داریم با این فرض که برا هر سیستمی یه مقدار منحصر به فرد داره
این سریال مثلا 10 یا 15 رقمی رو شما چه طوری به آرایه ای از بایت تبدیل می کنی (مهم اون روال ریختنشه) و بعدشم چه طوری این آرایه را تیکه تیکه می کنید (البته فک کنم خود به خود تیکه تیکه هست)


(البته بازم بگم همه می دونیم که نشد نداره این کارا رو برای سخت تر کرک شدن برنامه هامون دوستان دارن می گن)

----------


## as13851365

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

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

در ضمن شما نباید به صورت کامل کد سریال ها رو استخراج کنید یعنی بیشتر باید قبل از این که سریال قطعات رو استخراج کنید باید این سریال ها رو به صورت تکه تکه استخراج کنید 

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

تا اینجای کار خیلی ساده به نظر می رسه ولی مشکل زمانی پیش می آید که می خواهید صحت سریال وارد شده توسط کاربر رو با سریال تولید شده توسط برنامه مقایسه کنید!

من که برای مقایسه کردن جز شرط IF چیزی به ذهنم نمی رسه !
اگر هم از یه حلقه استفاده کنید که باز هم همین مشکل وجود داره !

----------


## Nima NT

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

*نکته اول :* 
تیکه تیکه کردن سریال مادر برد و هارد اصلا" کار مفیدی نیست ، چرا که این سریال به درد من نمیخوره ، شما بهتره سریال فعالسازی قفل رو تیکه تیکه درست کنی !

*نکته دوم :*
تعدد چک کردن قفل ، شما هرقدر قفل رو به تعداد زیاد بررسی کنی ، همون قدر کراکر رو بیشتر خسته کردی ، فقط اینجا باید یه سری نکات رو رعایت کنی ، اول اینکه سعی کن برای هر بار چک کردن قفل  ، بدنه تابع رو از اول بنویس و این طوری نباشه که یه بار یه تابع بنویسی و هی اون رو فراخوانی کنی ، اگه این کار رو بکنی برنامه شما با روش Magic Bytes کرک میشه  :اشتباه: 

*نکته سوم :*
استفاده از بمب منطقی ، درسته که خیلی ها با این عقیده موافق نیستن ولی خودتون این سناریو رو بررسی کنید
من برنامه ای رو برای کرک کردن تو برنامه دیباگر لود میکنم ، این برنامه میاد و دیباگر بنده رو تشخیص میده و به من یه هشدار میده  :لبخند گشاده!:  ( واقعا" کار وحشتناکیه ) ، حالا فکر کنید برنامه عوض نشون دادن پیغام بیاد به نحوی ویندوز بنده رو ... بکنه  :گریه: 
چه قدر تفاوت میکنه ، حالا من دیگه نمیتونم مثل گذشته رو برنامه کار کنم ، بعد از نصب دوباره ویندوز و حسابی کفری شدن من با یه میدان مین مواجه هستم که به این راحتی نمیتونم از اون عبور کنم ، فکر کنید من تو برنامه 300 نقطه حضور دیباگر رو بررسی کرده باشم ، این یعنی 300 عدد مین زبون بسته که آماده انفجاره !!!! :شیطان: 
*
نکته آخر :*
همیشه راهی برای کرک کردن برنامه ها وجود داره ، راهی که حتی عقل جن هم بهش نرسه ولی این رو همیشه به یاد داشته باشید که کراکر ها هم آدم های مریضی نیستن ( فکر نکنید دارم خودم رو میگم ، من ترک کردن و دیگه برنامه کرک نمیکنم ) ،کراکر ها معمولا" به برنامه هایی گیر میدن که قیمت بالا و کارائی پائینی دارن ، همین چند وقت پیش تو فروم شبگرد  کرک برنامه مشاورین املاک هیرا درخواست شد ، این برنامه خیلی قویه ولی فقط 20 هزار تومان قیمت داره ، تاپیک قفل شد و جناب جوکر گفتن که برنامه زیاد گرون نیست پس کرک درخواست نکنید.
اگه برنامه نویس ها ( منظورم عده قلیلی هست ) نخوان ره صد ساله رو یک ساله برن و هوس نکن یه برنامه ای رو که در عرض یه هفته نوشتن فلان میلیون بفروشن به یه شرکت مطمئنا" پیشکسوتان کرکینگ هیچوقت سراغ برنامه ها شون نمیرن ، فقط میمونه جوجه کراکر ها که اونها هم با یه پکر ساده ماهها مشغول میشن. :چشمک: 

*امیدوارم موفق باشید.*

----------


## butterfly8528

سلام دوستان عزیز .

من یه برنامه نویس vb هستم و هیچی هم از مبحث کرک بلد نیستم . در پی جست و جو برای بالا بردن امنیت برنامه بودم که این تاپیک های شما رو دیدم . حالا هم چند تا سوال برام پیش اومده لطف کنید جواب بدید .

1 - بهترین برنامه برای پک کردن چیه ؟

2- استفاده از این برنامه ها تاثیری در عمل کرد برنامه پک شده نداره ؟

3- میتوان با چند ابزار مختلف برنامه را پک کنیم ؟ مثلا ابتدا با برنامه Themida و سپس با EXECryptor برنامه رو پک کنیم ؟

4 - بمب منتقی چی هست و چگونه میتونیم اون رو ایجاد کنیم ؟

5 - در تاپیک های شما بارها کلمه VM رو دیدم ، VM یعنی چی ؟

ممنون از لطفتون   :گیج:

----------


## _abiriamir

> من برنامه ای رو برای کرک کردن تو برنامه دیباگر لود میکنم ، این برنامه میاد و دیباگر بنده رو تشخیص میده


چجوری دیباگر شما رو تشخیص بده؟
 در او زمان که برنامه ما اجرا نیست که عملی رو روی ویندوز شما انجام بده؟

----------

