Обновление
Выпущено 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/
Сам проект является живым, релиз релиза в крыльях - снова затруднен инфраструктурными проблемами, как описано в
Извините за беспорядок , не слишком много мы можем сделать прямо сейчас (или в ближайшем будущем) Jeanette
Это маленький мир, так как код указывает, что я разместил этот код на другом форуме около 10 лет назад, увидев его где-то в другом месте - я думаю, на старом веб-сайте Джона Уокенбаха
Важно отметить, что эта защита кода применяется только к защите рабочего листа, а не к открытому файлу Excel или паролям VBA.
excel sheet protection “test” and “zzyw”
дает другие ссылки, такие как от Tom Urtis [/g3]
Просто догадайтесь, но мне кажется, что тесты Excel проверяются, если пароль действителен, запустив его через какую-то хэш-функцию, которая производит довольно небольшой диапазон результатов и сравнивает ее с сохраненным хеш-значением.
Предположительно, эта функция выполняет тестирование всех этих значений, пока не найдет тот, который работает. Судя по используемым значениям, хеш-функция производит 2 ^ 11 * (126-31) разные значения, все из которых могут быть получены значениями, генерируемыми в этом коде.
Мой анализ предполагает, что эта процедура работает. Я не тестировал его.
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
Увлекательный - раньше я знал фрагмент кода, но не объяснение, которое написал brettdj. Как объяснили другие, это поиск грубой силы для хеш-коллизий. Фактически, похоже, это было сделано методом проб и ошибок, поскольку оно делает гораздо больше работы, чем необходимо (сгенерировано 194560 комбинаций, но есть только 32768 хэш-значений).
Хэш-алгоритм Excel короче (как объяснено в http://chicago.sourceforge.net/devel/docs/excel/encrypt.html ):
Зная это, можно выполнить поиск грубой силы следующим образом:
Самый простой способ - использовать 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
Код выполняет поиск грубой силы с использованием паролей шифрования 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 .
Experts-Exchange
, увидев его где-то в другом месте. Я не совсем понимаю, о какой документации MSFT вы имеете в виду? – brettdj 14 October 2012 в 23:15