Usuń hasło z dokumentu Excel

11

Zapewniam wsparcie wewnętrzne, a jednemu z naszych użytkowników udało się przypadkowo umieścić hasło do pliku programu Excel. Przeprowadziłem odpowiednie kontrole, aby upewnić się, że użytkownik powinien mieć dostęp do dokumentu i teraz chce wiedzieć, co zalecenie dotyczące usunięcia hasła z dokumentu Excel.

Jeśli chodzi o jego wartość, hasło pojawia się po otwarciu programu Excel, ale zanim zobaczysz jakiekolwiek dane w programie Excel.

Joe
źródło
Jesteś trochę wypchany. Chyba że chcesz robić skomplikowane operacje kryptograficzne ... (Nie znam żadnych programów do robienia tego na .xls). W programie Excel nie ma normalnego, zautomatyzowanego sposobu na zrobienie tego - to byłoby w pewnym sensie pokonanie punktu posiadania hasła ... Twoja jedyna nadzieja byłaby specjalnym programem do łamania szyfrów dla takich plików (co może być trudne odnaleźć). Może Google decrypt xlslub coś podobnego.
Samuel Jaeschke
plik .xlsx programu Excel jest w rzeczywistości tylko plikiem zip. rozpakuj i postępuj zgodnie z instrukcjami takimi jak te. próbowałem w przeszłości nie jestem pewien, czy to działa, jeśli cały plik jest chroniony hasłem. nileshkumar83.blogspot.com/2012/05/…
Joop
1
@SamuelJaeschke Metoda hook na stackoverflow.com/a/27508116/5757159 działa za każdym razem. Nie wymaga pękania.
ThunderFrame

Odpowiedzi:

11

Elcomsoft tworzy całkiem przydatny program o nazwie Advanced Office Password Recovery, który może wykonać to zadanie lepiej niż cokolwiek innego, z czego korzystałem.

Prawdopodobnie warto nadać wartość danym, które próbujesz odzyskać, zanim spróbujesz tego zrobić, czasem taniej jest pozwolić użytkownikowi na ponowne utworzenie dokumentu od zera (i uczy go cennej lekcji ;-)). AOPR nie jest darmowy, a hasła można czasem wypracować tylko przy użyciu siły (wypróbowanie każdej możliwej kombinacji liter), co może zająć bardzo dużo czasu.

Mike1980
źródło
Programy Elmcomsoftu są dobre, w przeszłości miałem z tym sukces, otwierając plik Excel wysłany bez hasła. Zdobądź przyzwoitą listę słów i wypróbuj ją najpierw (ta zawarta w Kainie i Ablu to niezła 3 MB). Jeśli to się nie powiedzie, spróbuj brutalnej siły, ale jeśli to silne hasło, nigdy się nie dostaniesz.
Dentrasi
Nie jestem fanem polecania komercyjnego oprogramowania na tej stronie, ale w tym przypadku jest to zdecydowanie najlepszy wybór. Zalecana. +1.
agtoever
1

Czy jest coś takiego, dodatek XLA do usuwania hasła Excel , czego szukasz?

EDYCJA: Myślenie o tym, może nie - służy do usuwania hasła z chronionych arkuszy / skoroszytów.

Premia
źródło
czy etycznie możemy rozwiązać za pomocą tego narzędzia?
Joe
1

Jeśli znasz hasło, przejdź do dokumentu Excel. Następnie kliknij Plik> Zapisz jako. Po lewej stronie przycisku Zapisz znajduje się mała rozwijana etykieta Narzędzia. Kliknij na to, a następnie na Opcje ogólne. Usuń tam hasła i kliknij OK. Zapisz dokument.

Jeśli nie wiesz, jakie jest hasło, możesz użyć VBA, aby je znaleźć. Gdybym musiał zgadywać, twój użytkownik prawdopodobnie nie użył super silnego hasła, więc moglibyśmy go znaleźć przy użyciu metody typu brute force. Poniższy kod jest przybliżony, ale pomógł mi znaleźć słabe, utracone hasło do dokumentów niektórych moich użytkowników. Sprawdza hasła o dowolnej długości ze znakami ASCII od 1 do z. Zadzwoń do niego z okna natychmiastowego i poczekaj kilka minut:

? GetPassword("D:\mywkbk.xlsx")

-

Public Function GetPassword(ByRef sFileName As String) As String
On Error Resume Next
    Dim pw As String
    pw = ""
    Do
        VBA.Err.Clear
        pw = GenerateNextPassword(pw)            
        Application.Workbooks.Open sFileName, False, True, , pw, pw
        VBA.DoEvents
    Loop While VBA.Err.Number = 5408
    GetPassword = pw
End Function

Public Function GenerateNextPassword(ByRef sCurrentPassword As String) As String
    Const MAX_CHAR = 122
    Const MIN_CHAR = 49

    Dim sCurrentPasswordMax As String
    Dim sNewPassword As String
    Dim i As Long

    sCurrentPasswordMax = String(Len(sCurrentPassword), Chr(MAX_CHAR))
    If sCurrentPassword = sCurrentPasswordMax Then
        'do an increment that changes the length
        sNewPassword = String(Len(sCurrentPassword) + 1, Chr(MIN_CHAR))
        Debug.Print Now(); ": "; sNewPassword
    ElseIf Asc(Right(sCurrentPassword, 1)) = MAX_CHAR Then
        'do an increment that changes multiple characters
        sNewPassword = Left(sCurrentPassword, Len(sCurrentPassword) - 1) & Chr(MIN_CHAR)
        For i = Len(sCurrentPassword) - 1 To 1 Step -1
            sNewPassword = Left(sNewPassword, i - 1) & Chr(Asc(Mid(sNewPassword, i, 1)) + 1) & Mid(sNewPassword, i + 1)
            If Asc(Mid(sCurrentPassword, i, 1)) <> MAX_CHAR Then
                Exit For
            End If
        Next i
    Else
        'do an increment on the rightmost character
        sNewPassword = Left(sCurrentPassword, Len(sCurrentPassword) - 1) & Chr(Asc(Right(sCurrentPassword, 1)) + 1)
    End If

    GenerateNextPassword = sNewPassword
End Function
Bobort
źródło
Domniemane jest, że hasło zostało utracone i zapomniane, więc pierwszy akapit jest nieistotny. Jeśli znajdziesz procedurę VBA do usunięcia nieznanego hasła, daj nam znać, ale podejrzewam, że jest to niemożliwe.
Scott,
1
Po ponownym przeczytaniu OP zdecydowanie stanowczo twierdzę, że nie jest jasne, że hasło zostało utracone, dlatego trzymam tam pierwszy akapit. Zaktualizowałem odpowiedź za pomocą kodu VBA, który może być użyty do znalezienia hasła w ciągu kilku minut lub dłużej, jeśli hasło nie jest znane.
Bobort
0

Podejście Hook wykazane w tym artykule SO działa KAŻDY czas.

https://stackoverflow.com/a/27508116/5757159

Bez edytorów szesnastkowych, bez pobierania, bez instalatorów. Tylko czyste rozwiązanie VBA.

ThunderFrame
źródło