PDA

View Full Version : سوال: ساخت Keygen با دلفی



Emdad2001
جمعه 26 آبان 1391, 15:39 عصر
سلام، من هرچی گشتم جواب سوال خودمو نتونستم بگیرم شاید زیادی مبتدی هستم :افسرده:

من با کمک یک کامپوننت تونستم کد هارد رو بخونم حالا میخوام کد به دست امده رو به صورت شماره دربیارم کد به دست آمده مثل WD-WCD52635868 هستش مخوام به این شکل در بیاد 95822652358354685468354
که بعد این کد رو به صورت HF6589-GFHGLK-654CVF در بیارم

BORHAN TEC
جمعه 26 آبان 1391, 17:30 عصر
سلام
شما باید از رشته مورد نظر که مربوط به شماره سریال هار می باشد Hash Code بگیرید. الگوریتمهای مختلفی برای تولید Hash Code وجود دارد مثل CRC 16 و CRC 32 و MD 5 و Sha1 و ... . خوشبختانه دلفی شامل کلاسهای آماده ای است که می تواند این کار را برای شما انجام دهد. مثل پست 61 و 62 این تاپیک:
http://barnamenevis.org/showthread.php?190417-%D9%85%D8%B1%D8%AC%D8%B9-%D8%AA%D9%88%D8%A7%D8%A8%D8%B9-%D8%AF%D9%84%D9%81%DB%8C/page4
فقط توجه داشته باشید که قسمتی از کد مربوطه در پستهایی که معرفی کردم را باید تغییر دهید. به عبارت دیگر به جای:
result := idmd5.HashStreamAsHex(fs);
و یا:
result := idSHA1.HashStreamAsHex(fs);
باید از متدی استفاده کنید که یک Hash code از یک String بر می گرداند. فکر می کنم که اسم متد مربوطه HashString یا چنین چیزی باشد ولی مطمئن نیستم چون الان به دلفی دسترسی ندارم.
موفق باشید...

Emdad2001
جمعه 26 آبان 1391, 18:14 عصر
مرسی ولی کاش می شد یک مثال کوچیک هم واسه من بیاری چون توی اون صفحه که کفتین راجه به چیزه دیگه هست من اینو نوشتم ولی اجرا نمی شه میشه برسی کنید ..


var
idmd5:TIdHashMessageDigest5;
fs,Result:string;
begin
fs:=Trim(Edit1.Text);
idmd5:=TIdHashMessageDigest5.Create;
try
Result:=idmd5.HashString(IntToStr(FS));
finally
Edit3.Text:=fs;
idmd5.Free;
end;

BORHAN TEC
جمعه 26 آبان 1391, 18:45 عصر
اگر از Md 5 استفاده می کنید یونیت های IdHashMessageDigest, idHash را به قسمت uses اضافه کنید و اگر از sha 1 استفاده می کنید یونیت های idHash, IdHashSHA را به فهرست uses اضافه کنید.
در ضمن کد شما هم کمی ایراد دارد و باید به این شکل تغییر کند:
uses
IdHashMessageDigest, idHash;

procedure TForm1.Button1Click(Sender: TObject);
var
idmd5: TIdHashMessageDigest5;
fs, Result: string;
begin
fs := Trim(Edit1.Text);
idmd5 := TIdHashMessageDigest5.Create;
try
Result := idmd5.HashStringAsHex(fs);
finally
Edit3.Text := Result;
idmd5.Free;
end;
end;
فکر می کنم که کد بالا بدون خطا اجرا بشه! فقط یک قسمت وجود داره و اون هم اینه که این برنامه خروجی رو به صورت Hex برمیگردونه و اگر می خواهید که خروجی با فرمت عددی باشه (برای مقاصدی مثل استفاده در رمز دهی با تلفن گویا و ...) باید خودتون زحمتش رو بکشید. انجام این کار زیاد سخت نیست و برای این کار می توانید از هر روش دلخواهی که مایلید استفاده کنید.
با جستجوهایی که من الان در وب داشتم متوجه شدم که خروجی HashString از نوع TArray است. که اگر می خواهید آنرا تبدیل کنید باید از روش مشابه به روشی که در لینک زیر آمده است استفاده کنید:
http://stackoverflow.com/questions/3881720/delphi-convert-byte-array-to-string

بهروز عباسی
دوشنبه 29 آبان 1391, 08:49 صبح
درود دوست عزیز
این نمونه کامل نیست اما ممکنه مشکلت رو حل کنه.

موفق باشی

Emdad2001
دوشنبه 29 آبان 1391, 20:36 عصر
سلام دوست عزیز ممنون از اینکه کمکم کردید ولی چیزی رو که فهمیدم ساخت keygen چیزی نیست که باید یاد گرفت چون قراره از برنامه شما محافظت بشه پس باید
یک سری کدی بنویسی که فقط برنامه خودت بفهمه که چی نوشتی به هر حال ممنون :چشمک: