الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

PatchEXE

مغلق
بدأه SUM في 19 أبريل 2002 · 12 رد · 1,394 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

اخوتي الأعزاء

في الحقيقة هذا الموضوع عبارة عن سؤال واجابة :) ( يعني دعوة للنقاش ) فطبعاً على ماارى ان الموضوع قد يكون مهم لدى الكثير منا وانا طبعاً منهم :) وقد قمت بأجرا محاولات عديدة ( ادراج ملف داخل تشغيلي مع تشغيلة اثناء تشغيل الملف التشغيلي دون ظهور (( كما تعمل بعض الفيروسات مثل Kuang )) ) ولكن دون فائدة

وقد استطعت ان احصل على كود يقوم بهذه العملية من الأنترنت ولكنه لم يعمل معي لأنه لم اجد وحدة crc32

وطبعاً هذا هو الكود

unit Execrcfm;

interface

uses
  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  Forms, Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    GroupBoxEXEInfo: TGroupBox;
    LabelCRCValue: TLabel;
    LabelCRC: TLabel;
    LabelEXEName: TLabel;
    ButtonCalc: TButton;
    GroupBoxSentinel: TGroupBox;
    LabelSentinel: TLabel;
    EditSentinel: TEdit;
    LabelCount: TLabel;
    ButtonCount: TButton;
    LabelHex: TLabel;
    LabelBytes: TLabel;
    LabelStatus: TLabel;
    LabelNote: TLabel;
    ButtonPatchEXE: TButton;
    LabelPatchInfo: TLabel;
    procedure ButtonCalcClick(Sender: TObject);
    procedure ButtonCountClick(Sender: TObject);
    procedure ButtonPatchEXEClick(Sender: TObject);
  private
    CRC32        :  INTEGER;
    SentinelValue:  INTEGER;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
  uses CRC32;
{$R *.DFM}

procedure TForm1.ButtonCalcClick(Sender: TObject);
  VAR
    iError     :  INTEGER;
    iTotalBytes:  INTEGER;
begin
  LabelEXEName.Caption := ParamStr(0);
  SentinelValue := StrToInt(EditSentinel.Text);

  CalcFileCRC32 (Paramstr(0), SentinelValue, CRC32,
                 iTotalBytes, iError);
  LabelCRCValue.Caption := IntToHex(CRC32, 2*SizeOf(INTEGER));
  LabelBytes.Caption := 'Bytes = ' + IntToStr(iTotalBytes);

  IF   CRC32 = CRCCheckArray[2]
  THEN LabelStatus.Caption := 'CRC Check OK'
  ELSE LabelStatus.Caption := 'CRC Check Failed';

  GroupBoxSentinel.Enabled := TRUE
end;

procedure TForm1.ButtonCountClick(Sender: TObject);
  VAR
    ByteCount    :  INTEGER;
    BytesRead    :  INTEGER;
    error        :  INTEGER;
    FromFile     :  FILE;
    i            :  INTEGER;
    IntegerBuffer:  ^TIntegerBuffer;
    IntegerCount :  INTEGER;
    IOBuffer     :  ^TByteBuffer;
    SentinelCount:  INTEGER;
    TotalBytes   :  INTEGER;
begin
  FileMode := 0;  {Turbo default is 2 for R/W; 0 is for R/O}
  AssignFile (FromFile, Paramstr(0));
  {$I-} RESET (FromFile,1); {$I+}
  error := IOResult;
  IF   error = 0
  THEN BEGIN
    SentinelValue := StrToInt(EditSentinel.Text);
    New (IOBuffer);      {Allocate the Buffer}
    ByteCount := 0;
    IntegerCount  := 0;
    SentinelCount := 0;
    REPEAT
      BlockRead (FromFile, IOBuffer^, SizeOf(TByteBuffer), BytesRead);

      IntegerBuffer := Addr(IOBuffer^);
      FOR i := 0 TO BytesRead DIV 4 - 1 DO
      BEGIN
        INC(IntegerCount);
        IF   IntegerBuffer^ = SentinelValue
        THEN INC(SentinelCount)
      END;

      INC (ByteCount, BytesRead)
    UNTIL BytesRead = 0;
    Closefile (FromFile);
    Dispose (IOBuffer);  {Free the Buffer}
  END;

  LabelHex.Caption := 'Hex = ' +  IntToHex(SentinelValue, 2*SizeOf(INTEGER));
  LabelCount.Caption := 'Bytes = ' + IntToStr(ByteCount) + ', Integers = ' +
                        IntToStr(IntegerCount) + ', Sentinels = ' +
                        IntToStr(SentinelCount)
