سلام به بزرگان برنامه نویس و دوستان گرامی .
من در حال انجام پروژه ای هستم که در طول فرایند طراحی به مشکلی بر خوردم که از شما تقاضای کمک در این مورد دارم. نرم افزاری که در حال طراحی می باشد بعد از نصب بر روی سیستم کاربر ، شامل تنها یک فایل 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 های این عملیات نگهداری از فایل رو به این روش شخصی برام بگید (جهت جلو گیری از تهاجم به آنها)
واقعا شرمنده ...