PDA

View Full Version : محافظت از فایل بر روی هادر دیسک در دلفی



Anis131313
یک شنبه 06 دی 1388, 16:03 عصر
سلام به بزرگان برنامه نویس و دوستان گرامی . :خجالت:
من در حال انجام پروژه ای هستم که در طول فرایند طراحی به مشکلی بر خوردم که از شما تقاضای کمک در این مورد دارم. نرم افزاری که در حال طراحی می باشد بعد از نصب بر روی سیستم کاربر ، شامل تنها یک فایل EXE ویک فایل Paradox است و در زمان اجرا صفحه ای باز می شود جهت Registration و کاربر در این فرم 10 تا Account قادر است برای خود تعریف کند و این حساب ها در داخل جدول Paradox ذخیره می شوند و بعد از تولید Activation Code و تماس با ما کد Authorization را در اختیار وی قرار میدهیم تا به اصطلاح یکی از 10 Accountایجاد شده فعال شود. خوب . فرض کنیم هر 10 حساب فعال شده هستند ، حال کاربر جهت استفاده از نرم افزار و ورود به آن یکی از این 10 حساب را انتخاب و دکمه ورود را می زند. از قبل و در زمان طراحی نرم افزار 2 تا فایل در داخل Application به صورت Resource ذخیره شده اند یک فایل DLL و یک فایل EXE :لبخند:. هر کدام از آن 10 حساب هم توسط کاربر برای خود یک مسیر خاص را انتخاب می کنند. و هنگام اجرا 2 تا فایل داخل Resource به مسیر آن حساب می روند و هنگام خاتمه برنامه از آن مسیر پاک می شوند. خلاصه میکنم، قرض کنیم حسابی که کاربر انتخاب می کند به صورت :

Account Number = 123456
Account Path = C:\Program Files\Babylon

بنابر این باید DLL و EXE را از Resource خارج کرده و در مسیر بالا کپی کنیم و بعد از خاتمه از آن مسیر حذف کنیم. اصل قضیه محافظت از این 2 تا فایل است که نتوانند آنها را کپی و نهایتا Decompile بنابر این من ایده ی خودم رو برای محافظت از یک فایل در یک پوشه میگم و بعد مشکلاتم رو بیان میکنم . لازم به ذکر است متاسفانه این 2 تا فایل توسط برنامه های دیگری استفاده خواهند شد و نمیتوان به صورت کامل آن پوشه یا این 2 تا رو کاملا به صورت سیستمی قفل کرد :ناراحت: ! بنابر این دست ما بسته است.



عدم اجازه به کلیک راست کردن بر روی فایل
چنانچه فرایند کپی به هر نحوی روی این فایل ها صورت گرفت بافر سیستم عامل خالی شود تا Paste در کار نباشد
جلوگیری از Drag کردن فایل
جلوگیری از SendTo


س : چگونه نرم افزار متوجه میشود که دفعه قبل یک Exit موفق داشته و 2 تا فایل پاک شده اند ؟
ج : یک فایل به هر اسم و پسوندی در یکی از کوچه پس کوچه های شاخه Windows میسازیم
بر فرض مثال Aknowledge.abc
در حین اجرای برنامه مقدار داخل فایل را 1 قرار میدهیم و در هنگام خروج پس از حذف 2 تا فایل مقدار فایل را صفر قرار میدهیم بنابر این :
محتویات فایل Aknowledge.abc :
0 فایل های EXE و DLL از روی هارد پاک شده اند
1 فایل های EXE و DLL روی هارد کپی و موجود هستن

زمانی که برنامه اصلی اجرا می شود فایل Aknowledge.abc را نگاه می کند اگر مقدار آن صفر بود بنابر این خروجی موفق در اجرای قبلی داشتیم و فایل ها روی سیستم نیستند ولی اگه مقدار 1 داخل آن بود یعنی خروج قبلی به دالایل EndTask ، Restart و قطعی آنی برق و ... نا موفق بوده و فایل روی هارد است و باید به کاربر یک انتظار داده و یک Search کلی روی هارد دیسک انجام بدیم و هر جا کاملا مشابه این فایل ها را دیدیم آن را پاک کنیم. در ضمن برنامه ای که روی این 2 تا فایل قفل میکند از نوع سرویسش هم موجود است که مبادا طرف مارمولک باشد :شیطان: و اجرای برنامه را برای بار بعدی انجام ندهد .
زیاد حرف زدم ببخشید.
مشکلات من :


من باید از عملیات کلیک راست و کپی گرفتن از فایل های موزد تهاجم با خبر شوم پس اگر ممکنه تابعی رو به من معرفی کنید که این امر را برای من نمایان کند همانند تابع FindNextChangeNotification و ...
چگونه میتوان بعد از فعمیدن کپی گرفتن ، بافر را خالی کرد ؟ توابع کار با بافر چیست ؟ خواندن از و نوشتن در بافر ...
Drag کردن چگونه صورت می گیرد ؟ آیا مثل همان پروسه ی اول کپی در بافر و بعد Paste است یا ... ؟
لطفا Bug های این عملیات نگهداری از فایل رو به این روش شخصی برام بگید (جهت جلو گیری از تهاجم به آنها)




واقعا شرمنده ... :قلب::خجالت:

Anis131313
دوشنبه 07 دی 1388, 17:58 عصر
بازم سلام
من پست زیر رو پیدا کردم
http://www.barnamenevis.org/forum/showpost.php?p=701747&postcount=4

و به صورت زیر پیاده کردم :




var
hwndNextViewer:HWND;

{$R *.dfm}

Procedure TForm1.Button1Click(Sender: TObject);
var
fileName:LPTSTR;
hd:HDROP;
begin
OpenClipboard (hwndNextViewer) ;
if (hwndNextViewer>-1) then
SendMessage (hwndNextViewer, WM_DRAWCLIPBOARD, 0, 0) ; // It is necessary

hd:=GetClipboardData (CF_HDROP) ;
Memo1.Lines.Add(IntToStr(DragQueryFile(hd,0,fileNa me, SizeOf(fileName))));
Memo1.Lines.Add(fileName);
CloseClipboard () ;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
hwndNextViewer := SetClipboardViewer (hwndNextViewer) ;
end;




فایلی که من از اون کپی گرفتم در مسیر زیر است :


C:\Documents and Settings\Administrator\Desktop\DelphiNote.doc


و با توجه به طول آن تعداد کاراکتر های آن درست برگردانده می شود اما آدرس فایل نه و خروجی Memo به صورت زیر در می آید :





62
譓님謁棤[1]삅౴鎋ʜ



جریان چیه ؟
کجای کارم ایراد داره ؟

Anis131313
سه شنبه 08 دی 1388, 09:53 صبح
واقعا کسی نیست جوابی به من بده ؟
اگه سوالاتم رو بد یا اشتباه مطرح کردم بهم بگید تا تصحیح کنم.

Anis131313
پنج شنبه 10 دی 1388, 06:41 صبح
خوب تا جای که من می بینم 5 را برای کپی کردن از یک فایل وجود داره :


کلیک راست و انتخاب کپی
Ctrl + C
استفاده از منوی SendTo
درگ (Drag) کردن فایل (که خود شامل کلیک چپ و راست میشه)
استفاده از خط Command Dos در ویندوز

در برنامه آپلود شده موارد 1 و 2 حل شد در این 2 مورد سیستم عامل از ClipBoard استفاده میکنه اما در 3 مورد بعدی دستور کپی در لحظه و بدون استفاده از بافر انجام میشه.

ممنون میشم اگه دوستان را حلی برای 3 مورد بعدی دارند ارائه بدن.
پیشنهاد من برای این 3 مورد استفاده از فکوس Focus سیستم عامل بر روی فایل مورد نظره...

منتظرم ممنون ...


41869

Felony
پنج شنبه 10 دی 1388, 07:41 صبح
میتونید پیغام هایی که در زمان کپی فایل به ویندوز ارسال میشود رو هوک کنید .

Anis131313
پنج شنبه 10 دی 1388, 13:06 عصر
میتونید پیغام هایی که در زمان کپی فایل به ویندوز ارسال میشود رو هوک کنید .

سلام و ممنون از جوابتون دوست خوبم.
راستش من چیز زیادی راجع به Hook کردن بلد نیستم اگه شما باهاش کار کردین و میدونید چطور میشه پیغام کپی رو هوک کرد ممنون میشم که اینجا یه لینک یا شبه کد برام بذارین.
:لبخندساده:

Felony
پنج شنبه 10 دی 1388, 13:54 عصر
بارها دربارش بحث شده ، همین چند وقت پیش یکی از کاربران دربارش سوال پرسید ، کلمه هوک یا Hook رو جست و جو کن .

hojjatcroos
جمعه 11 دی 1388, 18:18 عصر
سلام بعد علاوه بر hook کردن چون فایلتون EXE نیست کریپت هم بکنید

Anis131313
یک شنبه 13 دی 1388, 11:05 صبح
سلام بعد علاوه بر hook کردن چون فایلتون EXE نیست کریپت هم بکنید


سلام
مرسی

برام بیشتر راجع به کریپت (Crypt) کردن میگین که بقیه شو خودم پیگیر بشم...
مثل نام یه تابع یا اصطلاح انگلیسی

چطوری از این عملیات میشه استفاده کرد ؟


_________________________________________________

یه سوال دیگه هم هست...
آیا با هوک کردن توابع کپی ، عملیات کپی در CommandDos هم هوک خواهد شد ؟

hojjatcroos
یک شنبه 13 دی 1388, 13:42 عصر
شما با هوک کردن کنترلی بر توابع و پیغام های ویندوز دارید.
اگر می خواهید فایل شما پروتکت باشد(کپی نشه،پاک نشه،جابجا نشه) می تونید هوک رو انتخاب کنید توابع زیر رو هوک کنید فایل شما به صورت کامل پروتکت میشه.(WIN XP)

DeleteFileW
CopyFileExW
MoveFileWithProgressW
MoveFileW
MoveFileExW
Eecrypt و Decrypt هم به این منظور هست که فایل شما رمزنگاری یا رمزگشایی بشه
زمانی که برنامه می خواهد از فایل استفاده کنه فایل را در رم رمزگشایی کنید و بعد رمز گذاری

آیا با هوک کردن توابع کپی ، عملیات کپی در CommandDos هم هوک خواهد شد ؟ بله

Anis131313
دوشنبه 14 دی 1388, 19:31 عصر
DeleteFileW
CopyFileExW
MoveFileWithProgressW
MoveFileW
MoveFileExW




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