end;

procedure TForm1.ButtonPatchEXEClick(Sender: TObject);
   VAR
    BytesRead    :  INTEGER;
    error1       :  INTEGER;
    error2       :  INTEGER;
    FromFile     :  FILE;
    i            :  INTEGER;
    IntegerBuffer:  ^TIntegerBuffer;
    IOBuffer     :  ^TByteBuffer;
    ReplaceFlag  :  BOOLEAN;
    SentinelCount:  INTEGER;
    ToFile       :  FILE;
begin
  FileMode := 0;  {Turbo default is 2 for R/W; 0 is for R/O}
  AssignFile (FromFile, Paramstr(0));
  {$I-} RESET (FromFile,1); {$I+}
  error1 := IOResult;

  AssignFile (ToFile, 'Patched.EXE');    {Hardwire for now}
  {$I-} REWRITE (ToFile, 1); {$I+}
  error2 := IOResult;

  IF   (error1 = 0) AND (error2 = 0)
  THEN BEGIN
    ReplaceFlag := FALSE;

    SentinelValue := StrToInt(EditSentinel.Text);
    New (IOBuffer);      {Allocate the Buffer}
    SentinelCount := 0;
    REPEAT
      BlockRead (FromFile, IOBuffer^, SizeOf(TByteBuffer), BytesRead);

      {Look at buffer and if sentinel found, replace next integer with
       CRC-32}
      IntegerBuffer := Addr(IOBuffer^);
      FOR i := 0 TO BytesRead DIV 4 - 1 DO
      BEGIN
        IF   ReplaceFlag
        THEN BEGIN
          IntegerBuffer^ := CRC32;
          ReplaceFlag := FALSE;
          INC (SentinelCount)
        END
        ELSE ReplaceFlag := (IntegerBuffer^ = CRCCheckArray[1])
      END;

      BlockWrite (ToFile, IOBuffer^, BytesRead)

    UNTIL BytesRead = 0;
    CloseFile (FromFile);
    CloseFile (ToFile);
    Dispose (IOBuffer);  {Free the Buffer}
  END;

  IF   SentinelCount = 1
  THEN LabelPatchInfo.Caption := 'One Integer Patched'
  ELSE LabelPatchInfo.Caption := 'CAUTION:  Integers Patched = ' +
                                 IntToStr(SentinelCount);
end;

end.

طبعاً ارجوا منكم تجربة الكود واعطائنا النتيجة :confused:

ومن يعرف كود يقوم بمثل هذه العملة فأرجوا منه ان يتفضل علينا بذلك

وتقبلوا اطيب تحياتي اخوكم

#2

السلام عليكم

حياك الله اخ SUM .

لو كان بالامكان تحسين الطريقة التي يظهر بها الكود . الكود كما يلاحظ مقلوب ( اخاف الافكار تدخل مقلوبة بعدين بيصير كل شي.... :D ) .

ملحوطة :

اين توجد CRC32 ؟ كيف يمكن الحصول عليها ؟

مشكور على فتح مثل هكذا موضوع .

تحياتي

هناك حتى الأحلام أصبحت ممنوعة ...

إنه لعار أن ننتمي لهكذا أوطان ... لكن ... ربما العار أن نكون نحن أبناء لتلكم أوطان .. من يدري ؟!!

ليعلم أولئك ... إنّ الشعوب إنْ هي استيقظت تسحق ظُلامََهَا ...

There, even in dreams u r wanted

To be a programmer, how a nice dream it was

Leaving ...

أعيدوا لإسمي لونه المفضل

