Excel의 워크시트 암호 보호 작동 방식
이 코드는 몇 년 동안 인터넷에 떠돌았습니다. 암호를 모르는 Excel 스프레드시트의 암호를 해독하기 위한 암호를 제공할 수 있습니다.
http://www.theofficeexperts.com/VBASamples/Excel02.htm
저는 이것이 어떻게 작동하는지에 관심이 있지만, 그것을 해결할 수 없을 것 같습니다.특정 값으로 암호화되어 있으며, 여러 가지 방법으로 액세스할 수 있습니다(인터넷 상의 일부 장소에서는 원래 암호를 제공하거나 작동할 다른 암호를 제공할 것이라고 말합니다). 공용 키와 같이 100개의 공용 키를 사용하여 하나의 개인 키로 모두 작동할 수 있습니다.
제가 보기에는 정수 변수를 만들고 특정 숫자로 채우는 것처럼 보입니다. 그 숫자를 관련 문자로 변환하기 전에 말입니다.이것들은 항상 똑같지 않을까요?그렇다면 Excel 보호를 위한 "마스터 암호"가 있습니까?
모두 감사합니다!
편집: 제가 게시한 예제 코드에서 Forn = 32 To 126을 발견했습니다.공백에서 타일까지 모든 문자로 보이는 ASCII 테이블과 상호 참조합니다.구문 때문에 이해할 수 없는 사전 공격인가요?
코드는 제가 약 10년 전에 다른 포럼에서 다른 곳에서 본 적이 있다는 것을 나타내듯이 그것은 작은 세상입니다 - 저는 John Walkenbach의 오래된 웹 사이트에서 생각합니다.
이 코드 보호는 Excel의 파일 열기 또는 VBA 암호가 아닌 워크시트 보호에만 적용됩니다.
- 이 전체 기록의 한 예는 다음과 같습니다(아래 스크린샷).
excel sheet protection “test” and “zzyw”
Tom Urtis로부터 이것과 같은 다른 언급을 제공합니다.
편집(2020):Excel 2013부터는 보호 체계가 변경된 것으로 보입니다.그래서 원래의 대답은 더 이상 역사적인 의미만 가지고 있습니다.
새로운 보호 기능을 사용하면 최첨단 SHA-512 해시를 사용하여 암호를 검색하는 것이 거의 불가능합니다.하지만 몇 초 안에 간단히 뽑아낼 수 있다면 왜 부러질까요?
- 퍼를열의 압축을 .
.xlsx
또는.xlsm
- 편집을
xl/worksheets/sheet<num>.xml
- 및 색및제거검
<sheetProtection... />
꼬리표를 달다 - 저장, 다시 압축, 즐겨찾기
원본 답변(Excel 2010까지)
매혹적입니다 - 저는 이전에 코드 스니펫을 알고 있었지만, brettdj가 게시한 설명은 아니었습니다.다른 사람들이 설명했듯이, 이것은 해시 충돌에 대한 무차별적인 검색입니다.실제로 필요 이상의 작업을 수행하기 때문에 시행착오를 통해 만들어진 것으로 보입니다(194560개의 조합이 생성되지만 가능한 해시 값은 32768개뿐입니다).
Excel의 해시 알고리즘을 간단히 설명합니다(http://chicago.sourceforge.net/devel/docs/excel/encrypt.html) 에서 설명).
- 패스워드의 각 문자의 아스키 코드를 취합니다.
- 16비트 부호 있는 숫자로 처리합니다.문자 위치를 기준으로 비트를 왼쪽으로 이동합니다(첫 번째 문자는 1비트, 두 번째 문자는 2비트 등).
- XOR 모든 문자를 함께 사용하여 16비트 서명된 int >=0을 제공합니다.
- 암호의 길이와 마법 번호가 포함된 XOR입니다.
이를 알면 다음과 같이 브루트 포스 검색을 고안할 수 있습니다.
- 가장 높은 비트는 항상 0이므로 테스트할 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
추측일 뿐이지만, 엑셀은 꽤 작은 범위의 결과를 생성하고 저장된 해시 값과 비교하는 일종의 해시 함수를 통해 암호가 유효한지 여부를 테스트하는 것처럼 보입니다.
이 함수가 수행하는 작업은 작동하는 값을 찾을 때까지 모든 값을 테스트하는 것으로 추정됩니다.사용된 값으로 판단하면 해시 함수는 2^11*(126-31)개의 다른 값을 생성하며, 이 모든 값은 이 코드에서 생성된 값으로 생성될 수 있습니다.
제 분석으로는 이 루틴이 효과가 있다고 가정합니다.저는 그것을 테스트하지 않았습니다.
코드는 암호화 암호 AAAAAAAA(SPACE)에서 BBBBBBBBBBBBB(~)를 사용하여 브루트 포스 검색을 수행합니다. 여기서 (SPACE)는 공백 문자(CHR(32)이고 (~)는 물론 문자 126입니다.암호를 찾으면 메시지 상자에 암호를 표시합니다.
물론 이는 정확히 12자 길이이며 대문자 A(ASCII 65) 및 B(ASCII 66)와 인쇄 가능한 ASCII 문자 중 하나로 구성된 암호만 확인한다는 것을 의미합니다.@mkingston은 2^11*(1987-31)개의 다른 값을 테스트하는 것이 맞습니다.하지만 해시함수가 없습니다.저는 이것이 많은 스프레드시트에 균열을 줄 것이라고 생각하지 않습니다.액세스 데이터의 이러한 프로그램 중 하나를 사용하는 것이 좋습니다.
ActiveSheet에 대한 자세한 내용은 다음과 같습니다.보호 및 활성 시트.보호 해제. http://msdn.microsoft.com/en-us/library/office/aa191957(v=office.10).aspx 을 참조하십시오.
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
언급URL : https://stackoverflow.com/questions/12852095/how-does-excels-worksheet-password-protection-work
'programing' 카테고리의 다른 글
여러 값에 일치하는 Oracle 행 삭제 (0) | 2023.06.19 |
---|---|
비동기 하위 수집 데이터를 기반으로 한 VueJS 목록 정렬 (0) | 2023.06.19 |
스프링 부트 + 유레카 서버 + 하이스트릭스(터빈 포함): 빈 터빈.스트림 (0) | 2023.06.19 |
SQL Server 쿼리를 사용하여 날짜가 30일보다 오래된 행 삭제 (0) | 2023.06.19 |
터미널의 Git commit이 VIM을 열지만 터미널로 돌아갈 수 없습니다. (0) | 2023.06.19 |