Помогите расшифровать текст в Excel VBA
У меня есть Excel-файл с макросами, который шифрует и дешифрует текст. Известно, что используется пароль 2023, но сам расшифровать с помощью интернета не смог.
В коде есть функция DeShifrovka(), которая, судя по всему, сдвигает символы на значения из массива cparshifr. Я подозреваю, что пароль 2023 каким-то образом преобразуется в этот массив, но точной логики не вижу.
Пример данных:
Зашифрованный текст:
wЂ}zxЃ7ywЃ~2xxysn1NK2Cu7H1Js2CM7Fm9LJ1Ms2FR7Fm9L2Bu7K1Js2DR7Cm9LI1Js2DP7Dmu7Cmu7CA9L21KEF1us yѓ‚~1‘}yy9~z{us2DP7Cm9KG1Js2BL7Em9MD1Js2FM7Em9KI1Ms2BJ7Fm9KD1Ls2J9Hn1JG2Dus2Cus2BI7F19H@I9sn ш,шьяыч2эщ'ъ09(?яFHC@Jsn1JL2Bu7GD9Hn1KK2Bu7E1Js2BQ7Cm9LG1Js2DK7Cm9M2Bu7GA9In1NK2Cus2Jus2BI7J19K@D9sn с&ы"щ8$ ущ7ь!!($щ&ч2"F%?BJFCmu7CH9Kn1LL2Bu7FD9In1LH2Du7FG9Jn1LJ2Bu7EE9Hn1KP2Bu7CC9Jn1JO2Bus2BPsn1JG2F97D?M7nm Э!,тъ$%фс9хэщ87#>'DCBHHnm9IB1Ks2DN7Cm9JK1Js2GI7Em9II1Js2FK7Fm9KE1Ms2EK7Em9HB1Js2FR7Fmu7Gmu7CA9K21JEJ1us
Также примеры из другого листа:
%тцюъ'щют!-3яр1D>FF
%ьц .(щют!-3яр1I>@A
%тцюъ'щют!-3яр1E>I
%тцюъ'щют!-3яр1DD<DH
Код макроса:
Public timeall, timeost, itime As Integer
Public kolvopr, kolzad, nvopr, otvet, kolotv, kv1, kv2, lparshifr, lshprot As Integer
Public razmetka(100), porvopr(100), nvoprs(100), porotv(5), notvs(5), cparshifr(20), cshprot(20) As Integer
Public cisl_otv, cisl_otv0 As Double
Public priz_chisl_otv As Integer
Public s, sprot, sgrafika As String
Sub Тестирование()
'
' Тестирование Макрос
'
' Сочетание клавиш: Ctrl+Shift+T
'
' Только для преподавателя
Dim i As Integer
Range("A1").Select
i = 2
' Количество вопросов в тесте и его разметка
kolvopr = 0
Do
If Sheets("Лист2").Cells(i, "A") <> "" Then
kolvopr = kolvopr + 1
razmetka(kolvopr) = i
i = i + 1
Else
If Sheets("Лист2").Cells(i, "B") <> "" Then
i = i + 1
Else
GoTo konrazm
End If
End If
Loop
konrazm:
lparshifr = 0
' --------------------------------
UF1.Show
Range("A1").Select
End Sub
Public Sub Vopros()
Dim i, i1, j1, j As Integer
' Очистка
UF3.Label1.Caption = ""
UF3.Label2.Caption = ""
UF3.Label3.Caption = ""
UF3.Label4.Caption = ""
UF3.Label5.Caption = ""
UF3.Label6.Caption = ""
UF3.CommandButton4.Visible = False
UF3.CommandButton5.Visible = False
UF3.CommandButton6.Visible = False
UF3.CommandButton7.Visible = False
UT1.Label2.Caption = Str(kolzad - nvopr)
i = razmetka(nvoprs(nvopr))
' Количество ответов в вопросе
j = 1
Do While Sheets("Лист2").Cells(i + j, "B") <> ""
notvs(j) = j
porotv(j) = i + j
j = j + 1
Loop
kolotv = j - 1
' Генерация списка ответов
Randomize
For i1 = 1 To kolotv - 1
j = Int(Rnd() * (kolotv - i1 + 1)) + i1
j1 = notvs(i1)
notvs(i1) = notvs(j)
notvs(j) = j1
j1 = porotv(i1)
porotv(i1) = porotv(j)
porotv(j) = j1
Next i1
' Вывод вопроса
s = Sheets("Лист2").Cells(i, "A")
DeShifrovka
If Mid(s, 1, 1) = "\" Then
' Графический вопрос
UF3.Image1.Visible = True
UF3.Image1.Picture = LoadPicture(sgrafika & s)
Else
UF3.Image1.Visible = False
UF3.Label1.Caption = s
End If
' Вывод вариантов ответа
' Первый вариант ответа
s = Sheets("Лист2").Cells(porotv(1), "B")
DeShifrovka
If Mid(s, 1, 1) = "*" Then ' Числовой ответ
priz_chisl_otv = 1
Mid(s, 1, 1) = " "
cisl_otv0 = Val(s)
' Текст к числовому ответу
i1 = Len(s)
i = InStr(s, "'")
If i > 0 Then
UF3.Label7.Caption = Mid(s, i + 1, i1 - i)
Else
UF3.Label7.Caption = ""
End If
UF3.TextBox1.Text = ""
UF3.TextBox2.Text = ""
UF3.TextBox3.Text = ""
UF3.TextBox4.Text = ""
UF3.TextBox5.Text = ""
UF3.TextBox6.Text = ""
UF3.TextBox7.Text = ""
UF3.TextBox8.Text = ""
UF3.TextBox9.Text = ""
UF3.TextBox10.Text = ""
UF3.Frame3.Visible = True
Else
priz_chisl_otv = 0
UF3.Frame3.Visible = False
UF3.Label2.Caption = s
s = Sheets("Лист2").Cells(porotv(2), "B")
DeShifrovka
UF3.Label3.Caption = s
UF3.CommandButton4.Visible = True
If kolotv >= 3 Then
s = Sheets("Лист2").Cells(porotv(3), "B")
DeShifrovka
UF3.Label4.Caption = s
UF3.CommandButton5.Visible = True
End If
If kolotv >= 4 Then
s = Sheets("Лист2").Cells(porotv(4), "B")
DeShifrovka
UF3.Label5.Caption = s
UF3.CommandButton6.Visible = True
End If
If kolotv = 5 Then
s = Sheets("Лист2").Cells(porotv(5), "B")
DeShifrovka
UF3.Label6.Caption = s
UF3.CommandButton7.Visible = True
End If
End If
' Число заданий
UF3.Caption = "Вопрос № " & Str(nvopr)
End Sub
Public Sub Preryv()
' Прерывание по времени
Dim i, n As Integer
Dim p, y As Double
If timeost > 0 Then
timeost = timeost - 1
UT1.Label3.Caption = Str(timeost)
Application.OnTime Now + TimeValue("00:00:01"), "Preryv"
Else
' Время кончилось
UF3.Hide
' Обработка результатов тестирования
UF5.Label1.Caption = Str(kolzad)
UF5.Label5.Caption = Str(kv1)
UF5.Label6.Caption = Str(kv2)
p = kv2 / kolzad
UF5.Label7.Caption = Str(Int(p * 1000) / 10) & "%"
y = 5 * (Exp(Log(2) * p / 0.88) - 1)
y = Int(y * 10) / 10
s = sprot & "\" & Str(kv1) & Str(kv2) & " " & Str(y) & " \\"
Sifr_Prot
' запись строки протокола на Лист3
i = 1
Do While Sheets("Лист3").Cells(i, "A") <> ""
i = i + 1
Loop
Sheets("Лист3").Cells(i, "A") = s
' Отображение итоговой оценки
' UF5.Label8.Caption = Str(y) ' Для версии без графики
UF5.Image10.Visible = False
UF5.Image11.Visible = False
UF5.Image12.Visible = False
UF5.Image13.Visible = False
UF5.Image40.Visible = False
UF5.Image41.Visible = False
UF5.Image2.Visible = False
UF5.Image30.Visible = False
UF5.Image31.Visible = False
UF5.Image32.Visible = False
UF5.Image33.Visible = False
UF5.Image34.Visible = False
UF5.Image35.Visible = False
UF5.Image36.Visible = False
UF5.Image37.Visible = False
UF5.Image38.Visible = False
UF5.Image39.Visible = False
n = Int(y)
Select Case n
Case 0
UF5.Image10.Visible = True
Case 1
UF5.Image11.Visible = True
Case 2
UF5.Image12.Visible = True
Case 3
UF5.Image13.Visible = True
Case 4
UF5.Image40.Visible = True
Case 5
UF5.Image41.Visible = True
End Select
UF5.Image2.Visible = True
n = Int((y - n) * 10 + 0.1)
Select Case n
Case 0
UF5.Image30.Visible = True
Case 1
UF5.Image31.Visible = True
Case 2
UF5.Image32.Visible = True
Case 3
UF5.Image33.Visible = True
Case 4
UF5.Image34.Visible = True
Case 5
UF5.Image35.Visible = True
Case 6
UF5.Image36.Visible = True
Case 7
UF5.Image37.Visible = True
Case 8
UF5.Image38.Visible = True
Case 9
UF5.Image39.Visible = True
End Select
UF5.Show
End If
End Sub
Public Sub DeShifrovka()
' Дешифрование строки на лету
Dim i, j, ls As Integer
' Обработка строки
ls = Len(s)
j = 1
For i = 1 To ls
ic = Asc(Mid(s, i, 1)) - cparshifr(j)
If ic < 32 Then ic = ic + 224
Mid(s, i, 1) = Chr(ic)
j = j + 1
If j > lparshifr Then j = 1
Next i
End Sub
Private Sub Sifr_Prot()
' Шифрование по паролю
Dim i, j, ls As Integer
' Обработка строки
ls = Len(s)
j = 1
For i = 1 To ls
ic = Asc(Mid(s, i, 1)) + cshprot(j)
If ic > 255 Then ic = ic - 224
Mid(s, i, 1) = Chr(ic)
j = j + 1
If j > lshprot Then j = 1
Next i
End SubВ зашифрованном тексте написан вопрос :
Сам вопрос - кот лижет на протяжение 30 минут жопу другого кота, а потом кусает его яйца. что это означает? стоит ли повторить?
Я не буду тебе помогать blb yf[eq