#3

السلام عليكم

بالنسبة لمشكلة الكود استخدم code2 بدلا عن code

اما بالنسبة لـ crc32 ان لقيتها في هذا الموقع

http://homepages.borland.com/efg2lab/Library/Delphi/IO

ولقيت هناك الكود الذي تفضلت بنشره :) .

نفس المشكلة التي ذكرتها صادفتها . ان شاء الله سابحث فيها غدا .

في امان الله

هناك حتى الأحلام أصبحت ممنوعة ...

إنه لعار أن ننتمي لهكذا أوطان ... لكن ... ربما العار أن نكون نحن أبناء لتلكم أوطان .. من يدري ؟!!

ليعلم أولئك ... إنّ الشعوب إنْ هي استيقظت تسحق ظُلامََهَا ...

There, even in dreams u r wanted

To be a programmer, how a nice dream it was

Leaving ...

أعيدوا لإسمي لونه المفضل

#4

اهلاً وسهلاً بك اخي tmaaa

ومشكور على سرعة ردك

على العموم بالنسبة للكود انا متعني اجعله من اليمين

لأني قمت بجعل الكود من اليسار ولكن ظهرة السطور بجانب بعض وذلك بسبب كبر الكود واذا كنت تريد ان ترى عينه لذلك فانظر لهذه العينة ;) :

unit Execrcfm; 

interface 

uses 
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, 
Forms, Dialogs, StdCtrls; 

type 
TForm1 = class(TForm) 
GroupBoxEXEInfo: TGroupBox; 
LabelCRCValue: TLabel; 
LabelCRC: TLabel; 
LabelEXEName: TLabel; 
ButtonCalc: TButton; 
GroupBoxSentinel: TGroupBox; 
LabelSentinel: TLabel; 
EditSentinel: TEdit; 
LabelCount: TLabel; 
ButtonCount: TButton; 
LabelHex: TLabel; 
LabelBytes: TLabel; 
LabelStatus: TLabel; 
LabelNote: TLabel; 
ButtonPatchEXE: TButton; 
LabelPatchInfo: TLabel; 
procedure ButtonCalcClick(Sender: TObject); 
procedure ButtonCountClick(Sender: TObject); 
procedure ButtonPatchEXEClick(Sender: TObject); 
private 
CRC32 : INTEGER; 
SentinelValue: INTEGER; 
public 
{ Public declarations } 
end; 

var 
Form1: TForm1; 

implementation 
uses CRC32; 
{$R *.DFM} 

procedure TForm1.ButtonCalcClick(Sender: TObject); 
VAR 
iError : INTEGER; 
iTotalBytes: INTEGER; 
begin 
LabelEXEName.Caption := ParamStr(0); 
SentinelValue := StrToInt(EditSentinel.Text); 

CalcFileCRC32 (Paramstr(0), SentinelValue, CRC32, 
iTotalBytes, iError); 
LabelCRCValue.Caption := IntToHex(CRC32, 2*SizeOf(INTEGER)); 
LabelBytes.Caption := 'Bytes = ' + IntToStr(iTotalBytes); 

IF CRC32 = CRCCheckArray[2] 
THEN LabelStatus.Caption := 'CRC Check OK' 
ELSE LabelStatus.Caption := 'CRC Check Failed'; 

GroupBoxSentinel.Enabled := TRUE 
end; 

procedure TForm1.ButtonCountClick(Sender: TObject); 
VAR 
ByteCount : INTEGER; 
BytesRead : INTEGER; 
error : INTEGER; 
FromFile : FILE; 
i : INTEGER; 
IntegerBuffer: ^TIntegerBuffer; 
IntegerCount : INTEGER; 
IOBuffer : ^TByteBuffer; 
SentinelCount: INTEGER; 
TotalBytes : INTEGER; 
begin 
FileMode := 0; {Turbo default is 2 for R/W; 0 is for R/O} 
AssignFile (FromFile, Paramstr(0)); 
{$I-} RESET (FromFile,1); {$I+} 
error := IOResult; 
IF error = 0 
THEN BEGIN 
SentinelValue := StrToInt(EditSentinel.Text); 
New (IOBuffer); {Allocate the Buffer} 
ByteCount := 0; 
IntegerCount := 0; 
SentinelCount := 0; 
REPEAT 
BlockRead (FromFile, IOBuffer^, SizeOf(TByteBuffer), BytesRead); 

