Artic Posted February 9, 2015 Posted February 9, 2015 (edited) hey there, i am trying to write a keygen in Delphi 7.my problem is that i cant figure out how to make a MD5 in the keygen.do i need to write it by hand or are there some pre-made code parts somewhere? Edited February 12, 2015 by Artic
kao Posted February 9, 2015 Posted February 9, 2015 There are several 3rd party units available. As always, Google is your friend. https://github.com/kosmasgiannis/pleiades-client/blob/master/MD5.pas http://keynote-nf.googlecode.com/svn/trunk/3rd_party/MD5.pas 1
Artic Posted February 10, 2015 Author Posted February 10, 2015 dont want to open a new topic for this, but are there some tutorials about how to write a keygen with delphi?
kao Posted February 10, 2015 Posted February 10, 2015 Don't want to sound mean, but there is no real difference if you're writing keygen in Delphi, C++ or C#. You figure out the key generating algorithm, implement it in the language of your choice, make sure it works and then add some eye candy to your "product". In some languages it's harder to use inline assembler or certain libraries, but the overall differences are real small. Maybe this topic will help you: old-keygen-sources-in-delphi. 2
Artic Posted February 10, 2015 Author Posted February 10, 2015 you never sound mean. i guess i need to do some basic delphing and then try to get a working keygen.i know the whole tutorial asking sucks, but as i had clicked on post i saw that i wrote it. nvm i will keep going.
redblkjck Posted February 10, 2015 Posted February 10, 2015 DCPCrypt has MD5 and works well with Delphi 7. chessgod101 posted some code using it not too long ago with links to DCPcrypt. There is also a post for for keygen tips under Delphi there. h++p://reverseengineeringtips.blogspot.com pnta posted something recent also. https://forum.tuts4you.com/topic/36594-keygenning-tut-merry-christmas-and-happy-new-year-2015/ 1
Nucleus Posted February 11, 2015 Posted February 11, 2015 try to find pnta's tutorials collection that he posted on black storm and here I think. 1
Artic Posted February 11, 2015 Author Posted February 11, 2015 try to find pnta's tutorials collection that he posted on black storm and here I think. can you help me to find the link? thanks everybody! Love you! x (no homo) lol
Nucleus Posted February 11, 2015 Posted February 11, 2015 Delphi source code that uses MD5: Created by Levis/REPT up.ht/T4DsrM 1
DarkCode Posted February 12, 2015 Posted February 12, 2015 (edited) Hi in simple way in uses add MD5 usesMD5; Note: don't forget to add MD5 library to project folder. To get MD5 hash . on the Button you create double click then add code . varH : String;begin H := MD5Print(MD5String('Artic')); // GetMd5 and store in H Edt1.text := H; // Display MD5 Value @ TextBoxend; BR Esso_x Edited February 12, 2015 by DarkCode 1
Nucleus Posted February 12, 2015 Posted February 12, 2015 @Esso x (DarkCode) Can you make an AT4RE forum rip with all tutorials, sources and tools?
X-88 Posted February 20, 2015 Posted February 20, 2015 (edited) Old Keygen Tutorial in Delphi, by: Acid Burn Please Visit *********************SOURCES DELPHI************************ procedure TForm1.Edit1Change(Sender: TObject); var i,ascii,result: integer; begin for i:=1 to length(edit1.text) do begin ascii:=ascii + ord(edit1.text[i]); end; asm mov eax,ascii mov ecx,ascii shl eax,7 add eax,ecx mov ascii,eax end; result:=ascii; edit2.text:=inttostr(result); end; end.Unit MD5 {*******************************************************} { } { Delphi Visual Component Library } { } { Copyright(c) 1995-2010 Embarcadero Technologies, Inc. } { } { Message-digest algorithm based on C sample } { provided in Appendix section of } { Rivest-MD5.TXT available at: } { http://theory.lcs.mit.edu/~rivest/Rivest-MD5.txt } { } {*******************************************************} unit MD5; interface uses Types; type IMD5 = interface ['{887C9EF0-15B9-41B4-A403-0431793B6E41}'] procedure Init; procedure Update(const Input: TByteDynArray; Len: Longword); overload; procedure Update(const Input: string); overload; function Final: TByteDynArray; function AsString: string; function AsGUID: string; end; function GetMD5: IMD5; implementation const S11 = 7; S12 = 12; S13 = 17; S14 = 22; S21 = 5; S22 = 9; S23 = 14; S24 = 20; S31 = 4; S32 = 11; S33 = 16; S34 = 23; S41 = 6; S42 = 10; S43 = 15; S44 = 21; var padding: TByteDynArray; type ArrayOfLWord= array of Longword; TMD5 = class(TInterfacedObject, IMD5) private FContextState: ArrayOfLWord; FContextCount: ArrayOfLWord; FContextBuffer: TByteDynArray; public constructor Create; procedure Init; virtual; procedure Update(const Input: TByteDynArray; Len: Longword); overload; virtual; procedure Update(const Input: string); overload; virtual; function Final: TByteDynArray; virtual; procedure Transform(const block: TByteDynArray; shift: Integer); procedure Decode(var Dst: ArrayOfLWord; const Src: TByteDynArray; Len: Integer; shift: Integer); procedure Encode(var Dst: TByteDynArray; const Src: ArrayOfLWord; Len: Integer); function AsString: string; function AsGUID: string; end; function GetMD5: IMD5; begin Result := TMD5.Create; end; constructor TMD5.Create; begin inherited Create; Init; end; procedure TMD5.Init; begin SetLength(FContextCount, 2); FContextCount[0] := 0; FContextCount[1] := 0; SetLength(FContextState, 4); FContextState[0] := $67452301; FContextState[1] := $efcdab89; FContextState[2] := $98badcfe; FContextState[3] := $10325476; SetLength(FContextBuffer, 64); end; procedure TMD5.Update(const Input: string); var {$IFDEF UNICODE} utf8Str: UTF8String; {$ENDIF} Bytes: TByteDynArray; Len: Integer; Str: PAnsiChar; begin {$IFDEF UNICODE} utf8Str := UTF8Encode(Input); Len := Length(utf8Str); {$ELSE} Len := Length(Input); {$ENDIF} if Len > 0 then begin SetLength(Bytes, Len); {$IFDEF UNICODE} Str := PAnsiChar(utf8Str); {$ELSE} Str := PAnsiChar(Input); {$ENDIF} Move(Str^, Pointer(Bytes)^, Len); Update(Bytes, Len); end; end; procedure TMD5.Update(const Input: TByteDynArray; Len: Longword); var index, partlen, I, start: Longword; begin { Compute number of bytes mod 64 } index := (FContextCount[0] shr 3) and $3f; { Update number of bits } Inc(FContextCount[0], Len shl 3); if (FContextCount[0] < (Len shl 3)) then Inc(FContextCount[1]); Inc(FContextCount[1], Len shr 29); partlen := 64 - index; { Transform (as many times as possible) } if Len >= partLen then begin for I := 0 to partLen-1 do FContextBuffer[I+index] := Input[I]; Transform(FContextBuffer, 0); I := partLen; while (I + 63) < Len do begin Transform(Input, I); Inc(I, 64); end; index := 0; end else I := 0; { Input remaining input } if (I < Len) then begin start := I; while (I < Len) do begin FContextBuffer[index+I-start] := Input[I]; Inc(I); end; end; end; function TMD5.Final: TByteDynArray; var bits: TByteDynArray; index, padlen: Integer; begin { Save number of bits } Encode(bits, FContextCount, 8); { Pad out to 56 mod 64 } index := (FContextCount[0] shr 3) and $3f; if index < 56 then padlen := 56 - index else padlen := 120- index; Update(padding, padLen); { Append length (before padding) } Update(bits, 8); { Store state in digest } Encode(Result, FContextState, 16); end; function TMD5.AsString: string; const XD: array[0..15] of char = ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'); var digest: TByteDynArray; I: Integer; begin Result := ''; digest := Final; for I := 0 to Length(digest)-1 do Result := Result + XD[(digest[I] shr 4) and $0f] + XD[digest[I] and $0f]; end; function TMD5.AsGUID: string; const XD: array[0..15] of char = ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'); var digest: TByteDynArray; I: Integer; begin Result := ''; digest := Final; for I := 0 to Length(digest)-1 do begin case I of 0: Result := Result + '{'; 4, 6, 8, 10: Result := Result + '-'; end; Result := Result + XD[(digest[I] shr 4) and $0f] + XD[digest[I] and $0f]; if I = 15 then Result := Result + '}'; end; end; procedure TMD5.Transform(const block: TByteDynArray; shift: Integer); function F(x, y, z: Longword): Longword; begin Result := (x and y) or ((not x) and z); end; function G(x, y, z: Longword): Longword; begin Result := (x and z) or (y and (not z)); end; function H(x, y, z: Longword): Longword; begin Result := x xor y xor z; end; function I(x, y, z: Longword): Longword; begin Result := y xor (x or (not z)); end; procedure RL(var x: Longword; n: Byte); begin x := (x shl n) or (x shr (32 - n)); end; procedure FF(var a: Longword; b, c, d, x: Longword; s: Byte; ac: Longword); begin Inc(a, F(b, c, d) + x + ac); RL(a, s); Inc(a, ; end; procedure GG(var a: Longword; b, c, d, x: Longword; s: Byte; ac: Longword); begin Inc(a, G(b, c, d) + x + ac); RL(a, s); Inc(a, ; end; procedure HH(var a: Longword; b, c, d, x: Longword; s: Byte; ac: Longword); begin Inc(a, H(b, c, d) + x + ac); RL(a, s); Inc(a, ; end; procedure II(var a: Longword; b, c, d, x: Longword; s: Byte; ac: Longword); begin Inc(a, I(b, c, d) + x + ac); RL(a, s); Inc(a, ; end; var a, b, c, d: Longword; x: ArrayOfLWord; begin a := FContextState[0]; b := FContextState[1]; c := FContextState[2]; d := FContextState[3]; Decode(x, block, 64, shift); { Round 1 } FF( a, b, c, d, x[ 0], S11, $d76aa478); { 1 } FF( d, a, b, c, x[ 1], S12, $e8c7b756); { 2 } FF( c, d, a, b, x[ 2], S13, $242070db); { 3 } FF( b, c, d, a, x[ 3], S14, $c1bdceee); { 4 } FF( a, b, c, d, x[ 4], S11, $f57c0faf); { 5 } FF( d, a, b, c, x[ 5], S12, $4787c62a); { 6 } FF( c, d, a, b, x[ 6], S13, $a8304613); { 7 } FF( b, c, d, a, x[ 7], S14, $fd469501); { 8 } FF( a, b, c, d, x[ 8], S11, $698098d8); { 9 } FF( d, a, b, c, x[ 9], S12, $8b44f7af); { 10 } FF( c, d, a, b, x[10], S13, $ffff5bb1); { 11 } FF( b, c, d, a, x[11], S14, $895cd7be); { 12 } FF( a, b, c, d, x[12], S11, $6b901122); { 13 } FF( d, a, b, c, x[13], S12, $fd987193); { 14 } FF( c, d, a, b, x[14], S13, $a679438e); { 15 } FF( b, c, d, a, x[15], S14, $49b40821); { 16 } { Round 2 } GG( a, b, c, d, x[ 1], S21, $f61e2562); { 17 } GG( d, a, b, c, x[ 6], S22, $c040b340); { 18 } GG( c, d, a, b, x[11], S23, $265e5a51); { 19 } GG( b, c, d, a, x[ 0], S24, $e9b6c7aa); { 20 } GG( a, b, c, d, x[ 5], S21, $d62f105d); { 21 } GG( d, a, b, c, x[10], S22, $2441453); { 22 } GG( c, d, a, b, x[15], S23, $d8a1e681); { 23 } GG( b, c, d, a, x[ 4], S24, $e7d3fbc8); { 24 } GG( a, b, c, d, x[ 9], S21, $21e1cde6); { 25 } GG( d, a, b, c, x[14], S22, $c33707d6); { 26 } GG( c, d, a, b, x[ 3], S23, $f4d50d87); { 27 } GG( b, c, d, a, x[ 8], S24, $455a14ed); { 28 } GG( a, b, c, d, x[13], S21, $a9e3e905); { 29 } GG( d, a, b, c, x[ 2], S22, $fcefa3f8); { 30 } GG( c, d, a, b, x[ 7], S23, $676f02d9); { 31 } GG( b, c, d, a, x[12], S24, $8d2a4c8a); { 32 } { Round 3 } HH( a, b, c, d, x[ 5], S31, $fffa3942); { 33 } HH( d, a, b, c, x[ 8], S32, $8771f681); { 34 } HH( c, d, a, b, x[11], S33, $6d9d6122); { 35 } HH( b, c, d, a, x[14], S34, $fde5380c); { 36 } HH( a, b, c, d, x[ 1], S31, $a4beea44); { 37 } HH( d, a, b, c, x[ 4], S32, $4bdecfa9); { 38 } HH( c, d, a, b, x[ 7], S33, $f6bb4b60); { 39 } HH( b, c, d, a, x[10], S34, $bebfbc70); { 40 } HH( a, b, c, d, x[13], S31, $289b7ec6); { 41 } HH( d, a, b, c, x[ 0], S32, $eaa127fa); { 42 } HH( c, d, a, b, x[ 3], S33, $d4ef3085); { 43 } HH( b, c, d, a, x[ 6], S34, $4881d05); { 44 } HH( a, b, c, d, x[ 9], S31, $d9d4d039); { 45 } HH( d, a, b, c, x[12], S32, $e6db99e5); { 46 } HH( c, d, a, b, x[15], S33, $1fa27cf8); { 47 } HH( b, c, d, a, x[ 2], S34, $c4ac5665); { 48 } { Round 4 } II( a, b, c, d, x[ 0], S41, $f4292244); { 49 } II( d, a, b, c, x[ 7], S42, $432aff97); { 50 } II( c, d, a, b, x[14], S43, $ab9423a7); { 51 } II( b, c, d, a, x[ 5], S44, $fc93a039); { 52 } II( a, b, c, d, x[12], S41, $655b59c3); { 53 } II( d, a, b, c, x[ 3], S42, $8f0ccc92); { 54 } II( c, d, a, b, x[10], S43, $ffeff47d); { 55 } II( b, c, d, a, x[ 1], S44, $85845dd1); { 56 } II( a, b, c, d, x[ 8], S41, $6fa87e4f); { 57 } II( d, a, b, c, x[15], S42, $fe2ce6e0); { 58 } II( c, d, a, b, x[ 6], S43, $a3014314); { 59 } II( b, c, d, a, x[13], S44, $4e0811a1); { 60 } II( a, b, c, d, x[ 4], S41, $f7537e82); { 61 } II( d, a, b, c, x[11], S42, $bd3af235); { 62 } II( c, d, a, b, x[ 2], S43, $2ad7d2bb); { 63 } II( b, c, d, a, x[ 9], S44, $eb86d391); { 64 } Inc(FContextState[0], a); Inc(FContextState[1], ; Inc(FContextState[2], c); Inc(FContextState[3], d); end; procedure TMD5.Encode(var Dst: TByteDynArray; const Src: ArrayOfLWord; Len: Integer); var i, j: Integer; begin i := 0; j := 0; SetLength(Dst, Len); while (j < Len) do begin Dst[j] := Byte((Src[i] and $ff)); Dst[j+1]:= Byte((Src[i] shr 8) and $ff); Dst[j+2]:= Byte((Src[i] shr 16) and $ff); Dst[J+3]:= Byte((Src[i] shr 24) and $ff); Inc(j, 4); Inc(i); end; end; procedure TMD5.Decode(var Dst: ArrayOfLWord; const Src: TByteDynArray; Len: Integer; shift: Integer); var I, J: Integer; a, b, c, d: Byte; begin J := 0; I := 0; SetLength(Dst, 16); while (J < Len) do begin a := Src[J+shift]; b := Src[J+shift+1]; c := Src[J+shift+2]; d := Src[J+shift+3]; Dst[I] :=Longword(a and $ff) or (Longword(b and $ff) shl 8) or (Longword(c and $ff) shl 16) or (Longword(d and $ff) shl 24); Inc(J, 4); Inc(I); end; end; initialization SetLength(padding, 64); padding[0] := $80; { MD5 test suite: MD5 ("") = d41d8cd98f00b204e9800998ecf8427e MD5 ("a") = 0cc175b9c0f1b6a831c399e269772661 MD5 ("abc") = 900150983cd24fb0d6963f7d28e17f72 MD5 ("message digest") = f96b697d7cb7938d525a2f31aaf161d0 MD5 ("abcdefghijklmnopqrstuvwxyz") = c3fcd3d76192e4007dfb496cca67e13b MD5 ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") = d174ab98d277d9f5a5611c2c9f419d9f MD5 ("123456789012345678901234567890123456789012345678901234567890123456 78901234567890") = 57edf4a22be3c955ac49da2e2107b67a } end. Edited February 20, 2015 by X-88
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now