Top.Mail.Ru
Ответы

Помогите расшифровать текст в 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

Код макроса:

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
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
По дате
По рейтингу
Аватар пользователя
Ученик
9мес

В зашифрованном тексте написан вопрос :

Сам вопрос - кот лижет на протяжение 30 минут жопу другого кота, а потом кусает его яйца. что это означает? стоит ли повторить?

Аватар пользователя
Ученик
9мес

Я не буду тебе помогать blb yf[eq



Видео по теме