IntegerBuffer := Addr(IOBuffer^); 
FOR i := 0 TO BytesRead DIV 4 - 1 DO 
BEGIN 
INC(IntegerCount); 
IF IntegerBuffer^ = SentinelValue 
THEN INC(SentinelCount) 
END; 

INC (ByteCount, BytesRead) 
UNTIL BytesRead = 0; 
Closefile (FromFile); 
Dispose (IOBuffer); {Free the Buffer} 
END; 

LabelHex.Caption := 'Hex = ' + IntToHex(SentinelValue, 2*SizeOf(INTEGER)); 
LabelCount.Caption := 'Bytes = ' + IntToStr(ByteCount) + ', Integers = ' + 
IntToStr(IntegerCount) + ', Sentinels = ' + 
IntToStr(SentinelCount) 
end; 

procedure TForm1.ButtonPatchEXEClick(Sender: TObject); 
VAR 
BytesRead : INTEGER; 
error1 : INTEGER; 
error2 : INTEGER; 
FromFile : FILE; 
i : INTEGER; 
IntegerBuffer: ^TIntegerBuffer; 
IOBuffer : ^TByteBuffer; 
ReplaceFlag : BOOLEAN; 
SentinelCount: INTEGER; 
ToFile : FILE; 
begin 
FileMode := 0; {Turbo default is 2 for R/W; 0 is for R/O} 
AssignFile (FromFile, Paramstr(0)); 
{$I-} RESET (FromFile,1); {$I+} 
error1 := IOResult; 

AssignFile (ToFile, 'Patched.EXE'); {Hardwire for now} 
{$I-} REWRITE (ToFile, 1); {$I+} 
error2 := IOResult; 

IF (error1 = 0) AND (error2 = 0) 
THEN BEGIN 
ReplaceFlag := FALSE; 

SentinelValue := StrToInt(EditSentinel.Text); 
New (IOBuffer); {Allocate the Buffer} 
SentinelCount := 0; 
REPEAT 
BlockRead (FromFile, IOBuffer^, SizeOf(TByteBuffer), BytesRead); 

{Look at buffer and if sentinel found, replace next integer with 
CRC-32} 
IntegerBuffer := Addr(IOBuffer^); 
FOR i := 0 TO BytesRead DIV 4 - 1 DO 
BEGIN 
IF ReplaceFlag 
THEN BEGIN 
IntegerBuffer^ := CRC32; 
ReplaceFlag := FALSE; 
INC (SentinelCount) 
END 
ELSE ReplaceFlag := (IntegerBuffer^ = CRCCheckArray[1]) 
END; 

BlockWrite (ToFile, IOBuffer^, BytesRead) 

UNTIL BytesRead = 0; 
CloseFile (FromFile); 
CloseFile (ToFile); 
Dispose (IOBuffer); {Free the Buffer} 
END; 

IF SentinelCount = 1 
THEN LabelPatchInfo.Caption := 'One Integer Patched' 
ELSE LabelPatchInfo.Caption := 'CAUTION: Integers Patched = ' + 
IntToStr(SentinelCount); 
end; 

end.

فكما ترى يظهر الكود متلاصق :)

هذا بالنسبة لظهور الكود اما بالنسبة لوحدة crc32 فهي في الحقيقة جننتي :mad:

لأنه كما تعرف ان وحدة crc تأتي في الغالب على نوعين هما 16 و 32 وهي توجد على اشكال عدة ببرمجة مختلفة ومن ضمن استخدامتها هذه الوحدة التشفير و طبعاً قمت بالبحث عن هذه الوحدة ووجدة اشكال عديدة لها ولكن للأسف لم اجد اي شكل من تلك الأشكال تتوافق مع الكود السابق :) وخاصة مع CalcFileCRC32 وطبعاً لم ابحث بحث معمق ولا كن كان بحث بسيط لأنه لم يكن لدي وقت على العموم لا اريد ان اطيل الكلام ولكن سأعطيك بعض المواقع التي توجد بعض اكواد crc واليك بعض منها :

