Как этот код работает, чтобы разблокировать пароль excel sheet [duplicate]

Обновление

Выпущено SwingX 1.6.5-1 (на самом деле, некоторое время назад, забыли этот поток;), см. объявление на форуме swinglabs . Это регрессионный релиз для версии 1.6.5, в котором были некоторые проблемы с окраской, которые нарушили совместимость с кодом в версии 1.6.4. Эти проблемы были особенно опасны в основанных на синтезе LAF-сетях, где игнорировались синтезированные фоновые художники, f.i. для JXPanel и JRendererCheckBox. Проблемы устраняются в чрезвычайных ситуациях, частично путем внесения изменений. Планируется, что будущие выпуски будут рассмотрены более подробно.

Обновить

SwingX 1.6.4 выпущен, см. Объявление на форуме swinglabs на java.net

Обновить

SwingX 1.6.3 выпущен, артефакты доступны из maven rep (на java.net) , наиболее вероятно (мы не получили никаких оповещения :-) из центра также

Оригинальный ответ

, к счастью, доступность проекта сильно пострадала от перехода к инфраструктуре кенай - и что начиная с низкий уровень, поскольку задействованы рабочие ссылки. В частности, SwingLabs.org редко когда-либо поднимался, и все там сильно устарело.

Чтобы получить артефакты сборки, все выпуски доступны в разделе загрузки проекта

http://java.net/projects/swingx/downloads

(обратите внимание на описание файла «downloads-broken-due-to-migration-crap;»)

EDIT: для вашего удобства (и, поскольку кажется сложным c & amp; p из описания файла выше ;-) ссылка для просмотра голых костей раздела загрузки, затем перейти вниз к релизам

http: / /java.net/downloads/swingx/

Сам проект является живым, релиз релиза в крыльях - снова затруднен инфраструктурными проблемами, как описано в

http://www.java.net/forum/topic/javadesktop/java-desktop-technologies/swinglabs/latest-swingx-demo-other-stuff

Извините за беспорядок , не слишком много мы можем сделать прямо сейчас (или в ближайшем будущем) Jeanette

13
задан brettdj 27 March 2015 в 03:46
поделиться

5 ответов

Это маленький мир, так как код указывает, что я разместил этот код на другом форуме около 10 лет назад, увидев его где-то в другом месте - я думаю, на старом веб-сайте Джона Уокенбаха

Важно отметить, что эта защита кода применяется только к защите рабочего листа, а не к открытому файлу Excel или паролям VBA.

  • Одним из примеров этой полной записи является здесь (снимок экрана ниже)
  • googling excel sheet protection “test” and “zzyw” дает другие ссылки, такие как от Tom Urtis

enter image description here [/g3]

22
ответ дан brettdj 22 August 2018 в 19:40
поделиться
  • 1
    Приятно, что мое предположение несколько подтвердилось :). 16-битный хеш довольно крутой. Предположим, что это защита только листа, а не защита рабочей книги. Знаете ли вы, что процедура, опубликованная OP, дает все отличные результаты от хеш-функции? Полагаю, я могу проверить это, но я нахожусь на ленивой стороне. – mkingston 12 October 2012 в 06:26
  • 2
    @brettdj, я смущен, что ваше объяснение не соответствует документации Microsoft. Вы говорите, что когда вы изначально писали этот код, что хэш был сохранен как 16-битное значение, закодированное как серия A и B, за которым следует символ ASCII, и что ваш код просто пытается использовать все хэш-значения? – vy32 14 October 2012 в 15:58
  • 3
    @ vy32 Это не мой код, я отправил его в Experts-Exchange, увидев его где-то в другом месте. Я не совсем понимаю, о какой документации MSFT вы имеете в виду? – brettdj 14 October 2012 в 23:15
  • 4
    + 1 Красивое объяснение. :) – Siddharth Rout 15 October 2012 в 05:19

Просто догадайтесь, но мне кажется, что тесты Excel проверяются, если пароль действителен, запустив его через какую-то хэш-функцию, которая производит довольно небольшой диапазон результатов и сравнивает ее с сохраненным хеш-значением.

