ورود

View Full Version : سوال: گرفتن هگز فایل قفل شده



loo30fer
شنبه 09 بهمن 1389, 14:34 عصر
با سلام
میخوستم بدونم چطوری میتونم هگز فایلهای که قفل شده رو بگیرم مثلا بایت سوم تا پنجم فایل اگه ممکنه دستورش رو قرار بدین با تشکر

Felony
شنبه 09 بهمن 1389, 16:17 عصر
قفل شده یعنی چی ؟ منظورتون کد شده هست ؟
اگر آره که فرقی با فایل معمولی نمیکنه و به روش معمول شما میتونید Hex ش رو بگیرید ، برنامه ای که فایل رو کد کرده طبق یک الگوریتم خاص داده ها رو تغییر داده و طبق همون الگوریتم هم میتونه برشون گردونه .

loo30fer
شنبه 09 بهمن 1389, 16:40 عصر
نه منظورم فایلهایی که توسط برنامه هایی دیگه در حال استفاده یا تو خودشون لود کردن که قابل حذف نیستن مانند پلاگین MMB که وقتی توسط بیلدر خوانده میشه دیگه قابل حذف شدن نیست , میخوام اینجور فایلها رو هم بشه هگزشون رو گرفت و آیا میشه تعریف کرد که هم هگزش رو بگه و هم کارکترش رو مثلا هگز 5A و کارکترش Z اگه امکان داره کدش رو قرار بدین ممنون میشم

loo30fer
یک شنبه 10 بهمن 1389, 11:15 صبح
ممنون میشم دوستان جواب سوال من رو بدین شرمنده کارم گیره

lord_viper
یک شنبه 10 بهمن 1389, 17:04 عصر
وقتی فایلی در حال استفاده هست ویندوز اجازه استفاده به شما نمیده تا وقتی هندلش ازاد بشه مگه اینکه با برنامه های file Unlocker هندل اون فایل رو ازاد کنین

BORHAN TEC
یک شنبه 10 بهمن 1389, 17:06 عصر
من منظورتون رو از هگز متوجه نمی شم. آیا منظور شما گرفتن Hash Code با استفاده از الگوریتم هایی مثل Md5 و یا Sha1 و ...است؟؟؟؟
و یا به عبارتی دیگر قصد دارید یک امضا از فایل بگیرید؟؟؟

loo30fer
یک شنبه 10 بهمن 1389, 17:40 عصر
وقتی فایلی در حال استفاده هست ویندوز اجازه استفاده به شما نمیده تا وقتی هندلش ازاد بشه مگه اینکه با برنامه های file Unlocker هندل اون فایل رو ازاد کنیننه اون فایلهایی که وقتی یک برنامه رو اجرا میکنید یک فایل هم تو پوشه Temp میسازه و حذف اونها غیر ممکن میشه حتی با Unlocker و اگه اونها رو داخل وینهگز بندازیم با پیغام The process cannot access the file because it is being used by another process مواجه میشیم بلکه فایلهایی که توسط یک برنامه باز شده و از اون استفاده میکنه مثلا وقتی مولتی مدیا بیلدر یا همین دلفی DLL رو برای خودش باز میکنه و پارامتری رو براش ارسال میکنه و اون DLL عملکردی که براش تعیین شده رو انجام میده و جوابی رو به خود برنامه میفرسته , قطعا باید راهی وجود داشته باشه چون وینهگز همچین فایلهایی رو براحتی باز میکنه و فقط امکان تغییر در فایل رو نمیده و وینهگزم با دلفی نوشته شده

من منظورتون رو از هگز متوجه نمی شم. آیا منظور شما گرفتن Hash Code با استفاده از الگوریتم هایی مثل Md5 و یا Sha1 و ...است؟؟؟؟
و یا به عبارتی دیگر قصد دارید یک امضا از فایل بگیرید؟؟؟ دوست عزیز منظورم اینه که من یک فایل اجرایی رو دارم و همونطور که میدونید همه فایلهای جانبی با هگز MZ این شروع میشه حالا میخوام بگم هگز اول تا و دوم فایلم رو بگیر که میشه 4D 5A و به شکل کارکترشم بتونم بگیرم که مثلا کارکتر همون هگز 4D 5A رو بهم بده که میشه MZ

BORHAN TEC
یک شنبه 10 بهمن 1389, 17:49 عصر
همه فایلهای جانبی
منظورتون از فایلهای جانبی چیه؟؟؟

هگز اول تا و دوم فایلم
منظورتون هگز کاراکترهای اول و دوم است؟

نه دوست عزیز منظورم اینه که من یک فایل اجرایی رو دارم و همونطور که میدونید همه فایلهای جانبی با هگز MZ این شروع میشه حالا میخوام بگم هگز اول تا و دوم فایلم رو بگیر که میشه 4D 5A و به شکل کارکترشم بتونم بگیرم که مثلا کارکتر همون هگز 4D 5A رو بهم بده که میشه MZ
آیا مشکل شما باز کردن یک فایل در حال اجرا است؟ آیا مشکل شما نشان دادن یک کاراکتر به صورت Hex است؟ آیا می خواهید یک فایل را Encode و یا Decode کنید و یا ... ؟