http://bsdg.org/swag/CRC/index.html

http://homepages.borland.com/efg2lab/Mathe...ematics/CRC.htm

http://homepages.borland.com/efg2lab/Mathe...s/FileCheck.htm

وهذه بعض المواضيع التي وجدتها تتكلم وكذلك توجد اكواد عن crc

طبعاً يمكنك الطلاع عليها جيداً لأني في الحقيقة لم ابحث فيها جيداً

وتقبلوا اطيب تحياتي اخوكم SUM

#5

السلام عليكم

:D ;)

سبقت و ذكرت الوصلة . كيف انا خطير في البحث ؟ .( امزح معاك ) .

ان شاء الله نشوف حل للمشكلة . بس انا اليوم مرهق جدا .

هناك حتى الأحلام أصبحت ممنوعة ...

إنه لعار أن ننتمي لهكذا أوطان ... لكن ... ربما العار أن نكون نحن أبناء لتلكم أوطان .. من يدري ؟!!

ليعلم أولئك ... إنّ الشعوب إنْ هي استيقظت تسحق ظُلامََهَا ...

There, even in dreams u r wanted

To be a programmer, how a nice dream it was

Leaving ...

أعيدوا لإسمي لونه المفضل

#6

الصحيح انك خطييييييييييييييييير

كيف رديت علي بهذه السرعة الصحيح انك فاجئتني لما نزلت المشاركة ورجعت الى الصفحة الرئيسية للدلفي وجدتك ردت علي ;)

ولما قرأت ردك و لما عدلت ظهور الكود على كلامك الى Code2 تفاجئت ايضاً بردك الثاني

ودليل سرعتك ان المنتدى لخبط حط ردك فوق ردي ;) روح شوف ردي وين صار :D

وتسلم والله على المجهود والى الأمام

وتقبل اطيب تحياتي اخوكم SUM

#7

ابشرك وجدت اكواد اخرى بس ماادري هل تبغا تضبط معنا ولا لا :(

شوف هذا الأكود الأول :

http://bsdg.org/swag/ENCRYPT/0012.PAS.html

طبعاً مااضن ان هذا الكود يبغا يصلح لأني على مااعتقد انه كود للتشفير بس انا وضعته لكي تجربونه لأنه في الحقيقة ماقدرت اشغله ( لأنه يحتاج crc ومع اني وجدتها بس لكن مافضيت اركبها واذا اردتوا مكان الوحدة crc لهذه الكود راح تلاقونها في مقالي السابق )

وهذا الكود الثاني :

http://wuarchive.wustl.edu/systems/ibmpc/g...a1/patchexe.zip

طبعاً هذا الكود على لغة باسكال وماقدرت اجربه لأنه يلزم اني اركب لغة باسكال لهذا لو امكن انكم تجربونه وتعطونا النتيجة

( طبعاً انا مااهتمية بهذا الكود لأنه راح يعمل على الدوس )

وإن شاء الله راح احاول انقل الكود للدلفي طبعاً اذا كان هو الكود المطلوب :)

وهذا الكود الثالث وهو الأهم :

http://ckb.dhs.org/cgi-bin/ckb.pl?mode=sea...string=Patchexe

طبعاً الوصلة مااشتغلت معاي ممكن لو تتكرم يااخ tmaaa وتجربها لنا وتعطينا النتايج وعسى إن شاء الله انها تكون هي المراد

وفي الختام تقبلوا اطيب تحياتي اخوكم SUM

#8

السلام عليكم

ان شاء الله راح اجربهم .

بس الان الساعة الثانيه عندنا . مو قادر اركز .

:D :D :D

مشكور اخ SUM .

تحياتي

هناك حتى الأحلام أصبحت ممنوعة ...

