Entwickler-Ecke

Sonstiges (Delphi) - CRC Check ???


matze - Sa 03.08.02 21:57
Titel: CRC Check ???
Wie kann ich meiner App einen CRC Check hinzufügen ??

Also einen Check, ob ein Proggi noch in der Orginalversion vorliegt oder ob sich z.B ein Virus oder ein Trojaner angehängt hat.


zero - So 04.08.02 01:54

guck mal da http://www.swissdelphicenter.ch/de/showcode.php?id=268 hoffe das hilf dir etwas


Maverick - So 04.08.02 23:10

dein programm kann sie aber wahrscheinlich nicht selber checken, da es beim öffnen Lese-und Schreibgeschützt wird


matze - Mo 05.08.02 08:54

Ich ckeck das Beispiel von Swssdelphicenter nicht wirklich

@Maverick: Wie soll man des denn dann machen ??


zero - Mo 05.08.02 16:27

ich hätte da eine idee, ist zwar etwas aufwenidg aber sollte gehen...
du ließt dein programm in einen Stream ein und cecks den dann...
sollte so gehen:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
function SelfCheck;
var
  MyProgram:TStream;
  Buffer: array[1..65521] of Byte;
begin
  MyProgram:=TStream.Create; 
  MyProgram.LoadFromFile(ParamStr(0));
  repeat 
    MyProgram.ReadBuffer(Buffer,SizeOf(Buffer));
    for i := 1 to BytesRead do CRC32 := (CRC32 shr 8) xor
    Table[Buffer[i] xor (CRC32 and $000000FF)]; 
  until BytesRead = 0; 
  MyProgram.Free;
end;


hmm ja so sollte sollte das dann in etwas aussehen nur noch die CRC table und die anderen varibalen hinzufügen und es sollte gehen.

ich habe das nur hier so PROVISORISCH hingepostet es ist nicht getestet, frei aus dem kopf so wie ich es erstmal gemacht hätte, also nicht gleich steine werfen wenn was nicht haar genau passt :wink:

bis dann


zero - Mo 05.08.02 16:37