loo30fer
یک شنبه 10 بهمن 1389, 18:30 عصر
منظورتون از فایلهای جانبی چیه؟؟؟این نمونه رو دانلود و فایل Test رو اجرا کنید ایندفعه این پلاگین کنارش رو برای خودش باز میکنه و دیگه قابل حذف نیست اگه ببینید متوجه میشید منظورم از فایلهای جانبی چی هست.
http://uploadmuplaad.persiangig.com/Test.rar

منظورتون هگز کاراکترهای اول و دوم است؟بله مثل عکس نمونه
65739

آیا مشکل شما باز کردن یک فایل در حال اجرا است؟ آیا مشکل شما نشان دادن یک کاراکتر به صورت Hex است؟ آیا می خواهید یک فایل را Encode و یا Decode کنید و یا ... ؟ مشکل من اینه که نمیدونم چطور میتونم مثل عکس نمونه اون کارکتر و هگز اول و دوم رو بگیرم و مثلا تو پیغام نشون بدم کلا مبتدی ام و با دستوراتش آشنا نیستم اگه امکان داره کدش رو قرار بدین و خیلی ببخشید که قشنگ توضیح ندادم و باعث شدم اذیت بشین . با تشکر

BORHAN TEC
یک شنبه 10 بهمن 1389, 23:15 عصر
با استفاده از کد زیر به راحتی میتونید این کار رو انجام بدین:

procedure TForm1.Button1Click(Sender: TObject);
var
FileStream: TFileStream;
Buf: AnsiChar;
begin
FileStream := TFileStream.Create('G:\SmallPlugin.dll', fmOpenRead);
try
FileStream.Position := 0;
FileStream.Read(Buf, 1);
ShowMessage(IntToHex(Ord(Buf), 2));
FileStream.Read(Buf, 1);
ShowMessage(IntToHex(Ord(Buf), 2));
finally
FileStream.Free;
end;
end;
خداییش اگه از اول اینقدر واضح مشکلتون رو بیان می کردید در کمتر از 2 دقیقه می تونستم جواب بدم. :لبخند:
موفق باشید...

loo30fer
دوشنبه 11 بهمن 1389, 04:28 صبح
خداییش اگه از اول اینقدر واضح مشکلتون رو بیان می کردید در کمتر از 2 دقیقه می تونستم جواب بدم. :لبخند:
فکر نکنم تا حالا همچین کاربر مبتدی و اعصاب خورد کنی گیرتون اومده باشه , به هر حال خیلی ممنون بابت کمکتون
آیا میشه هگز اول و دوم رو باهم گرفت و تو پیغام نشون داد و نه جدا گانه یا حتما باید همه هگز ها رو جدا گانه گرفت و به هم اضافه کرد و ایندفعه تو یک پیغام نشون داد

BORHAN TEC
دوشنبه 11 بهمن 1389, 09:19 صبح
فکر نکنم تا حالا همچین کاربر مبتدی و اعصاب خورد کنی گیرتون اومده باشه , به هر حال خیلی ممنون بابت کمکتون
نفرمایید، شما سرور ما هستید. :لبخند:

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

procedure TForm1.Button1Click(Sender: TObject);
var
FileStream: TFileStream;
Buf: AnsiChar;
HexStr: String;
begin
FileStream := TFileStream.Create('G:\SmallPlugin.dll', fmOpenRead);
try
FileStream.Position := 0;
FileStream.Read(Buf, 1);
HexStr := IntToHex(Ord(Buf),2);
FileStream.Read(Buf, 1);
HexStr := HexStr + ' ' + IntToHex(Ord(Buf),2);
ShowMessage(HexStr);
finally
FileStream.Free;
end;
end;

loo30fer
سه شنبه 12 بهمن 1389, 18:18 عصر
من این کد رو تو Thread پیاده کردم ولی یک مشکلی توش پیدا کردم اینه که در حین کار همین که کاربر همون فایل رو اجرا کنه برنامه از کار میفته و رو خط FileStream := TFileStream.Create('C:\Project1.exe', fmOpenRead); خطا میگیره راه حل کار چیست ؟

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Buttons, ComCtrls;

type
Thread1 = class(TThread)
private
i : Integer;
protected
procedure mostra;
procedure Execute; override;
end;

type
TForm1 = class(TForm)
ProgressBar1: TProgressBar;
SpeedButton1: TSpeedButton;
procedure SpeedButton1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
implementation

{$R *.dfm}

procedure Thread1.mostra;
Var
FileStream: TFileStream;
Buf: AnsiChar;
begin
FileStream := TFileStream.Create('C:\Project1.exe', fmOpenRead);
try
FileStream.Position := i;
FileStream.Read(Buf, 1);
Form1.ProgressBar1.Position := i ;
If (i = 1050376) then
begin
ShowMessage('Finish Sucessfully');
end;
finally
FileStream.Free;
end;
end;