إنه لعار أن ننتمي لهكذا أوطان ... لكن ... ربما العار أن نكون نحن أبناء لتلكم أوطان .. من يدري ؟!!

ليعلم أولئك ... إنّ الشعوب إنْ هي استيقظت تسحق ظُلامََهَا ...

There, even in dreams u r wanted

To be a programmer, how a nice dream it was

Leaving ...

أعيدوا لإسمي لونه المفضل

#9

اخ SUM يمكنني مساعدتك

d4baa0.gif
#10

السلام عليكم ورحمة الله وبركاته .

الصراحة الموضوع شيق جاري المتابعة والبحث والتجربة .............

والله ولي التوفيق.

أخوكم أبو النور.

********************************************************************************

آخر وصايا سيدنا محمد صلى الله عليه وسلم:الصلاة الصلاة وما ملكت أيمانكم

66850879_b6e633000d_m.jpg

هاجر اللذائذ وانبـرى ليثـاً بادغـال الشـرا

بـاع الحيـاة رخيـصـة لله والله اشـتـرى

خذو مني فؤادي وامنحوني سلاحي أمتطي صهو المنون

فإني لم أعش لأذوق ذلاً ولا لأذوب في حضن حنون

موقع الفريق الاسلامي المتحد للبرمجة والإلكترونيات

إيميلي هو:Aboalnoor@maktoob.com

ياهو :adnanalabuo@yahoo.com

هوت ميل:AdnanAlabuo@hotmail.com

مدونتي الخاصة

#11
اقتباس
ادراج ملف داخل تشغيلي مع تشغيلة اثناء تشغيل الملف التشغيلي

في الحقيقة لم أستطع فهم هذه العبارة أبدا :P

ولكن وبعد قراءة الكود المرفق أظن أن المهمة هي فحص قيمة CRC32 للملف التنفيذي لضمان عدم تغيره نتيجة أحد الفيروسات

وما زلت لا أفهم تلك العبارة :P ربما لكثرة مشتقات كلمة تشغيل فيها :D

بإمكانك الاستغناء عن وحدة CRC32 والتي تحوي تابع CalcFileCRC32 وذلك باستخدام أي تابع CRC (ربما تكتبه بنفسك) فالمهم هو استنتاج قيمة CRC32 للملف (البرنامج في حالتنا هذه)

تم تعديل هذه المشاركة بواسطة fh_feras في 28 يوليو 2006 في 04:33

#12

مثال عن تابع يعيد قيمة CRC32 لملف معين

//---------------------------------------------------------------------------
#define _BUFFER_SIZE	10240
//---------------------------------------------------------------------------
const DWORD giCRCTable[256] =
{
  0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5,
  0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3,
  0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,
  0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0,
  0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,
  0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,
  0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457,
  0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C, 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252,
  0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF,
  0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D,
  0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE,
  0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,
  0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45,
  0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB,
  0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,
  0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,
  0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086,
  0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F, 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4,
  0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,
  0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,
  0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,
  0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,
  0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60,
  0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,
  0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04,
  0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A,
  0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,
  0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E,
  0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8,
  0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE,
  0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7,
  0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924
};
//---------------------------------------------------------------------------
DWORD __fastcall CalcCRC32(char * FileName)
{
  BYTE  ccBuf[_BUFFER_SIZE];
  DWORD ciCRC32 = 0xFFFFFFFF;
  int ciLength;
  TFileStream * pFile = new TFileStream(FileName, fmOpenRead | fmShareDenyNone);
  while ( ciLength = pFile->Read(ccBuf, _BUFFER_SIZE) )
  {
	for ( int i = 0; i < ciLength; i++ )
	{
	  ciCRC32 = (ciCRC32 >> 8) ^ giCRCTable[ccBuf ^ (ciCRC32 & 0x000000FF)];
	}
  }
  delete pFile;
  ciCRC32 = ~ciCRC32;
  return ciCRC32;
}
//---------------------------------------------------------------------------
#13

الله على مواضيع زمان Apr 23 2002, 05:13 AM

بس مااعرف ليش رفع الموضوع

tmaaa موجود :)

هذا الموضوع مغلق.