so da bin ich nochmal, habe ebend mal schnell den code umgeschrieben das sieht jetzt fertig so aus:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
const
  Table: array[0..255] of DWORD =
    ($00000000, $77073096, $EE0E612C, $990951BA,
    $076DC419, $706AF48F, $E963A535, $9E6495A3,
    $0EDB8832, $79DCB8A4, $E0D5E91E, $97D2D988,
    $09B64C2B, $7EB17CBD, $E7B82D07, $90BF1D91,
    $1DB71064, $6AB020F2, $F3B97148, $84BE41DE,
    $1ADAD47D, $6DDDE4EB, $F4D4B551, $83D385C7,
    $136C9856, $646BA8C0, $FD62F97A, $8A65C9EC,
    $14015C4F, $63066CD9, $FA0F3D63, $8D080DF5,
    $3B6E20C8, $4C69105E, $D56041E4, $A2677172,
    $3C03E4D1, $4B04D447, $D20D85FD, $A50AB56B,
    $35B5A8FA, $42B2986C, $DBBBC9D6, $ACBCF940,
    $32D86CE3, $45DF5C75, $DCD60DCF, $ABD13D59,
    $26D930AC, $51DE003A, $C8D75180, $BFD06116,
    $21B4F4B5, $56B3C423, $CFBA9599, $B8BDA50F,
    $2802B89E, $5F058808, $C60CD9B2, $B10BE924,
    $2F6F7C87, $58684C11, $C1611DAB, $B6662D3D,
    $76DC4190, $01DB7106, $98D220BC, $EFD5102A,
    $71B18589, $06B6B51F, $9FBFE4A5, $E8B8D433,
    $7807C9A2, $0F00F934, $9609A88E, $E10E9818,
    $7F6A0DBB, $086D3D2D, $91646C97, $E6635C01,
    $6B6B51F4, $1C6C6162, $856530D8, $F262004E,
    $6C0695ED, $1B01A57B, $8208F4C1, $F50FC457,
    $65B0D9C6, $12B7E950, $8BBEB8EA, $FCB9887C,
    $62DD1DDF, $15DA2D49, $8CD37CF3, $FBD44C65,
    $4DB26158, $3AB551CE, $A3BC0074, $D4BB30E2,
    $4ADFA541, $3DD895D7, $A4D1C46D, $D3D6F4FB,
    $4369E96A, $346ED9FC, $AD678846, $DA60B8D0,
    $44042D73, $33031DE5, $AA0A4C5F, $DD0D7CC9,
    $5005713C, $270241AA, $BE0B1010, $C90C2086,
    $5768B525, $206F85B3, $B966D409, $CE61E49F,
    $5EDEF90E, $29D9C998, $B0D09822, $C7D7A8B4,
    $59B33D17, $2EB40D81, $B7BD5C3B, $C0BA6CAD,
    $EDB88320, $9ABFB3B6, $03B6E20C, $74B1D29A,
    $EAD54739, $9DD277AF, $04DB2615, $73DC1683,
    $E3630B12, $94643B84, $0D6D6A3E, $7A6A5AA8,
    $E40ECF0B, $9309FF9D, $0A00AE27, $7D079EB1,
    $F00F9344, $8708A3D2, $1E01F268, $6906C2FE,
    $F762575D, $806567CB, $196C3671, $6E6B06E7,
    $FED41B76, $89D32BE0, $10DA7A5A, $67DD4ACC,
    $F9B9DF6F, $8EBEEFF9, $17B7BE43, $60B08ED5,
    $D6D6A3E8, $A1D1937E, $38D8C2C4, $4FDFF252,
    $D1BB67F1, $A6BC5767, $3FB506DD, $48B2364B,
    $D80D2BDA, $AF0A1B4C, $36034AF6, $41047A60,
    $DF60EFC3, $A867DF55, $316E8EEF, $4669BE79,
    $CB61B38C, $BC66831A, $256FD2A0, $5268E236,
    $CC0C7795, $BB0B4703, $220216B9, $5505262F,
    $C5BA3BBE, $B2BD0B28, $2BB45A92, $5CB36A04,
    $C2D7FFA7, $B5D0CF31, $2CD99E8B, $5BDEAE1D,
    $9B64C2B0, $EC63F226, $756AA39C, $026D930A,
    $9C0906A9, $EB0E363F, $72076785, $05005713,
    $95BF4A82, $E2B87A14, $7BB12BAE, $0CB61B38,
    $92D28E9B, $E5D5BE0D, $7CDCEFB7, $0BDBDF21,
    $86D3D2D4, $F1D4E242, $68DDB3F8, $1FDA836E,
    $81BE16CD, $F6B9265B, $6FB077E1, $18B74777,
    $88085AE6, $FF0F6A70, $66063BCA, $11010B5C,
    $8F659EFF, $F862AE69, $616BFFD3, $166CCF45,
    $A00AE278, $D70DD2EE, $4E048354, $3903B3C2,
    $A7672661, $D06016F7, $4969474D, $3E6E77DB,
    $AED16A4A, $D9D65ADC, $40DF0B66, $37D83BF0,
    $A9BCAE53, $DEBB9EC5, $47B2CF7F, $30B5FFE9,
    $BDBDF21C, $CABAC28A, $53B39330, $24B4A3A6,
    $BAD03605, $CDD70693, $54DE5729, $23D967BF,
    $B3667A2E, $C4614AB8, $5D681B02, $2A6F2B94,
    $B40BBE37, $C30C8EA1, $5A05DF1B, $2D02EF8D);

  // type Buffer = Array[1..65521] of byte;
  {largest buffer that can be allocated on heap }

procedure CalcCRC32(Stream: TStream; var CRC32: DWORD);
var
  BytesRead: DWORD;
  Buffer: array[1..65521] of Byte;
  i: Word;
begin
  FileMode := 0;
  CRC32    := $ffffffff;
  {$I-}
  repeat
   BytesRead:=Stream.Read(Buffer,SizeOf(Buffer));
   for i := 1 to BytesRead do CRC32 := (CRC32 shr 8) xor Table[Buffer[i] xor (CRC32 and $000000FF)];
   Stream.Position:=Stream.Position+BytesRead;
  until BytesRead = 0;
  {$I+}
  CRC32 := not CRC32;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  crc: DWORD;
  MyFile: TMemoryStream;
begin
  MyFile:=TMemoryStream.Create;
  MyFile.LoadFromFile('C:\flashimage.img');
  CalcCRC32(MyFile, crc);
  if crc <> 0 then ShowMessage(IntToHex(crc, 6));
  MyFile.Free;
end;


der geht auch so, also viel spaß noch :)

bye


Motzi - Mo 05.08.02 16:57

Ich würde statt CRC32 einen Einweg-Hash-Algorithmus verwenden. Im DEC (Delphi Encryption Compendium) von Hagen Reddmann gibt es mehrere davon. Die besten und bekanntesten sind SHA1 und MD5. Downloaden kann man es zb bei Torry.