Saya diminta untuk memperbarui beberapa makro Excel 2003, tetapi proyek-proyek VBA dilindungi kata sandi, dan sepertinya ada kekurangan dokumentasi ... tidak ada yang tahu kata sandinya.
Apakah ada cara untuk menghapus atau memecahkan kata sandi pada proyek VBA?
Jawaban:
Anda dapat mencoba
VBA
pendekatan langsung ini yang tidak memerlukan pengeditan HEX. Ini akan berfungsi untuk semua file (* .xls, * .xlsm, * .xlam ...).Diuji dan bekerja pada:
Mencari versi 64 bit? Lihat jawaban ini
Bagaimana itu bekerja
Saya akan mencoba yang terbaik untuk menjelaskan cara kerjanya - mohon permisi Bahasa Inggris saya.
Menggunakan kodenya
Harap buat cadangan file Anda terlebih dahulu!
Buat file xlsm baru dan simpan kode ini di Module1
code credited to Siwtom (nick name), a Vietnamese developer
Rekatkan kode ini di bawah kode di atas di Module1 dan jalankan
Kembalilah ke Proyek VBA Anda dan nikmatilah.
sumber
Ya ada, selama Anda menggunakan
.xls
spreadsheet format (default untuk Excel hingga 2003). Untuk Excel 2007 dan seterusnya, defaultnya adalah.xlsx
, yang merupakan format yang cukup aman, dan metode ini tidak akan berfungsi.Seperti kata Treb, ini perbandingan sederhana. Salah satu metode adalah dengan hanya menukar entri kata sandi dalam file menggunakan hex editor (lihat Hex editor untuk Windows ). Contoh langkah demi langkah:
Salin garis yang dimulai dengan kunci berikut:
CADANGAN PERTAMA untuk file excel yang Anda tidak tahu kata sandi VBA, lalu buka dengan hex editor Anda, dan tempelkan baris yang disalin di atas dari file dummy.
Jika Anda perlu bekerja dengan Excel 2007 atau 2010, ada beberapa jawaban lain di bawah ini yang mungkin membantu, terutama yang ini: 1 , 2 , 3 .
EDIT Feb 2015: untuk metode lain yang terlihat sangat menjanjikan, lihat jawaban baru ini oleh Đức Thanh Nguyễn.
sumber
CMG...
string baru lebih panjang dari aslinya.Saya telah membangun atas jawaban fantastis Đức Thanh Nguyễn untuk memungkinkan metode ini bekerja dengan versi 64-bit Excel. Saya menjalankan Excel 2010 64-Bit pada 64-Bit Windows 7.
Buat file xlsm baru dan simpan kode ini di Module1
Tempel kode ini di Module2 dan jalankan
PENOLAKAN Ini bekerja untuk saya dan saya telah mendokumentasikannya di sini dengan harapan itu akan membantu seseorang. Saya belum sepenuhnya mengujinya . Pastikan untuk menyimpan semua file yang terbuka sebelum melanjutkan dengan opsi ini.
sumber
Ada solusi lain (agak lebih mudah), tanpa masalah ukuran. Saya menggunakan pendekatan ini hari ini (pada file XLS 2003, menggunakan Excel 2007) dan berhasil.
DPB=...
bagian ituDPB=...
string keDPx=...
* CATATAN: Pastikan Anda telah mengubah kata sandi ke nilai baru, jika tidak saat berikutnya Anda membuka spreadsheet, Excel akan melaporkan kesalahan (Kesalahan Tidak Terduga), maka ketika Anda mengakses daftar modul VBA Anda sekarang akan melihat nama-nama modul sumber tetapi menerima kesalahan lain ketika mencoba membuka formulir / kode / dll. Untuk memperbaiki ini, kembali ke Properti Proyek VBA dan atur kata sandi ke nilai baru. Simpan dan buka kembali dokumen Excel dan Anda harus siap!
sumber
Colin Pickard memiliki jawaban yang sangat baik, tetapi ada satu 'hati-hati' dengan ini. Ada beberapa contoh (saya belum menemukan penyebabnya) di mana total panjang entri "CMG = ........ GC = ...." dalam file berbeda dari satu file excel ke file lanjut. Dalam beberapa kasus, entri ini akan menjadi 137 byte, dan dalam kasus lain akan menjadi 143 byte. Panjang 137 byte adalah yang aneh, dan jika ini terjadi ketika Anda membuat file Anda dengan kata sandi '1234', buat saja file lain, dan itu harus melompat ke panjang 143 byte.
Jika Anda mencoba menempelkan jumlah byte yang salah ke dalam file, Anda akan kehilangan proyek VBA Anda ketika Anda mencoba untuk membuka file dengan Excel.
EDIT
Ini tidak berlaku untuk file Excel 2007/2010. Format file .xlsx standar sebenarnya adalah file .zip yang berisi banyak sub-folder dengan pemformatan, tata letak, konten, dll., Disimpan sebagai data xml. Untuk file Excel 2007 yang tidak dilindungi, Anda bisa mengubah ekstensi .xlsx menjadi .zip, lalu buka file zip dan lihat semua data xml. Ini sangat mudah.
Namun, ketika kata sandi Anda melindungi file Excel 2007, seluruh file .zip (.xlsx) sebenarnya dienkripsi menggunakan enkripsi RSA. Ekstensi tidak dapat lagi diubah menjadi .zip dan ramban konten file.
sumber
Untuk jenis
.xlsm
atau.dotm
file Anda perlu melakukannya dengan cara yang sedikit berbeda..xlsm
file menjadi.zip
.vbaProject.bin
file dan buka di Hex Editor (saya menggunakan HxD , benar-benar gratis dan ringan.)DPB
dan ganti denganDPx
dan simpan file.vbaProject.bin
file lama dengan yang baru ini di file zip..xlsm
..xlsm
file.sumber
.zip
jika Anda telah menginstal 7-Zip . Dalam hal ini, Anda bisa mengklik kanan pada.xlsm
file dan memilih "7-Zip -> Open Archive"Perlu ditunjukkan bahwa jika Anda memiliki file Excel 2007 (xlsm), maka Anda dapat menyimpannya sebagai file Excel 2003 (xls) dan menggunakan metode yang diuraikan dalam jawaban lain.
sumber
1.
convert .xlsm ke .xls2.
memecahkan kode .xl3.
mengkonversi .xlsm ke .xlsx4.
Masukkan kode dari modul dalam .xls ke. xlsx dan simpan itu sebagaiDengan giliran saya, ini dibangun di atas jawaban kaybee99 yang luar biasa yang dibangun di atas jawaban fantastis Thanc Thanh Nguyễn untuk memungkinkan metode ini bekerja dengan versi Office x86 dan amd64.
Gambaran umum tentang apa yang diubah, kami menghindari push / ret yang terbatas pada alamat 32bit dan menggantinya dengan mov / jmp reg.
Diuji dan bekerja
bagaimana itu bekerja
Buat file baru dengan tipe yang sama seperti di atas dan simpan kode ini di Module1
Tempel kode ini di Module2 dan jalankan
sumber
Sudahkah Anda mencoba membukanya di OpenOffice.org?
Saya memiliki masalah yang sama beberapa waktu lalu dan menemukan bahwa Excel dan Calc tidak memahami enkripsi masing-masing, sehingga memungkinkan akses langsung ke hampir semuanya.
Ini beberapa waktu yang lalu, jadi jika itu bukan hanya kebetulan pada bagian saya itu juga mungkin telah ditambal.
sumber
Jika blok Anda
CMG="XXXX"\r\nDPB="XXXXX"\r\nGC="XXXXXX"
dalam file 'kata sandi yang dikenal' lebih pendek dari blok yang ada di file 'kata sandi tidak dikenal', pad string hex Anda dengan nol trailing untuk mencapai panjang yang benar.misalnya
CMG="xxxxxx"\r\nDPB="xxxxxxxx"\r\nGC="xxxxxxxxxx"
dalam file kata sandi yang tidak dikenal, harus diatur ke
CMG="XXXX00"\r\nDPB="XXXXX000"\r\nGC="XXXXXX0000"
untuk mempertahankan panjang file.Saya juga punya ini bekerja dengan file .XLA (format 97/2003) di kantor 2007.
sumber
Untuk Excel 2007 dan seterusnya, Anda perlu mengubah ekstensi file Anda menjadi .zip. Di dalam arsip terdapat subfolder xl, di sana Anda akan menemukan vbaProject.bin. Ikuti langkah di atas dengan vbaProject.bin lalu simpan kembali di arsip. Ubah kembali ekstensi Anda dan voila! (artinya ikuti langkah-langkah di atas)
sumber
Sandi Proyek VBA pada Access, Excel, Powerpoint, atau dokumen Word (
2007, 2010, 2013 or 2016
versi dengan ekstensi.ACCDB .XLSM .XLTM .DOCM .DOTM .POTM .PPSM
) dapat dengan mudah dihapus .Ini hanya masalah mengubah ekstensi nama file menjadi
.ZIP
, membuka ritsleting file, dan menggunakan Hex Editor dasar (seperti XVI32 ) untuk "memecah" kata sandi yang ada, yang "membingungkan" Kantor sehingga meminta kata sandi baru saat file berikutnya adalah dibuka.Ringkasan langkah-langkahnya:
.ZIP
ekstensi.ZIP
dan bukaXL
folder.vbaProject.bin
dan buka dengan Hex EditorDPB
menjadiDPX
..bin
file kembali ke zip, kembalikan ke ekstensi normal dan buka file seperti biasa.VBA Project Properties
.Protection
tab, Tetapkan kata sandi baru.OK
, Tutup file, Buka kembali, tekan ALT + F11.Pada titik ini Anda dapat menghapus kata sandi sepenuhnya jika Anda mau.
Petunjuk lengkap dengan video selangkah demi selangkah yang saya buat "jalan saat" ada di YouTube di sini .
Agak mengejutkan bahwa solusi ini telah ada di sana selama bertahun-tahun, dan Microsoft belum memperbaiki masalah ini.
sumber
Colin Pickard sebagian besar benar, tetapi jangan mengacaukan perlindungan "kata sandi untuk membuka" untuk seluruh file dengan perlindungan kata sandi VBA, yang sama sekali berbeda dari yang sebelumnya dan sama untuk Office 2003 dan 2007 (untuk Office 2007, ganti nama file ke .zip dan cari vbaProject.bin di dalam zip). Dan itu secara teknis cara yang benar untuk mengedit file adalah dengan menggunakan penampil dokumen gabungan OLE seperti CFX untuk membuka aliran yang benar. Tentu saja, jika Anda hanya mengganti byte, editor biner biasa dapat berfungsi.
BTW, jika Anda bertanya-tanya tentang format persis bidang ini, mereka mendokumentasikannya sekarang:
http://msdn.microsoft.com/en-us/library/dd926151%28v=office.12%29.aspx
sumber
Jika file tersebut adalah file zip yang valid (beberapa byte pertama
50 4B
- digunakan dalam format seperti.xlsm
), maka unzip file tersebut dan cari subfilexl/vbaProject.bin
. Ini adalah file CFB seperti halnya.xls
file. Ikuti instruksi untuk format XLS (diterapkan ke subfile) dan kemudian hanya zip isinya.Untuk format XLS, Anda dapat mengikuti beberapa metode lain dalam posting ini. Saya pribadi lebih suka mencari
DPB=
blok dan mengganti teksdengan ruang kosong. Ini meniadakan masalah ukuran wadah CFB.
sumber
Saya mencoba beberapa solusi di atas dan tidak ada satupun yang berfungsi untuk saya (excel 2007 xlsm file). Lalu saya menemukan solusi lain yang bahkan mengambil kata sandi, bukan hanya memecahkannya.
Masukkan kode ini ke dalam modul, jalankan dan berikan waktu. Ini akan memulihkan kata sandi Anda dengan kekerasan.
sumber
ElcomSoft membuat produk Advanced Password Password Breaker dan Advanced Office Password Recovery yang mungkin berlaku untuk kasus ini, selama dokumen itu dibuat di Office 2007 atau sebelumnya.
sumber
Tom - Saya membuat kesalahan anak sekolah pada awalnya karena saya tidak melihat ukuran byte dan sebaliknya saya menyalin dan menempel dari "CMG" yang diatur ke entri berikutnya. Ini adalah dua ukuran teks yang berbeda antara kedua file, dan saya kehilangan proyek VBA seperti yang diperingatkan Stewbob.
Menggunakan HxD, ada penghitung pelacakan berapa banyak file yang Anda pilih. Salin mulai dari CMG hingga penghitung bertuliskan 8F (hex for 143) dan juga ketika menempelkan ke file yang terkunci - Saya berakhir dengan dua kali jumlah "..." di akhir pasta, yang entah bagaimana terlihat aneh dan terasa hampir tidak wajar, tetapi berhasil.
Saya tidak tahu apakah ini penting, tapi saya memastikan saya menutup hex editor dan unggul sebelum membuka kembali file di Excel. Saya kemudian harus pergi melalui menu untuk membuka VB Editor, ke dalam VBProject Properties dan memasukkan kata sandi 'baru' untuk membuka kunci kode.
Saya harap ini membantu.
sumber
Alat saya, VbaDiff , membaca VBA langsung dari file, sehingga Anda dapat menggunakannya untuk memulihkan kode VBA yang dilindungi dari sebagian besar dokumen kantor tanpa menggunakan hex editor.
sumber
Perlindungan adalah perbandingan teks sederhana di Excel. Muatkan Excel di debugger favorit Anda ( Ollydbg menjadi alat pilihan saya), cari kode yang melakukan perbandingan dan perbaiki untuk selalu mengembalikan true, ini seharusnya memungkinkan Anda mengakses makro.
sumber
Untuk Excel 2016 64-bit pada mesin Windows 10, saya telah menggunakan hex editor untuk dapat mengubah kata sandi xla yang dilindungi (belum menguji ini untuk ekstensi lain). Kiat: buat cadangan sebelum Anda melakukan ini.
Langkah-langkah yang saya ambil:
Saya harap ini membantu beberapa dari Anda!
sumber
ekstensi file excel Anda berubah menjadi xml. Dan buka di notepad. kata sandi teks ditemukan dalam file xml.
Anda melihat seperti di bawah garis;
(maaf untuk bahasa Inggris saya yang buruk)
sumber
Jika Anda bekerja di dalam
Java
Anda dapat mencobaVBAMacroExtractor
. Setelah mengekstrak skrip VBA dari.xlsm
saya telah menemukan kata sandi di plaintext.sumber