PDA

View Full Version : بدست آوردن header فایل



Mask
شنبه 30 آبان 1388, 19:34 عصر
با سلام به همه دوستان عزیز
اول می خاستم اگه ممکنه دوستان بنده رو راهنمایی بفرمایند هدر فایل چیه؟
دوم چطوری با دلفی باید بدست آورد؟
آیا هدر هر فایلی مربوط به خودشه؟
یعنی ممکن نیست دوتا فایل هدرشون مثل هم باشه؟
و آیا میشه هدر فایل رو مثل اثر انگشت انسانها فرض کرد؟
یعنی یه فایل رو از رو هدرش تشخیص داد؟
ممنون اگه راهنماییم کنید:قلب:

vcldeveloper
شنبه 30 آبان 1388, 21:08 عصر
Header چه فایلی؟ چیز تحت عنوان Header فایل به صورت یک الزام وجود نداره. بعضی فرمت های فایل ممکن هست به تناسب نیاز آن فرمت بخش از فضای ابتدایی فایل را به عنوان Header فایل در نظر بگیرند، و در آن اطلاعاتی درباره نوع فایل یا محتوای فایل ذخیره کنند. مثلا یک فرمت گرافیکی ممکن هست عمق رنگ تصویر ذخیره شده، یا الگوریتم فشرده سازی استفاده شده در یک فایل را در ابتدای فایل در یک ساختار مشخص درج کنه.

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

Mask
دوشنبه 02 آذر 1388, 17:59 عصر
Header چه فایلی؟ چیز تحت عنوان Header فایل به صورت یک الزام وجود نداره. بعضی فرمت های فایل ممکن هست به تناسب نیاز آن فرمت بخش از فضای ابتدایی فایل را به عنوان Header فایل در نظر بگیرند، و در آن اطلاعاتی درباره نوع فایل یا محتوای فایل ذخیره کنند. مثلا یک فرمت گرافیکی ممکن هست عمق رنگ تصویر ذخیره شده، یا الگوریتم فشرده سازی استفاده شده در یک فایل را در ابتدای فایل در یک ساختار مشخص درج کنه.

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

ممنون از جوابتون
من منظورم فایلهای اجرایی با پسوند exe cmd bat com هست یا dll ها.
من جستجو کردم و متوجه شدم فایلهای exe دارای دو قسمت هدر و سشن هستن.
خوب حالا با این تفاسیر...
اولا آیا نوشتن هدر فایلمون (منظورم همون exe هست) دست خودمونه؟ اگه بله چطوری باید داخل هدر فایل نوشت؟
چطوری باید هدر فایل رو خوند؟
و سوالات قبلیم هم هنوز هست...
یا هدر هر فایلی مربوط به خودشه؟
یعنی ممکن نیست دوتا فایل هدرشون مثل هم باشه؟
و آیا میشه هدر فایل رو مثل اثر انگشت انسانها فرض کرد؟
یعنی یه فایل رو از رو هدرش تشخیص داد؟
لطفا منو راهنمایی کنید.
ممنون.

tdkhakpur
دوشنبه 02 آذر 1388, 21:04 عصر
اولا آیا نوشتن هدر فایلمون (منظورم همون exe هست) دست خودمونه؟ اگه بله چطوری باید داخل هدر فایل نوشت؟

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

چطوری باید هدر فایل رو خوند؟

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

یا هدر هر فایلی مربوط به خودشه؟

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

یعنی ممکن نیست دوتا فایل هدرشون مثل هم باشه؟

شاید باشد و شاید هم نباشد

و آیا میشه هدر فایل رو مثل اثر انگشت انسانها فرض کرد؟

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

یعنی یه فایل رو از رو هدرش تشخیص داد؟
ولی مثل اینکه جواب سوالها را می دانستید دلیلش هم اینکه با پرسش جواب را هم ارائه میدید.:لبخندساده:
جواب سوال بالای شما هم در حالت استاندارد بله هست.

vcldeveloper
دوشنبه 02 آذر 1388, 21:08 عصر
اولا آیا نوشتن هدر فایلمون (منظورم همون exe هست) دست خودمونه؟ اگه بله چطوری باید داخل هدر فایل نوشت؟
کامپایلر این کار رو برای شما انجام میده، و Header فایل را برای شما می نویسه.