Предположительно, эта функция выполняет тестирование всех этих значений, пока не найдет тот, который работает. Судя по используемым значениям, хеш-функция производит 2 ^ 11 * (126-31) разные значения, все из которых могут быть получены значениями, генерируемыми в этом коде.

Мой анализ предполагает, что эта процедура работает. Я не тестировал его.

3
ответ дан mkingston 22 August 2018 в 19:40
поделиться
  • 1
    Спасибо, что выработали это. Я шел по тому же пути, но я не мог добраться туда! – Andrew White 12 October 2012 в 05:34
  • 2
    Как я уже сказал, я не уверен, что это правильно. – mkingston 12 October 2012 в 05:35
Sub FindPassword()
    'Breaks worksheet password protection.
    Dim i As Integer, j As Integer, k As Integer
    Dim l As Integer, m As Integer, n As Integer
    Dim i1 As Integer, i2 As Integer, i3 As Integer
    Dim i4 As Integer, i5 As Integer, i6 As Integer
    On Error Resume Next
    For i = 65 To 66: For j = 65 To 66: For k = 65 To 66
    For l = 65 To 66: For m = 65 To 66: For i1 = 65 To 66
    For i2 = 65 To 66: For i3 = 65 To 66: For i4 = 65 To 66
    For i5 = 65 To 66: For i6 = 65 To 66: For n = 32 To 126
    ActiveSheet.Unprotect Chr(i) & Chr(j) & Chr(k) & _
        Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & _
        Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
    If ActiveSheet.ProtectContents = False Then
        MsgBox "One usable password is " & Chr(i) & Chr(j) & _
            Chr(k) & Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & _
            Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
         Exit Sub
    End If
    Next: Next: Next: Next: Next: Next
    Next: Next: Next: Next: Next: Next
End Sub
-2
ответ дан TLama 22 August 2018 в 19:40
поделиться

Увлекательный - раньше я знал фрагмент кода, но не объяснение, которое написал brettdj. Как объяснили другие, это поиск грубой силы для хеш-коллизий. Фактически, похоже, это было сделано методом проб и ошибок, поскольку оно делает гораздо больше работы, чем необходимо (сгенерировано 194560 комбинаций, но есть только 32768 хэш-значений).