procedure Thread1.Execute;
Var
l1 : Integer;
begin
for l1 := 0 to 1050376 do
begin
i := l1;
Synchronize(mostra);
end;
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
Var
t1 : Thread1;
begin
t1 := Thread1.Create(True);
t1.Priority := tpNormal;
t1.Resume;
end;

end.

BORHAN TEC
جمعه 15 بهمن 1389, 17:02 عصر
برنامه رو تست کردم.

این برنامه اساساً مشکلی ندارد. من این مساله رو با یک بلوک try/except تست کردم. زمانی که شما این کد را در حالت Debug اجرا می کنید این خطا ظاهر می شود و این درحالی است که اگر برنامه را بدون حالت Debug اجرا کنید برنامه بدون کوچکترین مشکلی کار می کند. اساساً این موضوع می تواند به عنوان یک باگ در Debugger مطرح شود. :متفکر:

loo30fer
شنبه 07 اسفند 1389, 17:25 عصر
من کد رو بدون Thread تست کردم و کدش رو هم قرار دادم و فقط تنها مشکلی که پیش اومد وقتی داره هگز مثلا فایل C:\FileTest.exe رو میگیره کاربر اگه بخواد اون فایل رو اجرا کنه با این پیغام مواجعه میشه Another program is currently using this file حالا راه حل چیه از چه تابع یا دستوری باید استفاده کنم که که کاربر چه فایل وقتی فایل رو اجرا میکنه همچین مشکلی پیش نیاد ضمنا کدوم تابع برای کار با فایل و تغییر یا اضافه کردن یک بایت در فایل بهتر و حرفه ای تره
ممنون میشم دوستان کمک کنید کارم گیر این مشکله :گریه:

procedure TForm1.Button1Click(Sender: TObject);
var
FileStream: TFileStream;
Buf: AnsiChar;
I : Integer;
begin
FileStream := TFileStream.Create('G:\Project1.exe', fmOpenRead);
try
For I:=0 to 10000000 do
begin
FileStream.Position := 0;
FileStream.Read(Buf, 1);
end;
except
FileStream.Free;
end;
end;

vcldeveloper
یک شنبه 08 اسفند 1389, 02:40 صبح
من این کد رو تو Thread پیاده کردم
با اون کار فقط زحمت خودتون رو زیاد کردید، چون کدی که برای اون Thread نوشتید، عملا کار خاصی در داخل Thread انجام نمیده، و انجام کار رو به Thread اصلی محول میکنه! اگر قرار هست پیاده سازی Thread تون این باشه، اجرای کد در همون Thread اصلی هم زحمت شما رو کم میکنه، و هم افت سرعت خاصی برای برنامه شما ایجاد نمیکنه.


کاربر اگه بخواد اون فایل رو اجرا کنه با این پیغام مواجعه میشه Another program is currently using this file حالا راه حل چیه از چه تابع یا دستوری باید استفاده کنم که که کاربر چه فایل وقتی فایل رو اجرا میکنه همچین مشکلی پیش نیاد

fmOpenRead or fmShareDenyNone
البته اون هم در صورتی کار میکنه که برنامه مورد نظر شما فایل را به صورت Exclusive باز نکرده باشه. اگر به صورت Exclusive باز کرده باشه، هرگونه دسترسی به اون فایل توسط برنامه های دیگه رد خواهد شد.

Felony
یک شنبه 08 اسفند 1389, 06:04 صبح
من این کد رو تو Thread پیاده کردم

برای روشن شدن حرف های علی آقا ، استفاده از Shynchronize باعث میشه Thread شما به صورت زمان بندی شده در Contex ترد اصلی اجرا بشه ، بهتره در مورد Thread و Multithreading در Win32 تحقیقاتی بکنید و بعد از تسلط ازشون استفاده کنید ، بارها گفته شده Multi Threading چیزی نیست که با یک ارث بری و 2 تا تابع نوشتن بشه پیادش کرد .

loo30fer
یک شنبه 08 اسفند 1389, 09:03 صبح
البته اون هم در صورتی کار میکنه که برنامه مورد نظر شما فایل را به صورت Exclusive باز نکرده باشه. اگر به صورت Exclusive باز کرده باشه، هرگونه دسترسی به اون فایل توسط برنامه های دیگه رد خواهد شد. واقعا ممنون کارم راه افتاد

برای روشن شدن حرف های علی آقا ، استفاده از Shynchronize باعث میشه Thread شما به صورت زمان بندی شده در Contex ترد اصلی اجرا بشه ، بهتره در مورد Thread و Multithreading در Win32 تحقیقاتی بکنید و بعد از تسلط ازشون استفاده کنید ، بارها گفته شده Multi Threading چیزی نیست که با یک ارث بری و 2 تا تابع نوشتن بشه پیادش کرد .
بله درسته جناب تاجیک راستش کارم گیر یک چیز کوچولو بود مجبور بودم از Thread استفاده کنم و کلا از Thread چیز نمیدونستم و الانشم زیاد سر در نمیارم نحوه پیاده کردن این Thread رو هم تو یکی از سایتهای خارجی پیدا و استفاده کردم به هر حال ممنون