هیچ چیز ناامید کنندهتر از این نیست که بفهمید کارمند قبلی از رمز عبور برای محافظت از یک فایل اکسل استفاده کرده است و معلوم شود هیچ کس دیگری رمز عبور را نمیداند.
یا شاید بدتر از آن این باشد که فایل شما، رمز عبور شما باشد و آن را فراموش کرده باشید. در هر صورت... شما گیج شدهاید! با این حال، قبل از اینکه تسلیم شوید، اجازه دهید چند ایده در مورد نحوه حذف رمزهای عبور اکسل با VBA به اشتراک بگذارم.
ضمناً، اگر با VBA آشنا نیستید یا این روشها را خیلی دشوار میدانید، میتوانید یک راه حل سادهتر را امتحان کنید. Password-Find یک ابزار پولی برای حذف رمز عبور اکسل است
فایل دانلودی شامل یک ابزار رایگان حذف رمز عبور اکسل است. لطفاً برای جزئیات کامل در مورد نحوه استفاده از این ابزار، به بخشهای زیر مراجعه کنید.
هشدار! – هنگام سر و کله زدن با حذف رمز عبور، به راحتی ممکن است فایلها غیرقابل خواندن شوند، بنابراین قبل از انجام هر کاری مطمئن شوید که از اطلاعات خود نسخه پشتیبان تهیه کردهاید. گذشته از همه اینها، اگر فایل بعداً قابل مشاهده نباشد، شکستن رمز عبور هیچ فایدهای ندارد.
قبل از اینکه حتی شروع به بحث در مورد نحوه حذف رمزهای عبور کنیم، باید انواع مختلف رمزهای عبور را در یک فایل اکسل درک کنیم. رویکرد حذف برای هر نوع متفاوت خواهد بود.
تنظیم انواع رمزهای عبور
شش رمز عبور مختلف در اکسل وجود دارد:
- فایل باز است
- تغییر فایل
- محافظت از کتاب کار
- محافظت از برگه کاری
- اجازه ویرایش محدودهها
- پروژه وی بی ای
هر یک از آنها به طور متفاوتی اعمال میشوند و هدف متفاوتی را دنبال میکنند. بیایید به ترتیب به هر کدام نگاه کنیم.
رمزهای عبور باز کردن فایل
رمز عبور باز کردن فایل، مانع از باز شدن یک فایل اکسل تا زمان وارد کردن رمز عبور میشود.
برای تنظیم رمز عبور برای باز کردن فایل در اکسل:
- روی فایل > ذخیره به عنوان > گزینههای بیشتر کلیک کنید …
- سپس، در کادر محاورهای Save As ، روی Tools > General Options… کلیک کنید.
- کادر محاورهای «گزینههای عمومی» ظاهر میشود. رمز عبور را در کادر «رمز عبور برای باز کردن» وارد کنید ، سپس روی تأیید کلیک کنید .
- در پنجره تأیید رمز عبور ، رمز عبور را دوباره وارد کنید و روی تأیید کلیک کنید .
- در نهایت، نام فایل را وارد کنید و در کادر محاورهای Save As روی Save کلیک کنید.
اکنون رمز عبور برای باز کردن فایل تنظیم شده است. کاربر نمیتواند تا زمانی که رمز عبور را وارد نکرده است، فایل اکسل را باز کند.
پیام هشدار
آیا متوجه پیام هشداری که هنگام تنظیم رمز عبور ظاهر شد، شدید؟
احتیاط: اگر رمز عبور را گم یا فراموش کنید، قابل بازیابی نیست. توصیه میشود لیستی از رمزهای عبور و نامهای مربوط به کتاب کار و برگههای مربوطه را در مکانی امن نگه دارید. (به یاد داشته باشید که رمزهای عبور به حروف کوچک و بزرگ حساس هستند.)
این توصیه خوبی برای رمزهای عبور فایل های باز است زیرا بازیابی آنها به راحتی امکان پذیر نیست.
تغییر رمز عبور فایلها
رمز عبور تغییر فایل، تا زمانی که رمز عبور وارد نشده باشد، از تغییر فایل اکسل جلوگیری میکند. برخی از مراحل مشابه رمز عبور باز کردن فایل هستند، اما برای کامل بودن، در اینجا تکرار میشوند.
- روی فایل > ذخیره به عنوان > گزینههای بیشتر کلیک کنید …
- پنجره ذخیره به عنوان ظاهر میشود، روی ابزارها > گزینههای عمومی کلیک کنید…
- کادر «گزینههای عمومی» ظاهر میشود. در کادر « رمز عبور برای تغییر » یک رمز عبور وارد کنید ، سپس روی تأیید کلیک کنید.
- در پنجره تأیید رمز عبور ، رمز عبور را دوباره وارد کنید و روی تأیید کلیک کنید .
- در نهایت، در کادر محاورهای Save As روی Save کلیک کنید.
اکنون رمز عبور تغییر فایل تنظیم شده است. کاربر میتواند فایل اکسل را باز کند، اما اگر رمز عبور را وارد نکند، فایل فقط خواندنی خواهد بود.
پیام هشدار
آیا این بار متوجه پیام هشدار شدید؟
احتیاط: رمز عبور برای تغییر، ویژگی امنی نیست. این سند در برابر ویرایش غیرعمدی محافظت شده است. با این حال، سند رمزگذاری نشده است. کاربران مخرب میتوانند فایل را ویرایش کرده و رمز عبور را حذف کنند.
آیا تفاوت لحن پیام هشدار را مشاهده کردید؟ حتی مایکروسافت هم تشخیص میدهد که این رمز عبور امن نیست. در ادامهی این پست، نحوهی حذف این رمز عبور را توضیح خواهیم داد.
رمزهای عبور محافظت از کاربرگ
رمزهای عبور محافظت از کاربرگ مانع از تغییر سلولهای خاص میشوند. کاربر میتواند کاربرگ را باز کرده و با آن تعامل داشته باشد، اما در فعالیتهایی که میتواند انجام دهد، محدود شده است.
- با تنظیم ویژگی قفل یک سلول یا محدودهای از سلولها شروع کنید. چند سلول را انتخاب کنید و سپس از نوار ابزار روی Home > Format > Format Cells کلیک کنید (یا میانبر Ctrl + 1 است ).
- کادر محاورهای Format Cells باز میشود. تب Protection را انتخاب کنید، گزینه Locked را در صورت نیاز تیک بزنید یا بردارید ، سپس روی OK کلیک کنید .
- برای اعمال محافظت، روی مرور > محافظت از برگه کلیک کنید.
- پنجره Protect Sheet باز میشود. یک رمز عبور وارد کنید و از کادرهای انتخاب برای تنظیم محافظتی که باید اعمال شود استفاده کنید، سپس روی تأیید کلیک کنید.
- در پنجره تأیید رمز عبور ، رمز عبور را دوباره وارد کنید و دوباره روی تأیید کلیک کنید .
انجام شد. اکنون برگه کار محافظت شده است. اگر کاربری سعی کند در یک سلول قفل شده تغییراتی ایجاد کند، یک پیام خطا ظاهر میشود:
پیام هشدار
بسته به نسخه اکسل شما، هنگام تنظیم رمز عبور، پیامهای هشدار متفاوتی وجود دارد.
نسخههای قدیمیتر:
احتیاط: اگر رمز عبور را گم یا فراموش کنید، قابل بازیابی نیست. توصیه میشود لیستی از رمزهای عبور و نامهای مربوط به کتاب کار و برگههای مربوطه را در مکانی امن نگه دارید. (به یاد داشته باشید که رمزهای عبور به حروف کوچک و بزرگ حساس هستند.)
نسخههای جدیدتر:
محافظت از برگه به محافظت از ویرایشهای تصادفی کمک میکند .
قبلاً این پیام مشابه رمز عبور باز کردن فایل بود. با این حال، این پیام به یک پیام هشدار ملایمتر تغییر یافته است. از آنجایی که این رمزهای عبور به راحتی قابل حذف هستند، پیام ملایمتر دقیقتر است.
اجازه ویرایش رمزهای عبور محدودهها
گزینه «اجازه ویرایش محدودهها» امکان ویرایش محدودههای تعریفشده را با استفادههای خاص یا در صورت ارائه رمز عبور فراهم میکند.
برای تنظیم محدوده ویرایش مجاز:
روی مرور > اجازه ویرایش محدودهها کلیک کنید .
این کار کادر محاورهای Allow Edit Ranges را باز میکند .
برای باز کردن کادر محاورهای New Range، روی New کلیک کنید .
در اینجا میتوانیم عنوان، محدوده و رمز عبور را برای محدوده تنظیم کنیم، سپس روی تأیید کلیک کنیم .
در کادر تأیید رمز عبور ، رمز عبور را دوباره وارد کنید و دوباره روی تأیید کلیک کنید .
رمز عبور هنوز به محدوده اعمال نشده است. این محافظت فقط زمانی اعمال میشود که محافظت از برگه کار فعال باشد.
هنگام تلاش برای ویرایش یک مقدار در محدودهی «مجاز ویرایش» در یک برگهی محافظتشده، کادری برای وارد کردن رمز عبور میبینیم.
پیام هشدار
پیام هشدار همان رمز عبور باز کردن فایل است.
احتیاط: اگر رمز عبور را گم یا فراموش کنید، قابل بازیابی نیست. توصیه میشود لیستی از رمزهای عبور و نامهای مربوط به کتاب کار و برگههای مربوطه را در مکانی امن نگه دارید. (به یاد داشته باشید که رمزهای عبور به حروف کوچک و بزرگ حساس هستند.)
با این حال، همانطور که بعداً در این پست خواهیم دید، این رمز عبور به راحتی قابل حذف است.
رمزهای عبور محافظت از کتاب کار
محافظت از کتاب کار به روشی مشابه محافظت از برگه کار اعمال میشود، اما با گزینههای کمتر. این ویژگی از تغییر ساختار یک کتاب کار توسط کاربران، مانند ایجاد یا تغییر نام برگههای کار، جلوگیری میکند.
- روی مرور > محافظت از کتاب کار از روبان کلیک کنید .
- کادر محاورهای Protect Structure باز میشود. یک رمز عبور وارد کنید ، سپس روی OK کلیک کنید .
توجه: قبل از اکسل ۲۰۱۳، هر دو گزینه Structure و Window در دسترس بودند. با توجه به رابط سند واحد که در اکسل ۲۰۱۳ معرفی شده است، گزینه Windows دیگر مرتبط نیست و خاکستری شده است. - در پنجره تأیید رمز عبور ، رمز عبور را دوباره وارد کنید و روی تأیید کلیک کنید .
ساختار کتاب کار اکنون محافظت شده است.
پیام هشدار
پیام هشدار هنگام وارد کردن مجدد رمز عبور، همان رمز عبور باز کردن فایل است.
احتیاط: اگر رمز عبور را گم یا فراموش کنید، قابل بازیابی نیست. توصیه میشود لیستی از رمزهای عبور و نامهای مربوط به کتاب کار و برگههای مربوطه را در مکانی امن نگه دارید. (به یاد داشته باشید که رمزهای عبور به حروف کوچک و بزرگ حساس هستند.)
این پیام نشان میدهد که امنیت بالایی دارد. با این حال، این درست نیست. همانطور که بعداً در این پست خواهیم دید، میتوانیم به راحتی این رمز عبور را حذف کنیم (آنقدر که مایکروسافت ادعا میکند امن نیست).
رمزهای عبور پروژه VBA
رمزهای عبور پروژههای VBA مانع از مشاهده یا تغییر کد یک پروژه VBA توسط کاربران میشوند.
- در پنجره ویرایشگر ویژوال بیسیک ، روی ابزارها > ویژگیهای پروژه VBA کلیک کنید…
- پنجره VBA Project – Project Properties باز میشود. تب Protection را انتخاب کنید ، گزینه Lock project for viewing را تیک بزنید ، یک رمز عبور وارد و تأیید کنید ، سپس روی OK کلیک کنید.
پروژه VBA اکنون محافظت شده است. فایل اکسل را ببندید و دوباره باز کنید. هنگام گسترش پروژه VBA، کادری برای وارد کردن رمز عبور به کاربر نمایش داده میشود.
حذف هر نوع رمز عبور
اگرچه ما شش نوع مختلف رمز عبور را در نظر گرفتهایم، اما یک فرمت استاندارد فایل اکسل این موارد را تنها به سه روش مدیریت میکند:
- کد فایل XML - این بدان معناست که فایل عمدتاً با استفاده از کدی که در ساختار XML نوشته شده است، ساخته شده است. تنها چیزی که نیاز دارید کمی دانش است، ما میتوانیم خودمان کد XML را ویرایش کنیم؛ به آسانی ویرایش متن.
- رمزگذاری - از اکسل ۲۰۰۷، سطح حفاظت مایکروسافت برای باز کردن فایلها به طور قابل توجهی افزایش یافته است. هنگام ذخیره فایل با رمز عبور باز کردن فایل، اکسل رمزگذاری را روی کد اعمال میکند.
- فایلهای دودویی پروژه VBA - پروژههای VBA به صورت فایلهای دودویی در ساختار فرمت فایل اکسل ذخیره میشوند. رمزهای عبور یا نسخههای رمزگذاری شده آن رمزهای عبور در فایل دودویی VBA ذخیره میشوند.
ادامهی این پست فقط انواع فایلهای مبتنی بر XML را پوشش میدهد که شامل فایلهای .xlsx، .xlsm و .xlam هستند.
از آنجایی که رمزهای عبور به روشهای مختلفی ذخیره میشوند، روش حذف آنها نیز متفاوت است.
شکستن رمز عبور فایل باز شده (رمزگذاری شده)
برای این روش اول رمز عبور، خبر بدی است. تنها راهی که من برای باز کردن یکی از این فایلها میشناسم، حملهی جستجوی فراگیر (brute-force) است. این به معنی امتحان کردن هر ترکیبی از هر حرفی است تا زمانی که رمز عبور شناسایی شود.
فقط با استفاده از اعداد، حروف بزرگ و کوچک، یک رمز عبور ۸ رقمی ۲۱۸،۳۴۰،۱۰۵،۵۸۴،۸۹۶ ترکیب کاراکتری ممکن دارد. بنابراین، برای سرعت بخشیدن به کارها، هر نرمافزاری که از این رویکرد استفاده میکند، تمایل دارد روی الگوهای شناخته شده و ترکیب کلمات تمرکز کند. هرچه رمز عبور پیچیدهتر باشد، شکستن آن زمان بیشتری میبرد.
اگر به دنبال یک نرمافزار شکستن رمز عبور اکسل برای مقابله با این نوع رمزهای عبور هستید، احتمالاً به ابزارها و سرویسهای نرمافزاری شخص ثالث نیاز خواهید داشت که بتوانند حمله جستجوی فراگیر (brute-force) را با سرعت بالا انجام دهند.
من قبلاً یکی از این سرویسها را امتحان کردهام و نتایج خوبی داشته است، آنها را امتحان کنید: https://www.password-find.com . آنها ادعا میکنند که میتوانند ۸۰٪ رمزهای عبور را پیدا کنند، که خیلی خوب است.
شکستن رمز عبور فایل تغییر یافته
حقیقت این است که ما حتی برای تغییر رمز عبور فایل به یک نرمافزار حذف رمز عبور اکسل نیاز نداریم. رمز عبور را میتوان با ذخیره مجدد فایل با یک نام جدید حذف کرد.
همین. تقریباً هیچ هدف امنیتی ندارد. خوب و ساده است.
رمز عبور محدودههای ویرایش مجاز را بشکنید
رمز عبور اجازه ویرایش محدودهها فقط زمانی اعمال میشود که برگه محافظت شده باشد. اگر برگه محافظت نشده باشد، میتوانیم هر محدوده را به صورت دستی حذف کنیم.
بنابراین، اگر بتوانیم محافظ برگه کار را بشکنیم، میتوانیم آن را حذف کنیم.
رمزهای عبور کاربرگ و کتاب کار را بشکنید
همانطور که در بالا ذکر شد، فایلهای اکسل فقط فایلهای متنی هستند که با فرمت خاصی نوشته شدهاند و اکسل میتواند آن را تفسیر کند. بنابراین، اگر بتوانیم متن را ویرایش کنیم، میتوانیم رمز عبور را حذف کنیم.
اکسل خود رمز عبور را درون فایل ذخیره نمیکند. در عوض، از یک الگوریتم برای ایجاد یک کد تنظیمشده استفاده میکند؛ سپس کد تنظیمشده را درون فایل ذخیره میکند.
هر رمز عبوری که وارد میکنیم از طریق همان الگوریتم پردازش میشود. اگر آن الگوریتم نتیجه یکسانی ایجاد کند، پس باید همان رمز عبور باشد و اکسل به ما اجازه میدهد تا کاربرگ یا کتاب کار را ویرایش کنیم.
خوشبختانه، لازم نیست حملهی جستجوی فراگیر (brute-force) را امتحان کنیم. همانطور که در بالا ذکر شد، میتوانیم به سادگی کد را ویرایش کنیم.
رمزهای عبور کتاب کار و برگه کار را به صورت دستی بشکنید
اگر فکر میکنید برای حذف رمزهای عبور اکسل به نرمافزار نیاز دارید، از این روش شگفتزده خواهید شد. تنها چیزی که نیاز دارید یک ویرایشگر متن مانند Notepad است.
من مدام در مورد فایل XML و ساختار فایل صحبت میکنم؛ بیایید نگاهی به آن بیندازیم. خواهید دید که خیلی ترسناک نیست.
این روش میتواند فایل را خراب کند. بنابراین، قبل از امتحان کردن این روش، مطمئن شوید که از فایل پشتیبان تهیه کردهاید.
- مطمئن شوید که پسوند فایلها در رایانه شما قابل مشاهده است. در هر پوشه ویندوز، روی View > Options کلیک کنید .
- در کادر محاورهای Folder Options ، روی تب View کلیک کنید ، تیک گزینهی hide extensions for known file types را بردارید ، سپس روی OK کلیک کنید .
- اکنون میتوانید پسوند فایل .xlsx را مشاهده کنید. نام فایل را به پسوند .zip تغییر دهید .
- فایل زیپ را باز کنید، سپس به فایل \xl\workbooks.xml بروید . بخش هایلایت شده زیر نشان میدهد که رمزهای عبور modify و workbook protection کجا کدگذاری شدهاند:
- رمز عبور تغییر فایل با <fileSharing> شروع میشود و با next />
تمام میشود. رمز عبور محافظت از ورکبوک با <workbookProtection> شروع میشود و با next /> تمام میشود. در مرحله بعد، به فایل \xl\worksheets\sheet1.xml در فایل زیپ
بروید . بخش هایلایت شده زیر نشان میدهد که محدودههای ویرایش مجاز و رمز عبور محافظت از ورکشیت کجا کدگذاری شدهاند: رمز عبور محافظت از ورکشیت با <sheetProtection> شروع میشود و با next /> تمام میشود. رمزهای عبور محدودههای ویرایش مجاز با <protectedRanges> شروع میشوند و با </protectedRanges> تمام میشوند. برای هر برگه یک فایل .xml جداگانه وجود خواهد داشت.
- فایلهای XML مربوط به شیتها و ورکبوک را خارج از پوشه زیپ ذخیره کنید.
- فایلها را با یک ویرایشگر متن باز کنید. سپس بخشهایی از کد که در بالا هایلایت شدهاند را پیدا کرده و حذف کنید.
- فایلهای XML را ذخیره کنید، سپس آنها را دوباره در پوشههای زیپ در همان مکانها کپی کنید.
- برای بازیابی فایل اصلی، نام آن را به پسوند .xlsx ، .xlsm یا .xlam تغییر دهید.
توجه: برای اینکه این روش جواب بدهد، باید فایلهای XML را تنظیم کنیم، سپس آنها را دوباره در پوشه zip در همان محل قرار دهیم. پوشه را کاملاً از حالت فشرده خارج نکنید، زیرا فرآیند فشردهسازی و باز کردن میتواند فایل اکسل را غیرقابل استفاده کند.
اگر فایل اکسل را باز کنید، رمزهای عبوری که حذف کردهایم دیگر وجود نخواهند داشت.
کرک کردن فایل اکسل، فایل اکسل و تغییر رمزهای عبور با یک ماکرو
روش دستی ممکن است کمی تمرین نیاز داشته باشد. به عنوان یک روش جایگزین، میتوانیم از یک ماکرو برای انجام خودکار همان مراحل استفاده کنیم.
کد VBA من برای شکستن رمزهای عبور اکسل در ادامه آمده است. شاید این بهترین ابزار موجود نباشد، اما بر اساس بازخوردهایی که دریافت کردهام، با موفقیت به هزاران کاربر کمک کرده است.
فایل دانلود از قبل شامل این ماکرو است و میتواند برای حذف رمزهای عبور اکسل برای کتاب کار، برگه کار، اجازه ویرایش محدودهها و تغییر سناریوها استفاده شود.
فایلی که قرار است رمز عبور آن حذف شود را ببندید.
یک فایل اکسل جدید باز کنید و کد زیر را در یک ماژول استاندارد در ویرایشگر ویژوال بیسیک کپی کنید.
Sub RemoveProtection() Dim dialogBox As FileDialog Dim sourceFullName As String Dim sourceFilePath As String Dim sourceFileName As String Dim sourceFileType As String Dim newFileName As Variant Dim tempFileName As String Dim zipFilePath As Variant Dim oApp As Object Dim FSO As Object Dim xmlSheetFile As String Dim xmlFile As Integer Dim xmlFileContent As String Dim xmlStartProtectionCode As Double Dim xmlEndProtectionCode As Double Dim xmlProtectionString As String 'Open dialog box to select a file Set dialogBox = Application.FileDialog(msoFileDialogFilePicker) dialogBox.AllowMultiSelect = False dialogBox.Title = "Select file to remove protection from" If dialogBox.Show = -1 Then sourceFullName = dialogBox.SelectedItems(1) Else Exit Sub End If 'Get folder path, file type and file name from the sourceFullName sourceFilePath = Left(sourceFullName, InStrRev(sourceFullName, "\")) sourceFileType = Mid(sourceFullName, InStrRev(sourceFullName, ".") + 1) sourceFileName = Mid(sourceFullName, Len(sourceFilePath) + 1) sourceFileName = Left(sourceFileName, InStrRev(sourceFileName, ".") - 1) 'Use the date and time to create a unique file name tempFileName = "Temp" & Format(Now, " dd-mmm-yy h-mm-ss") 'Copy and rename original file to a zip file with a unique name newFileName = sourceFilePath & tempFileName & ".zip" On Error Resume Next FileCopy sourceFullName, newFileName If Err.Number <> 0 Then MsgBox "Unable to copy " & sourceFullName & vbNewLine _ & "Check the file is closed and try again" Exit Sub End If On Error GoTo 0 'Create folder to unzip to zipFilePath = sourceFilePath & tempFileName & "\" MkDir zipFilePath 'Extract the files into the newly created folder Set oApp = CreateObject("Shell.Application") oApp.Namespace(zipFilePath).CopyHere oApp.Namespace(newFileName).items 'loop through each file in the \xl\worksheets folder of the unzipped file xmlSheetFile = Dir(zipFilePath & "\xl\worksheets\*.xml*") Do While xmlSheetFile <> "" 'Read text of the file to a variable xmlFile = FreeFile Open zipFilePath & "xl\worksheets\" & xmlSheetFile For Input As xmlFile xmlFileContent = Input(LOF(xmlFile), xmlFile) Close xmlFile 'Manipulate the text in the file xmlStartProtectionCode = 0 xmlStartProtectionCode = InStr(1, xmlFileContent, "<sheetProtection") If xmlStartProtectionCode > 0 Then xmlEndProtectionCode = InStr(xmlStartProtectionCode, _ xmlFileContent, "/>") + 2 '"/>" is 2 characters long xmlProtectionString = Mid(xmlFileContent, xmlStartProtectionCode, _ xmlEndProtectionCode - xmlStartProtectionCode) xmlFileContent = Replace(xmlFileContent, xmlProtectionString, "") End If 'Remove Range Protection xmlStartProtectionCode = 0 xmlStartProtectionCode = InStr(1, xmlFileContent, "<protectedRanges") If xmlStartProtectionCode > 0 Then xmlEndProtectionCode = InStr(xmlStartProtectionCode, _ xmlFileContent, "</protectedRanges>") + 18 '"</protectedRanges>" is 18 characters long xmlProtectionString = Mid(xmlFileContent, xmlStartProtectionCode, _ xmlEndProtectionCode - xmlStartProtectionCode) xmlFileContent = Replace(xmlFileContent, xmlProtectionString, "") End If 'Output the text of the variable to the file xmlFile = FreeFile Open zipFilePath & "xl\worksheets\" & xmlSheetFile For Output As xmlFile Print #xmlFile, xmlFileContent Close xmlFile 'Loop to next xmlFile in directory xmlSheetFile = Dir Loop 'Read text of the xl\workbook.xml file to a variable xmlFile = FreeFile Open zipFilePath & "xl\workbook.xml" For Input As xmlFile xmlFileContent = Input(LOF(xmlFile), xmlFile) Close xmlFile 'Manipulate the text in the file to remove the workbook protection xmlStartProtectionCode = 0 xmlStartProtectionCode = InStr(1, xmlFileContent, "<workbookProtection") If xmlStartProtectionCode > 0 Then xmlEndProtectionCode = InStr(xmlStartProtectionCode, _ xmlFileContent, "/>") + 2 ''"/>" is 2 characters long xmlProtectionString = Mid(xmlFileContent, xmlStartProtectionCode, _ xmlEndProtectionCode - xmlStartProtectionCode) xmlFileContent = Replace(xmlFileContent, xmlProtectionString, "") End If 'Manipulate the text in the file to remove the modify password xmlStartProtectionCode = 0 xmlStartProtectionCode = InStr(1, xmlFileContent, "<fileSharing") If xmlStartProtectionCode > 0 Then xmlEndProtectionCode = InStr(xmlStartProtectionCode, xmlFileContent, _ "/>") + 2 '"/>" is 2 characters long xmlProtectionString = Mid(xmlFileContent, xmlStartProtectionCode, _ xmlEndProtectionCode - xmlStartProtectionCode) xmlFileContent = Replace(xmlFileContent, xmlProtectionString, "") End If 'Output the text of the variable to the file xmlFile = FreeFile Open zipFilePath & "xl\workbook.xml" & xmlSheetFile For Output As xmlFile Print #xmlFile, xmlFileContent Close xmlFile 'Create empty Zip File Open sourceFilePath & tempFileName & ".zip" For Output As #1 Print #1, Chr$(80) & Chr$(75) & Chr$(5) & Chr$(6) & String(18, 0) Close #1 'Move files into the zip file oApp.Namespace(sourceFilePath & tempFileName & ".zip").CopyHere _ oApp.Namespace(zipFilePath).items 'Keep script waiting until Compressing is done On Error Resume Next Do Until oApp.Namespace(sourceFilePath & tempFileName & ".zip").items.Count = _ oApp.Namespace(zipFilePath).items.Count Application.Wait (Now + TimeValue("0:00:01")) Loop On Error GoTo 0 'Delete the files & folders created during the sub Set FSO = CreateObject("scripting.filesystemobject") FSO.deletefolder sourceFilePath & tempFileName 'Rename the final file back to an xlsx file Name sourceFilePath & tempFileName & ".zip" As sourceFilePath & sourceFileName _ & "_" & Format(Now, "dd-mmm-yy h-mm-ss") & "." & sourceFileType 'Show message box MsgBox "The workbook and worksheet protection passwords have been removed.", _ vbInformation + vbOKOnly, Title:="Password protection" End Sub
ماکروی بالا را اجرا کنید.
به فایلی که حاوی رمز عبور برای حذف است بروید و آن را انتخاب کنید، سپس روی تأیید کلیک کنید .
ماکرو یک فایل جدید با رمزهای عبور محافظت شده حذف شده ایجاد میکند.
نکته - این ماکرو روی مک کار نمیکند، فقط روی کامپیوتر ویندوزی کار میکند.
پیامهای خطای رایج و راهحلهای مربوط به این ماکرو
اگر با پیامهای خطای زیر مواجه شدید، دلیل آن میتواند یکی از موارد زیر باشد:
خطای زمان اجرا '53': فایل پیدا نشد :
- فایل workbook از نوع .xlsb است؛ ماکرو فقط روی فایلهای با فرمت .xlsx، .xlsm و .xlam کار میکند.
خطای زمان اجرا '76': فایل یافت نشد:
- فایل ورکبوک از نوع xls است؛ ماکرو فقط روی فایلهایی با پسوند .xlsx، .xlsm یا .xlam کار میکند.
- روی فایل ورکبوک رمز عبور برای باز کردن آن اعمال شده است.
خطای زمان اجرا '91': متغیر شیء یا متغیر بلوک تنظیم نشده است :
- شما ماکرو را به جای کامپیوتر، روی مک اجرا میکنید.
خطای زمان اجرا '5': فراخوانی نامعتبر تابع در xml خوانده شده در رشته
- با کاربرگهای بسیار بزرگ کار نمیکند - ماکرو فایل XML را به یک رشته تبدیل میکند. بنابراین اگر رشته بیش از ۲ میلیارد کاراکتر باشد، باعث خطای VBA میشود.
نکات دیگر برای استفاده موفقیتآمیز از این ماکرو:
- مطمئن شوید که کتاب کار روی رایانه شخصی شما ذخیره شده است
شکستن رمز عبور باینری پروژه VBA با یک ماکرو
در نهایت، به رمزهای عبور دودویی پروژه VBA میرسیم. بسیاری از آموزشها استفاده از ویرایشگر HEX را برای حذف رمز عبور پیشنهاد میکنند. اما یک راه بهتر و سادهتر هم وجود دارد.
یک ماکروی شگفتانگیز وجود دارد که ویرایشگر ویژوال بیسیک را گیج میکند و کد را قابل مشاهده میکند.
من نمیتوانستم این ماکرو را در یک میلیون سال هم بنویسم. من ادعا نمیکنم که نویسنده این کد هستم، کد را از یک تاپیک در Stack Overflow کامپایل کردهام: https://stackoverflow.com/questions/1026483/is-there-a-way-to-crack-the-password-on-an-excel-vba-project
اگر شما صاحب حق نشر کد اصلی هستید و مایلید کد زیر را حذف کنم، لطفاً به من اطلاع دهید.
مطمئن شوید که فایل ورکبوک حاوی پروژه VBA قفلشده باز است.
یک فایل اکسل جدید ایجاد کنید و کد زیر را در یک ماژول استاندارد VBA کپی کنید، سپس ماکروی VBAUnprotected را اجرا کنید .
فایل دانلود از قبل شامل این ماکرو است و میتواند برای حذف رمز عبور VBA استفاده شود.
Private Const PAGE_EXECUTE_READWRITE = &H40 Private Declare PtrSafe Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" _ (Destination As LongPtr, Source As LongPtr, ByVal Length As LongPtr) Private Declare PtrSafe Function VirtualProtect Lib "kernel32" (lpAddress As LongPtr, _ ByVal dwSize As LongPtr, ByVal flNewProtect As LongPtr, lpflOldProtect As LongPtr) As LongPtr Private Declare PtrSafe Function GetModuleHandleA Lib "kernel32" (ByVal lpModuleName As String) As LongPtr Private Declare PtrSafe Function GetProcAddress Lib "kernel32" (ByVal hModule As LongPtr, _ ByVal lpProcName As String) As LongPtr Private Declare PtrSafe Function DialogBoxParam Lib "user32" Alias "DialogBoxParamA" (ByVal hInstance As LongPtr, _ ByVal pTemplateName As LongPtr, ByVal hWndParent As LongPtr, _ ByVal lpDialogFunc As LongPtr, ByVal dwInitParam As LongPtr) As Integer Dim HookBytes(0 To 11) As Byte Dim OriginBytes(0 To 11) As Byte Dim pFunc As LongPtr Dim Flag As Boolean Private Function GetPtr(ByVal Value As LongPtr) As LongPtr GetPtr = Value End Function Public Sub RecoverBytes() If Flag Then MoveMemory ByVal pFunc, ByVal VarPtr(OriginBytes(0)), 12 End Sub Public Function Hook() As Boolean Dim TmpBytes(0 To 11) As Byte Dim p As LongPtr, osi As Byte Dim OriginProtect As LongPtr Hook = False #If Win64 Then osi = 1 #Else osi = 0 #End If pFunc = GetProcAddress(GetModuleHandleA("user32.dll"), "DialogBoxParamA") If VirtualProtect(ByVal pFunc, 12, PAGE_EXECUTE_READWRITE, OriginProtect) <> 0 Then MoveMemory ByVal VarPtr(TmpBytes(0)), ByVal pFunc, osi+1 If TmpBytes(osi) <> &HB8 Then MoveMemory ByVal VarPtr(OriginBytes(0)), ByVal pFunc, 12 p = GetPtr(AddressOf MyDialogBoxParam) If osi Then HookBytes(0) = &H48 HookBytes(osi) = &HB8 osi = osi + 1 MoveMemory ByVal VarPtr(HookBytes(osi)), ByVal VarPtr(p), 4 * osi HookBytes(osi + 4 * osi) = &HFF HookBytes(osi + 4 * osi + 1) = &HE0 MoveMemory ByVal pFunc, ByVal VarPtr(HookBytes(0)), 12 Flag = True Hook = True End If End If End Function Private Function MyDialogBoxParam(ByVal hInstance As LongPtr, _ ByVal pTemplateName As LongPtr, ByVal hWndParent As LongPtr, _ ByVal lpDialogFunc As LongPtr, ByVal dwInitParam As LongPtr) As Integer If pTemplateName = 4070 Then MyDialogBoxParam = 1 Else RecoverBytes MyDialogBoxParam = DialogBoxParam(hInstance, pTemplateName, _ hWndParent, lpDialogFunc, dwInitParam) Hook End If End Function ''''RUN THE CODE BELOW'''' Sub VBAUnprotected() If Hook Then MsgBox "VBA Project is unprotected!", vbInformation, "*****" End If End Sub
این کد رمز عبور اصلی را حذف نمیکند. برای حذف یا تغییر رمز عبور، به تنظیمات VBA Project Properties بروید تا تنظیمات موجود را تغییر دهید.
لطفاً توجه داشته باشید که این ماکرو فقط با رمزهای عبوری که با استفاده از ویژگی استاندارد رمز عبور VBA اکسل ایجاد شدهاند، کار میکند. پروژههای VBA محافظتشده با Unviewable+ (یا نرمافزارهای مشابه) قابل کرک نیستند.
نتیجهگیری
خب، این نحوهی شکستن رمزهای عبور اکسل با VBA بود.
برای کاربرگ، امکان ویرایش محدودهها، کاربرگ
ورود به سایت