چطوری باید هدر فایل رو خوند؟
برای این مدل از فایل ها (فایل های EXE و DLL)، درباره Portable Executable (http://www.google.com/search?q=Windows+PE+files&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a) یا همان فایل های PE تحقیق کنید.


یعنی ممکن نیست دوتا فایل هدرشون مثل هم باشه؟
ممکنه


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

Mask
سه شنبه 03 آذر 1388, 18:26 عصر
ممنون از شما دوستان عزيز
كليه سوالات به اين دليله كه مي خام دوتا فايل exe يا dll با يك اسم و پسوند و سايز را از هم تشخيص بدم.
مي خام بدونم آيا هدر فايل گزينه خوبيه براي اين كار؟
اگه بله كه تحقيق رو ادامه بدم... و اگه نه روشي ديگر رو بهم بفرماييد.

vcldeveloper
چهارشنبه 04 آذر 1388, 01:03 صبح
كليه سوالات به اين دليله كه مي خام دوتا فايل exe يا dll با يك اسم و پسوند و سايز را از هم تشخيص بدم.
ساختار فایل های EXE و DLL مثل هم هست. فایل های EXE معمولا Export Table ندارند، و وجود همچین جدولی در فایل های EXE نادر هست. اما DLLها معمولا Export Table دارند، ولی نه همیشه، مثلا یک DLL میتونه صرفا یک Resource DLL باشه، و Export Tableایی نداشته باشه.
اگر مطمئن هستید که DLL مورد نظر شما حتما تابع یا توابعی برای Export کردن ارائه میکنه، و Resource DLL نیست، می تونید با بررسی وجود بخش edata. در فایل مربوطه (همون Export Table) متوجه بشید که آیا فایل مربوطه EXE هست یا DLL.

vahid64
چهارشنبه 04 آذر 1388, 10:38 صبح
ساختار فایل های EXE و DLL مثل هم هست. فایل های EXE معمولا Export Table ندارند، و وجود همچین جدولی در فایل های EXE نادر هست. اما DLLها معمولا Export Table دارند، ولی نه همیشه، مثلا یک DLL میتونه صرفا یک Resource DLL باشه، و Export Tableایی نداشته باشه.
من فکر کنم منظور دوستمون مقایسه دو تا فایل exe با هم یا دو تا dll با هم بود در هر صورت اطلاعات خوبی تو این تاپیک ارائه شده.
در مورد dll اطلاع کافی ندارم اما در مورد exe ها باید کامپایلر سازنده exe رو بررسی کنی چون علاوه بر چیزهای عمومی مثل آدرس شروع و فرمت و حجم فایل و این چیزا یه سری اطلاعات خاص دیگر در هدر ذخیره می شود که بستگی به کامپایلر دارد مثلاً اطلاعات مربوط به یه سری متغیر های خاص استفاده شده در برنامه...
در مجموع با توجه به توضیحی که دادین فکر نمی کنم این کار برای منظور شما مناسب باشه

Mask
پنج شنبه 05 آذر 1388, 07:24 صبح
من فکر کنم منظور دوستمون مقایسه دو تا فایل exe با هم یا دو تا dll با هم بود در هر صورت اطلاعات خوبی تو این تاپیک ارائه شده.
ممنون از دوستان
منظور بنده دقیقا همین بود که دوستمون فرمودند.
راستی آقا وحید منظورت از این چیه؟
یه مثال می زنم که دوستان بهتر متوجه بشند.
دودتا فایل exe من با دلفی درست کردم به نام ali.exe
هر دو با یک اسم و پسوند و یک سایز.
اما محتویاتشون با هم فرق میکنه. فایل اولی مثلا مسیر system32 رو میریزه داخل یه متغیر و فایل دوم مسیر temp رو میریزه داخل یه متغیر.
حالا از چه گزینه ای باید استفاده کنم که متوجه بشم این دوتا فایل با هم فرق دارند؟
رفتم سراغ هدر فایل... با توضیحاتی که دوستان دادند به نظرم چون کامپایلر این دوتا برنامه دلفیه پس هدراشون شبیه به همه.
از چه خصوصیتی از فایل باید استفاده کنم که بفهمم این دوتا فیل با هم فرق دارند.
ممنون.

vcldeveloper
پنج شنبه 05 آذر 1388, 10:19 صبح
از چه خصوصیتی از فایل باید استفاده کنم که بفهمم این دوتا فیل با هم فرق دارند.
هیچی، از فایل ها Hash Code (مثلا MD5) بگیرید، اگر Hash Code ها فرق داشتند، یعنی فایل ها فرق می کنند.

Mask
پنج شنبه 05 آذر 1388, 15:22 عصر
هیچی، از فایل ها Hash Code (مثلا MD5) بگیرید، اگر Hash Code ها فرق داشتند، یعنی فایل ها فرق می کنند.
ممنون. منظورتون از هیچی چیه؟

از فایل ها Hash Code (مثلا MD5) بگیرید، اگر Hash Code ها فرق داشتند، یعنی فایل ها فرق می کنند.
میشه لطف کنید یه نمونه بزارید؟
ممنون.

tdkhakpur
پنج شنبه 05 آذر 1388, 16:13 عصر
شما هدر هر دو فایل را بخوانید مثلا 256 بایت اول از هر دو فایل را بخوانید و با هم مقایسه کنید اگر داخل حتی یک بایت با هم اختلاف داشتند نتیجه بگیرید که این دو فایل با هم متفاوت هستند.(البته فقط فایلهای اجرایی )
MD5 نوعی رمز گذاری داده هاست.
http://www.fastsum.com/support/md5-checksum-utility-faq/md5-hash.php

farid_mov2006
پنج شنبه 05 آذر 1388, 18:29 عصر
ساختار فایل های EXE و DLL مثل هم هست. فایل های EXE معمولا Export Table ندارند، و وجود همچین جدولی در فایل های EXE نادر هست. اما DLLها معمولا Export Table دارند، ولی نه همیشه، مثلا یک DLL میتونه صرفا یک Resource DLL باشه، و Export Tableایی نداشته باشه.
اگر مطمئن هستید که DLL مورد نظر شما حتما تابع یا توابعی برای Export کردن ارائه میکنه، و Resource DLL نیست، می تونید با بررسی وجود بخش edata. در فایل مربوطه (همون Export Table) متوجه بشید که آیا فایل مربوطه EXE هست یا DLL.

با سلام
من چنتا سوال ساده دارم{مبتدی هستم}:افسرده:
1/export table چیه؟
2/فایل dll چیه؟چه کاربردی داره؟:لبخند:

vcldeveloper
پنج شنبه 05 آذر 1388, 21:07 عصر
منظورتون از هیچی چیه؟
یعنی کار خاصی لازم نیست انجام بدید، یک چک کردن Hash Code کفایت میکنه.


میشه لطف کنید یه نمونه بزارید؟
تابع MD5 در اینترنت زیاد هست، شما می تونید فرضا TurboPower LockBox را دانلود کنید، و با استفاده از کامپوننت MD5 آن، Hash Code یک فایل را به دست بیارید. کامپوننتش رایگان هست، در مثال های خودش برای Hash Code گرفتن از فایل مثال زده.


من چنتا سوال ساده دارم{مبتدی هستم}:افسرده:
1/export table چیه؟
یک PE File (فرمت فایل های اجرایی در ویندوز) از بخش های مختلفی تشکیل شده که یکی از اون بخش ها Export Table هست. Export Table مشخص میکنه که چه توابعی از DLL قابل استخراج توسط سایر برنامه ها هستند.



/فایل dll چیه؟چه کاربردی داره؟

بطور خیلی خلاصه و مختصر؛ DLLها فایل هایی در سیستم عامل ویندوز هستند که در نقش کتابخانه های اشتراکی به کار گرفته میشند؛ یعنی یک برنامه میتونه برخی از قابلیت های خودش را در یک DLL قرار بده تا سایر برنامه ها هم از آن قابلیت ها استفاده کنند. البته DLL یک مزیت دیگه هم داره، آن هم اینکه برنامه میتونه بصورت ماجولار طراحی بشه، و هر بخش از برنامه در داخل یک یا چند DLL قرار بگیرند. این حالت بخصوص زمانی که لازم باشه برنامه آپدیت بشه، بسیار مفید هست، چون برای آپدیت یک قابلیت فقط کافی هست DLL مربوط به همان قابلیت آپدیت بشه، نه کل برنامه. سیستم عامل ویندوز استفاده گسترده ایی از DLLها میکنه. معمولا وقتی آپدیت جدیدی برای ویندوز ارائه میشه، این آپدیت حاوی یک سری DLL هست که جایگزین DLLهای فعلی میشه. همچنین قابلیت های مختلف سیستم عامل از طریق DLLهای ارائه شده در اختیار برنامه ها قرار داده میشند.

Mask
جمعه 06 آذر 1388, 00:40 صبح
یعنی کار خاصی لازم نیست انجام بدید، یک چک کردن Hash Code کفایت میکنه.
شرمنده اینقدر سوال می پرسم...
اگه دوتا فایل exe به صورت داینامیک متغیر هاشون رو مقدار دهی کنند وقتی Hash Code شون رو بگیریم با هم فرق می کنند.
اینطور نیست؟
مثلا فایل exe اول مسیر system32 رو داخل درایو c پیدا می کنه و همین فایل در یه سیستم دیگه در درایو d پیدا می کنه. پس چون از بیرون مقدار دهی میشه پس Hash Code هاشون با هم فرق پیدا می کنند.
آیا این طور نیست؟
ممنون.

vcldeveloper
جمعه 06 آذر 1388, 00:56 صبح
مثلا فایل exe اول مسیر system32 رو داخل درایو c پیدا می کنه و همین فایل در یه سیستم دیگه در درایو d پیدا می کنه. پس چون از بیرون مقدار دهی میشه پس Hash Code هاشون با هم فرق پیدا می کنند.
آیا این طور نیست؟
خیر، اینطور نیست. فایل با Process فرق میکنه. فایل شما حاوی یکسری کد و داده ثابت هست، وقتی در حافظه بارگزاری شد، میشه Process. این process شروع میکنه به اجرای کدهای موجود در فایل، و در صورت نیاز، داده هایی رو بصورت دینامیک در فضای آدرس خودش بارگزاری میکنه. اینکه Process در حال اجرا چه داده هایی را در فضای آدرس خودش بارگزاری میکنه، ربطی به Hash Code فایل موجود بر روی دیسک نداره. Hash Code فایل موجود بر روی دیسک ثابت هست، مگر اینکه فایل روی دیسک تغییر کنه.

Mask
شنبه 07 آذر 1388, 11:58 صبح
ممنون از دوست خوبم آقای کشاورز
به هر ترتیبی بود TurboPower LockBox رو پیدا کردم اما کدی در مورد تبدیل فایل به hash code داخلش نیست.
لینک دانلود...
http://www.4shared.com/file/161294923/c8d2eafa/TurboPower_LockBox.html

در ضمن یه جای دیگه یه تابع پیدا کردم که مدعی بود این کار رو انجام میده اما باز اینم نشد.
تابع:

unit md5;

interface

type
MD5Digest = array[0..15] of Byte;
MD5State = array[0..3] of LongWord;
MD5Buffer = array[0..63] of Byte;

TMD5 = class
private
FState: MD5State;
FCount: Int64;
FBuffer: MD5Buffer;
public
constructor Create;
procedure Update(const Input; Length: Cardinal);
function Final: MD5Digest;
end;


function MD5Message(const Message; Length: Cardinal): MD5Digest;
function MD5String(const S: string): MD5Digest;
function MD5File(const FileName: string): MD5Digest;

function MD5Print(const D: MD5Digest): string;


implementation

{$IFDEF MSWINDOWS}
uses
Windows;
{$ENDIF}


function ROL(X: LongWord; Count: Integer): LongWord;
{$IFDEF PUREPASCAL}
begin
Result := (X shl Count) or (X shr (32 - Count));
end;
{$ELSE}
asm
MOV ECX,EDX
ROL EAX,CL
end;
{$ENDIF}


type
MD5Iters = 0..63;

var
k: array[MD5Iters] of Integer;
T: array[MD5Iters] of LongWord;
s: array[MD5Iters] of Integer;

procedure InitLUTs;
const
A: array[0..15] of Integer =
(
7, 12, 17, 22,
5, 9, 14, 20,
4, 11, 16, 23,
6, 10, 15, 21
);
var
I: Integer;
begin
for I := 0 to 63 do
begin
case I of
0..15: k[i] := I;
16..31: k[i] := (5 * I + 1) and $f;
32..47: k[i] := (3 * I + 5) and $f;
48..63: k[i] := (7 * I) and $f;
end;
T[i] := Trunc(Abs(Sin(I + 1)) * $100000000);
s[i] := A[I shr 2 and $c or I and $3];
end;
end;

// MD5 basic transformation. Transforms state based on block.

procedure Transform(var State: MD5State; const Block);
var
X: array[0..15] of LongWord absolute Block;
a, b, c, d, i, f, temp: LongWord;
begin
f := 0;
a := State[0];
b := State[1];
c := State[2];
d := State[3];
for i := 0 to 63 do
begin
case i of
0..15: f := d xor (b and (c xor d));
16..31: f := c xor (d and (b xor c));
32..47: f := b xor c xor d;
48..63: f := c xor (b or (not d));
end;
temp := d;
d := c;
c := b;
Inc(b, ROL(a + f + X[k[i]] + T[i], s[i]));
a := temp;
end;
Inc(State[0], a);
Inc(State[1], b);
Inc(State[2], c);
Inc(State[3], d);
end;


{ TMD5 }

constructor TMD5.Create;
begin
FState[0] := $67452301;
FState[1] := $efcdab89;
FState[2] := $98badcfe;
FState[3] := $10325476;
end;

type
Bytes = array[0..0] of Byte;

procedure TMD5.Update(const Input; Length: Cardinal);
var
I, Index, PartLen: Cardinal;
begin
Index := FCount and $3f;
Inc(FCount, Length);
PartLen := 64 - Index;
if Length >= PartLen then
begin
Move(Input, FBuffer[Index], PartLen);
Transform(FState, FBuffer);
I := PartLen;
while I + 63 < Length do
begin
Transform(FState, Bytes(Input)[i]);
Inc(I, 64);
end;
Index := 0;
end
else
I := 0;
Move(Bytes(Input)[i], FBuffer[Index], Length - I);
end;

function TMD5.Final: MD5Digest;
var
BitLength: Int64;
Padding: MD5Buffer;
PadLen: Integer;
begin
BitLength := FCount shl 3;
PadLen := (119 - FCount and $3f) and $3f + 1;
FillChar(Padding, PadLen, 0);
Padding[0] := $80;
Update(Padding, PadLen);
Update(BitLength, SizeOf(Int64));
Result := MD5Digest(FState);
Free;
end;


// ----------------------------------------------------------------------------

function MD5Message(const Message; Length: Cardinal): MD5Digest;
begin
with TMD5.Create do
try
Update(Message, Length);
Result := Final;
except
Free;
raise;
end;
end;

function MD5String(const S: string): MD5Digest;
begin
Result := MD5Message(Pointer(S)^, Length(S));
end;

function MD5File(const FileName: string): MD5Digest;
{$IFDEF MSWINDOWS}
var
FileHandle: THandle;
MapHandle: THandle;
ViewPointer: Pointer;
{$ENDIF}
begin
FillChar(Result, SizeOf(MD5Digest), 0);
{$IFDEF MSWINDOWS}
FileHandle := CreateFile(PChar(FileName), GENERIC_READ, FILE_SHARE_READ or
FILE_SHARE_WRITE, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL or
FILE_FLAG_SEQUENTIAL_SCAN, 0);
if FileHandle <> INVALID_HANDLE_VALUE then
try
MapHandle := CreateFileMapping(FileHandle, nil, PAGE_READONLY, 0, 0, nil);
if MapHandle <> 0 then
try
ViewPointer := MapViewOfFile(MapHandle, FILE_MAP_READ, 0, 0, 0);
if ViewPointer <> nil then
try
Result := MD5Message(ViewPointer^, GetFileSize(FileHandle, nil));
finally
UnmapViewOfFile(ViewPointer);
end;
finally
CloseHandle(MapHandle);
end;
finally
CloseHandle(FileHandle);
end;
{$ENDIF}
end;


function MD5Print(const D: MD5Digest): string;
const
Digits: array[0..15] of Char =
('0','1','2','3','4','5','6','7','8','9','a','b',' c','d','e','f');
var
I: Integer;
TempStr: string[32];
begin
TempStr := '';
for I := 0 to 15 do
TempStr := TempStr + Digits[D[i] shr 4] + Digits[D[i] and $f];
Result := TempStr;
end;


initialization
InitLUTs;

end.

procedure TForm1.Button1Click(Sender: TObject);
var
hold:MD5Digest;
begin
hold:=MD5String('younes');
Edit1.text:=MD5Print(hold);
end;
یا...
http://barnamenevis.org/forum/showthread.php?p=675808
ویه سوا اینکه آیا dll ها رو هم مثل فایل exe میشه به hash code تبدیل کرد؟
و یه سوال اینکه آیا اسم فایل در hashcodeخروجی تاثیر داره؟
شرمنده خیلی سوال کردم.
ممنون.

vahid64
شنبه 07 آذر 1388, 12:44 عصر
منظورم از این تاپیک ، همین تاپیک بود به عبارتی در مجموع سوال جواب ها اطلاعات خوبی رد و بدل شده.
سوال شما رو هم من متوجه شدم تا جایی که سواد کم من می رسه این مسئله رو از روی هدر هرگز نمیشه فهمید و شما باید exe رو به کد اسمبلی تبدیل کنید بعد از رو کد بفهمید تفاوت فایل ها رو همونطور که گفتم این کار خیلی زمان بر هست اما در کامپیوتر کار نشد نداره باید ببینی می ارزه وقت بزاری برای اینکار یا نه ؟

vcldeveloper
یک شنبه 08 آذر 1388, 02:02 صبح
به هر ترتیبی بود TurboPower LockBox رو پیدا کردم اما کدی در مورد تبدیل فایل به hash code داخلش نیست.
هست، این هم یک نمونه سورس کد درباره چگونگی به دست آوردن لیست فایل های یک پوشه، و MD5 Hash Code آنها با استفاده از LockBox:
http://www.barnamenevis.org/forum/downloads.php?do=file&id=53

اگر احساس می کنید MD5 برای منظور شما کند هست، می تونید:
1- از پیاده سازی های دیگه MD5 بجای LockBox استفاده کنید، که عملکرد سریعتری دارند.
2- عمل Hash کردن فایل ها را در چند Thread بصورت Multi-threaded انجام بدید.
3- از الگوریتم های تولید Hash ایی که ساده تر از MD5 هستند، و سرعت بیشتری دارند، استفاده کنید.

Mask
دوشنبه 09 آذر 1388, 17:40 عصر
ممنون آقای کشاورز.
اجازه دانلو بهم نمیده... همش میگه




یواش تر! شما دارید خیلی سریع فایل ها را دانلود می کنید. شما میبایست پیش از دانلود فایل های دیگر 35 ثانیه منتظر بمانید.


یه نیمساعتی باز نشستم. بازم همین میاد.
لطفا یه جای دیگه up کنید.
ممنون دوست عزیز.

vcldeveloper
دوشنبه 09 آذر 1388, 18:19 عصر
اجازه دانلو بهم نمیده...
من مشکلی با دانلودش ندارم؛ ولی اینجا هم آپلود می کنم.

Mask
چهارشنبه 11 آذر 1388, 17:07 عصر
من مشکلی با دانلودش ندارم؛ ولی اینجا هم آپلود می کنم.
ممنون از شما دوست عزیز.
دانلود کردم.
اما یه سوال مت سورس برنامه رو میزارم اینجا. میشه توضیح بدید از ابتدا چی میشه یا خط به خط بگید چطوری برنامه کار می کنه.
چون من می خام روش کار رو بفهمم نه اینکه کپی پیست کنم.
ممنون از لطفتون.

unit fMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, LbCipher, LbClass, LbUtils;
type
TfrmMain = class(TForm)
btnGetHashCodes: TButton;
edtPath: TEdit;
lstHashCodes: TListBox;
procedure btnGetHashCodesClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmMain: TfrmMain;
implementation
{$R *.dfm}
procedure TfrmMain.btnGetHashCodesClick(Sender: TObject);
var
MD5 : TLbMD5;
MD5Digest : TMD5Digest;
F : TSearchRec;
FileName : TFileName;
Path : string;
begin
MD5 := TLbMD5.Create(nil);
lstHashCodes.Items.BeginUpdate;
try
lstHashCodes.Clear;
Path := IncludeTrailingBackslash(edtPath.Text);
if FindFirst(Path + '*.*',faAnyFile - faDirectory,F) = 0 then
try
repeat
FileName := F.Name;
MD5.HashFile(Path + F.Name);
MD5.GetDigest(MD5Digest);
lstHashCodes.Items.Add(F.Name + ' ['
+ BufferToHex(MD5Digest,SizeOf(TMD5Digest))
+ ']');
until FindNext(F) <> 0;
finally
FindClose(F);
end;
finally
lstHashCodes.Items.EndUpdate;
MD5.Free;
end;
end;
end.

vcldeveloper
چهارشنبه 11 آذر 1388, 23:06 عصر
FindFirst و FindNext که مشخص هست چیکار می کنند.
متد HashFile هم از اسمش مشخص هست که از فایل Hash Code تولید میکنه.
GetDigest هم Hash Code تولید شده را به صورت یک آرایه 16 بایتی بر می گردونه.
BufferToHex هم مقادر باینری موجود در آن آرایه را تبدیل به کدهای هگزادسیمال بصورت string میکنه تا قابل نمایش دادن به کاربر باشه.

Mask
یک شنبه 29 فروردین 1389, 03:26 صبح
FindFirst و FindNext که مشخص هست چیکار می کنند.
متد HashFile هم از اسمش مشخص هست که از فایل Hash Code تولید میکنه.
GetDigest هم Hash Code تولید شده را به صورت یک آرایه 16 بایتی بر می گردونه.
BufferToHex هم مقادر باینری موجود در آن آرایه را تبدیل به کدهای هگزادسیمال بصورت string میکنه تا قابل نمایش دادن به کاربر باشه.
ممنون از آقای کشاورز.
چند سوال پیش اومده که اگه محبت کنند و جواب بدهند خیلی خوب میشه:لبخندساده:
اول اینکه این برنامه با فایلهایی که اسم فارسی دارند مشکل داره و خطا میده.
چطوری باید این مشکل رو حل کرد.
دوم اینکه با فایل pagefile.sys در درایو سی هم مشکل داره و نمیتونه کد md5 برای این فایل تولید کنه.
و این مشکل رو چطوری باید حل کرد.
ممنون از جوابتون.

vcldeveloper
یک شنبه 29 فروردین 1389, 10:11 صبح
دوم اینکه با فایل pagefile.sys در درایو سی هم مشکل داره و نمیتونه کد md5 برای این فایل تولید کنه.با اون فایل مشکلی نداره، بلکه سیستم عامل شما اون فایل رو بطور اختصاصی باز کرده، و به شما اجازه خواندن فایل را نمیده. اساسا Hash Code گرفتن از آن فایل بی معنی هست، چون اون فایل دائما در حال تغییر توسط سیستم عامل هست، و Hash Code ایی که شما می گیرید، متناسب با پیکربندی سیستم شما، شاید فقط برای چند لحظه معتبر باشه.


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

Mask
یک شنبه 29 فروردین 1389, 13:52 عصر
با اون فایل مشکلی نداره، بلکه سیستم عامل شما اون فایل رو بطور اختصاصی باز کرده، و به شما اجازه خواندن فایل را نمیده. اساسا Hash Code گرفتن از آن فایل بی معنی هست، چون اون فایل دائما در حال تغییر توسط سیستم عامل هست، و Hash Code ایی که شما می گیرید، متناسب با پیکربندی سیستم شما، شاید فقط برای چند لحظه معتبر باشه.

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

برنامه مشکلی با فایل های فارسی نداره، بلکه کامپایلر دلفی شما احتمالا قدیمی هست، و از یونیکد پشتیبانی نمیکنه، در نتیجه در خواندن نام های فارسی دچار مشکل میشه.
من از دلفی 7 استفاده میکنم.
به نظرتون با چه ورژنی از دلفی برنامه رو کامپایل کنم؟
با تشکر.

Felony
یک شنبه 29 فروردین 1389, 16:03 عصر
من از دلفی 7 استفاده میکنم.
به نظرتون با چه ورژنی از دلفی برنامه رو کامپایل کنم؟
با تشکر.
با دلفی 2009 یا 2010 که از یونیکد پشتیبانی میکنن .

vcldeveloper
یک شنبه 29 فروردین 1389, 20:14 عصر
و در ضمن چه فایلهایه دیگه ای در ویندوز هست که همچین حالتی داره.
اگر به تنظیمات آنتی ویروس های معروف نگاه کنید، متوجه میشید که بخشی به اسم Exclude دارند، و برخی فایل ها و پوشه ها در آن بخش از قبل اسمشان درج شده. اینها فایل ها و پوشه هایی هستند که آنتی ویروس از اسکن آنها صرفنظر میکنه.

Mask
یک شنبه 29 فروردین 1389, 20:38 عصر
اگر به تنظیمات آنتی ویروس های معروف نگاه کنید، متوجه میشید که بخشی به اسم Exclude دارند، و برخی فایل ها و پوشه ها در آن بخش از قبل اسمشان درج شده. اینها فایل ها و پوشه هایی هستند که آنتی ویروس از اسکن آنها صرفنظر میکنه.
ممنون.

چطوری باید به برنامه فهموند بیخیال این فایل بشه.

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

اگر به تنظیمات آنتی ویروس های معروف نگاه کنید،
ممنون . اما من avira رو سیستمم نصبه . همچین منویی نداره؟

vcldeveloper
دوشنبه 30 فروردین 1389, 00:16 صبح
میشه بگید اینو باید چیکار کرد؟
من که نمیدونم شما دارید چی می نویسید. برای اینکه روی اون فایل پردازشی صورت نگیره، قبل از شروع پردازش تون، اسم فایل را چک کنید، اگر فایل مورد نظر شما بود، از پردازش آن صرفنظر کنید.

SAASTN
دوشنبه 30 فروردین 1389, 00:25 صبح
برای اینکه روی اون فایل پردازشی صورت نگیره، قبل از شروع پردازش تون، اسم فایل را چک کنید، اگر فایل مورد نظر شما بود، از پردازش آن صرفنظر کنید.
یا با استفاده از ExtractFileExtension از پردازش فایل های با پسوند مشخص (مثلا .sys) صرف نظر کنید.

vcldeveloper
دوشنبه 30 فروردین 1389, 03:10 صبح
یا با استفاده از ExtractFileExtension از پردازش فایل های با پسوند مشخص (مثلا .sys) صرف نظر کنید.
اون وقت خیلی از فایل ها کنار گذاشته میشند، به عنوان نمونه، فایل های مربوط به درایورهای سطح کرنل پسوند sys دارند.

Mask
پنج شنبه 02 اردیبهشت 1389, 17:14 عصر
با سلام
بنده دارم از این کد در برنامه ای استفاده میکنم.
یه مشکلی پیش اومده اینم اینه که فایلهایی که حجمشون بالاست وقتی برنامه میخاد کد md5 براشون تولید کنه . چون حجمش زیاده برنامه هنگ میکنه و بعد از چند لحظه که کد تولید میشه برنامه از حالت هنگ در میاد.
این مشکل بیشتر برای فایلهای صوتی تصویری با پسوند dat ایجاد میشه.
به نظرتون این مشکل رو چطوری باید حل کرد.

lord_viper
پنج شنبه 02 اردیبهشت 1389, 17:57 عصر
برای رفع این مشکل میتونین کد این قسمت رو داخل یک thread قرار بدین

Mask
پنج شنبه 02 اردیبهشت 1389, 22:11 عصر
برای رفع این مشکل میتونین کد این قسمت رو داخل یک thread قرار بدین
ممنون
اما مشکل اینجاست که حتما برنامه باید این کد رو بدست بیاره تا مرحله بعدی و بقیه پردازش ها روی همین کد بدست آمده انجام میشه.
مشکل من با هنگ کردن برنامه نیست.
مشکل تسریع در این عملیاته.