Хэш-алгоритм Excel короче (как объяснено в http://chicago.sourceforge.net/devel/docs/excel/encrypt.html ):

  1. Возьмите код ascii каждого символа passwort.
  2. Относитесь к нему как к 16-битовому номеру. Сдвиньте его биты влево, в зависимости от положения символа (1 бит для первого символа, 2 для второго и т. Д.)
  3. XOR все символы вместе, давая 16-битный подписанный int> = 0.
  4. XOR, которые приводят к длине пароля и магическому числу.

Зная это, можно выполнить поиск грубой силы следующим образом:

  • Самый старший бит всегда равен нулю, поэтому для тестирования требуется 15 бит.
  • Разделите их на три счетчика, каждый из которых охватывает 5 бит. Таким образом, каждый счетчик может представлять печатный символ ascii.
  • Упаковать представление ascii этих счетчиков в строку пароля таким образом, чтобы они не влияли друг на друга.

Самый простой способ - использовать 11-символьный пароль и поместить счетчики в позиции 1, 6 и 11. Переключение бит на шаге 2 выравнивает бит счетчика правильным образом: первый счетчик («x») сдвинутый 1 бит, второй («y») - 6 бит, третий («z») - 11 бит. В поразрядном представлении хеша счетчики влияют на следующие биты:

bit: 76543210 76543210
cnt: -zzzzyyy yyxxxxxz

Операции XOR можно игнорировать, поскольку аргумент XOR постоянно постоянный. По этой же причине можно добавить постоянное смещение (например, 64). Также не имеет значения, какой символ используется для других байтов пароля (2-5, 7-10).

Итерируя все возможные комбинации x, y, z, вы в конечном итоге найдете пароль, который дает такое же значение хэша, как и исходное.

Public Sub demo()
    ' http://stackoverflow.com/questions/12852095/how-does-excels-worksheet-password-protection-work
    Dim x As Integer, y as Integer, z as Integer
    Dim part1 As String, part12 As String
    Dim sh As Worksheet
    Set sh = ThisWorkbook.Worksheets(1)

    sh.Protect "$ome_Insanely_Long_and_c0mplex_password! [(which i$ imp*ssible t0 re-member)]"

    For x = 64 To 95
        ' pad with dots, so that x, y and z affect nonoverlapping bits of the hash.
        part1 = Chr(x) + "...."
        For y = 64 To 95
            part12 = part1 + Chr(y) + "...."
            For z = 64 To 95
                On Error Resume Next
                    sh.Unprotect part12 + Chr(z)
                    If Err.Number = 0 Then
                        Debug.Print "Password: '" & part12 + Chr(z) & "'"
                        Exit Sub
                    End If
                On Error GoTo 0
            Next
        Next
    Next
End Sub
9
ответ дан Torben Klein 22 August 2018 в 19:40
поделиться
  • 1
    Этот код не работал, когда я попробовал. Однако эта страница включает процедуру (модифицированную Норманном Харкером и JE McGimpsey), чтобы разблокировать защищенный лист (и он работает достаточно хорошо). – ARich 13 November 2013 в 16:22
  • 2
    Это лучшее объяснение, которое я видел, и технически единственно правильный, поскольку он идентифицирует истинное количество возможных «паролей». как 2 ^ 15 = 32768. Хэш-функция Excel - это Surjective Function , отображающая большое количество входных паролей для небольшого количества паролей. Torben идентифицирует подмножество входных паролей, который является Bijective , к набору возможных хешей, создавая оптимизированную версию часто используемого перекрестного взлома. – Blackhawk 13 November 2013 в 16:37
  • 3
    Спасибо, этот алгоритм намного эффективнее! @ARich Я отследил алгоритм на mcgimpsey.com норвежцу по имени Эйнар Столе Хуз. Ссылка на его дополнение excel была опубликована [здесь] [1] в 1998 году, на которую кто-то ответил с фактическим кодом. [1]: groups.google.com/d/msg/microsoft.public.de.excel/CfA0P4OZzfY/… – xXhRQ8sD2L7Z 6 March 2015 в 04:35

Код выполняет поиск грубой силы с использованием паролей шифрования AAAAAAAAAAA (SPACE) через BBBBBBBBBBB (~), где (SPACE) - это пробельный символ (CHR (32)) и (~), конечно, символ 126. Когда пароль обнаружено, что он отображает пароль в окне сообщения.

Конечно, это означает, что он проверяет пароли длиной всего 12 символов и состоят только из прописных букв A (ASCII 65) и B (ASCII 66), за которым следует один из печатаемых символов ASCII. @mkingston правильно, что он тестирует 2 ^ 11 * (126-31) разные значения. Но нет хеш-функции. Я не думаю, что это приведет к взлому многих электронных таблиц. Вам будет лучше использовать Одна из этих программ из AccessData .

Подробнее о ActiveSheet.Protect и ActiveSheet.Unprotect см. в http://msdn.microsoft.com/en-us/library/office/aa191957 (v = office.10). ASPX .

0
ответ дан vy32 22 August 2018 в 19:40
поделиться
  • 1
    Последний символ увеличивается в первую очередь. AA..A & amp; chr (32) через AA..A & amp; CHR (126). Затем AA..B & amp; chr (32) через AA..B & amp; CHR (126). – mkingston 12 October 2012 в 05:29
  • 2
    Ага. Я это исправил. – vy32 12 October 2012 в 05:30
  • 3
    Извините, вероятно, едва получил комментарий, прежде чем вы это сделали :) – mkingston 12 October 2012 в 05:32
  • 4
    @andrewwhite На самом деле это неправильно понимает применение этого кода. Как видно из , я не думаю, что это приведет к взлому многих электронных таблиц – brettdj 13 October 2012 в 11:59
  • 5
    @ VY32 Прочитайте ссылку, которую я предоставил. – brettdj 14 October 2012 в 00:00
Другие вопросы по тегам:

Похожие вопросы: