Сейчас на форуме: bezumchik, tyns777, Lohmaty (+7 невидимых)

 eXeL@B —› Вопросы новичков —› Анализ алгоритма создания регистрационного ключа
Посл.ответ Сообщение

Ранг: 5.8 (гость)
Активность: 0=0
Статус: Участник

Создано: 21 мая 2019 13:14 · Поправил: rummy
· Личное сообщение · #1

Коллеги, доброго времени суток! В качестве личного самообразования пытался реализовать алгоритм создания лицензионного ключа к надстройке Excel
Вот код проверки соответствия ключа контрольному числу:
Code:
  1. Private Sub btnActivate_Click()
  2. = Trim(Me.txtKey.Text) 'это ключ
  3. 'проверяем длину ключа
  4.     If Len(k) <> 9 Then
  5.         MsgBox "Неправильный код активации.", vbCritical + vbOKOnly, "Ошибка"
  6.         Exit Sub
  7.     End If
  8. 'если ключ оффлайн (третий символ ключа буква "х" (экс), то проверяем его и активируем локально
  9.  
  10.     If Mid(k, 3, 1) = "x" Then
  11.         For i = 2 To 8
  12.             Total = Total + Asc(Mid(k, i, 1)) * i 'контрольное число
  13.         Next i
  14.  
  15.         If Left(k, 1) = Mid(Total, 3, 1) And Right(k, 1) = Mid(Total, 4, 1) Then
  16.             Me.lblLicense.Caption = "ПОЛНАЯ ВЕРСИЯ"
  17.             Me.Label11.Visible = False
  18.             Me.Label12.Visible = False
  19.             Me.txtKey.Visible = False
  20.             Me.btnActivate.Visible = False
  21.             Me.Height = 145
  22.             SaveSetting "Office Tools", "Language", "Codepage", Encode("2", Format(Date, "YYMMDD"))
  23.             MsgBox "Надстройка успешно активирована на этом ПК." & vbNewLine & vbNewLine & "Теперь у вас полная безлимитная версия! Пользуйтесь на здоровье!", vbExclamation + vbOKOnly, "Успешная активация"
  24.             Exit Sub
  25.         Else
  26.             MsgBox "Неправильный код активации.", vbCritical + vbOKOnly, "Ошибка"
  27.        Exit Sub
  28.        End If
  29.     End If
  30. End Sub

Замена знаков равенства на "неравно" легко решает проблему регистрации, но хотелось бы понять, как изготовить правильный ключ. Заранее спасибо за подсказки! Всем добра!



Ранг: 1.2 (гость)
Активность: 0.010
Статус: Участник

Создано: 21 мая 2019 13:53
· Личное сообщение · #2

For i = 2 To 8
Total = Total + Asc(Mid(k, i, 1)) * i 'контрольное число'
Next i

"abxdefghk" <- k
1: a // Left(k, 1)
2: b * 2 + // Mid(Total, 1, 1) ?
3: x * 3 +
4: d * 4 + // Mid(Total, 3, 1)
5: e * 5 + // Mid(Total, 4, 1)
6: f * 6 +
7: g * 7 +
8: h * 8
9: k // Right(k, 1)
== Total

Left(k, 1) = Mid(Total, 3, 1) And Right(k, 1) = Mid(Total, 4, 1)
a == b*2 + x*3 + d*4 // Left(k, 1) == Mid(Total, 3, 1)
k == b*2 + x*3 + d*4 + e*5 // Right(k, 1) == Mid(Total, 4, 1)

Что такое Asc() и склеивают ли + стринги тоже не знаю




Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 21 мая 2019 13:53 · Поправил: f13nd
· Личное сообщение · #3

Если я правильно все понял, у тебя проверяется 3й байт с 'x', первый символ ключа - с 3м символом кс, последний символ ключа - с 4м символом кс (хз в какой системе счисления эксель преобразует число в строку). Берешь рандомную шляпу с 'x' на 3й позиции, считаешь ее кс, выставляешь ее 3й символ вместо 1го в ключе, 4й вместо последнего и рассчитываешь затычку на любой другой символ ключа, чтобы сумма обратно совпала. Возможно придется это делать только с печатными символами. Если ты этот скрипт вставишь в ехель-документ и попытаешься использовать по назначению, вряд ли кто-то станет заморачиваться с подбором ключа

ЗЫ: не заметил умножение на i. Надо подобрать такой последний символ ключа, чтобы он совпал с нужным символом total, потом подставить нужный символ из total первым символом в ключ, он ни на что не влияет.

-----
2 оттенка серого




Ранг: 5.8 (гость)
Активность: 0=0
Статус: Участник

Создано: 21 мая 2019 14:08
· Личное сообщение · #4

tizo пишет:
Что такое Asc() и склеивают ли + стринги тоже не знаю

Asc - это числовой код символа по таблице Asci, + стринги соединяет


f13nd пишет:
Если ты этот скрипт вставишь в ехель-документ и попытаешься использовать по назначению, вряд ли кто-то станет заморачиваться с подбором ключа

Да не в этом дело, меняем в коде "=" на "<>", и надстройка хавает любой ключ длинной 9 символов с "х" на третьей позиции слева.
Я пытаюсь понять, КАК генерировать именно настоящий ключ. Надо понять, как сделать так, что бы в переменной Тотал 3я цифра совпала с 1й в ключе и 9я с 4й. В ключе могут быть и буквы и цифры.




Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 21 мая 2019 14:29 · Поправил: f13nd
· Личное сообщение · #5

rummy пишет:
Надо понять, как сделать так, что бы в переменной Тотал 3я цифра совпала с 1й в ключе и 9я с 4й. В ключе могут быть и буквы и цифры.

А у тебя ни первый ни последний символы не входят вообще в Total:
Code:
  1. k="0bxcdefh4"
  2.  
  3. If Mid(k, 3, 1) = "x" Then
  4.          Total=0
  5.     For i = 2 To 8
  6.         Total = Total + Asc(Mid(k, i, 1)) * i
  7.     Next
  8.          If Left(k, 1) = Mid(Total, 3, 1) And Right(k, 1) = Mid(Total, 4, 1) Then
  9.                  wscript.stdout.write "valid Left(k, 1)=" + Left(k, 1) + " Mid(Total, 3, 1)=" + Mid(Total, 3, 1) + " Right(k, 1)= " + Right(k, 1) + " Mid(Total, 4, 1)=" + Mid(Total, 4, 1)
  10.          Else
  11.                  wscript.stdout.write "wrong"
  12.          End If
  13. End If


Code:
  1. Сервер сценариев Windows (Microsoft R) версия 5.8
  2. Copyright (C) Корпорация Майкрософт 1996-2006, все права защищены.
  3.  
  4. valid Left(k, 1)=0 Mid(Total, 3, 1)=0 Right(k, 1)= 4 Mid(Total, 4, 1)=4

Как сгенерировать - тупо подставить

-----
2 оттенка серого




Ранг: 5.8 (гость)
Активность: 0=0
Статус: Участник

Создано: 21 мая 2019 14:54
· Личное сообщение · #6

Мы наверное о различных вещах говорим....

If Left(k, 1) = Mid(Total, 3, 1) And Right(k, 1) = Mid(Total, 4, 1) The
Условие валидности ключа - совпадение 1символа слева ключа
С третим символом числовой переменной Тотал, и первого символа ключа справа
с четвертым символом Тотал. Я пытаюсь понять алгоритм генерации
ключа, а не способ взлома.
Тотал изготавливается путем последовательного сложения asc кода
ключа, начиная со второго символа, помноженного на его порядковый номер
в цикле. Вроде все просто....но не получается пока.



Ранг: 1.2 (гость)
Активность: 0.010
Статус: Участник

Создано: 21 мая 2019 15:05 · Поправил: tizo
· Личное сообщение · #7

"Надо понять, как сделать так, что бы в переменной Тотал 3я цифра совпала с 1й в ключе и 9я с 4й."

Тотал 3я цифра == 4й в ключе * 4 == 1й в ключе
Тотал 4я цифра == 5й в ключе * 5 == 9й в ключе

Добавлено спустя 4 минуты
ключ: 8bx21fgh5 <- принцип, без аски конвертирования
2 * 4 = 8
1 * 5 = 5

Добавлено спустя 7 минут
f13 retort



Ранг: 5.8 (гость)
Активность: 0=0
Статус: Участник

Создано: 21 мая 2019 15:15 · Поправил: rummy
· Личное сообщение · #8

tizo Доберусь до дома, попробую. Прям слишком просто .... хотя.... в любом случае спасибо!

Попробовал. Не работает. Значение Тотал с этим ключом получается 3166




Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 21 мая 2019 15:39
· Личное сообщение · #9

tizo пишет:
f13 retort

А за что тебя кстати забанили?

Добавлено спустя 2 минуты
rummy пишет:
Условие валидности ключа - совпадение 1символа слева ключа
С третим символом числовой переменной Тотал, и первого символа ключа справа

У тебя в цикле берутся 7 символов ключа, без первого и последнего. Рассчет валидного ключа - выбор 7 символов в середине, рассчет Total для него и подстановка первого и последнего символов ключа в зависимости от Total.

-----
2 оттенка серого




Ранг: 160.9 (ветеран), 1thx
Активность: 0.050
Статус: Участник

Создано: 21 мая 2019 15:41
· Личное сообщение · #10

Да тут впринципе все просто, для кейгена можно использовать проверку. Тоесть, для ключа "03x123452" total будет 2002, после получения контрольного значения, берешь и в введенном ключе заменяешь первый знак на 3-е число из тотал, и последний знак на 4-е число из тотал. А кейген пиши сам. 03x123452 рабочий ключ для твоей процедуры.

| Сообщение посчитали полезным: rummy


Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 21 мая 2019 15:54 · Поправил: f13nd
· Личное сообщение · #11

rummy пишет:
Тотал с этим ключом получается 3166

Code:
  1. k="6bx21fgh6"
  2. wscript.stdout.write "k=" & k & vbcrlf
  3. If Len(k) = 9 Then
  4.          If Mid(k, 3, 1) = "x" Then
  5.                  Total=0
  6.                  For i = 2 To 8
  7.                         Total = Total + Asc(Mid(k, i, 1)) * i
  8.                  Next
  9.                  If Left(k, 1) = Mid(Total, 3, 1) And Right(k, 1) = Mid(Total, 4, 1) Then
  10.                         wscript.stdout.write "valid (total=" & Total & ")" & vbcrlf
  11.                  Else
  12.                         wscript.stdout.write "invalid (total=" & Total & ")" & vbcrlf
  13.                  End If
  14.          End If
  15. End If

Code:
  1. k=8bx21fgh5
  2. invalid (total=3166)
  3.  
  4. k=6bx21fgh6
  5. valid (total=3166)


-----
2 оттенка серого


| Сообщение посчитали полезным: rummy

Ранг: 5.8 (гость)
Активность: 0=0
Статус: Участник

Создано: 21 мая 2019 16:11
· Личное сообщение · #12

Спасибо всем за помощь! Буду ваять кейген



Ранг: 1.2 (гость)
Активность: 0.010
Статус: Участник

Создано: 21 мая 2019 16:14
· Личное сообщение · #13

f13nd пишет:
А за что тебя кстати забанили?

хз, если алхимик ѥште тут, я бунтую

ТС ваще юзверь...



Ранг: 5.8 (гость)
Активность: 0=0
Статус: Участник

Создано: 21 мая 2019 18:45
· Личное сообщение · #14

Оказалось все совсем просто
Code:
  1. Private Sub Generate()
  2. Dim rum_key, Total, MyValue As String, i As Integer
  3.     For i = 1 To 9
  4.     Randomize
  5.     MyValue = MyValue & Int((9 * Rnd) + 1)
  6. Next i
  7. MyValue = Mid(MyValue, 1, 2) & "x" & Mid(MyValue, 4, 6)
  8. rum_key = Mid(MyValue, 2, 7)
  9.     For i = 2 To 8
  10.     Total = Total + Asc(Mid(Trim(MyValue), i, 1)) * i
  11.     Next i
  12. rum_key = Mid(Total, 3, 1) & rum_key & Mid(Total, 4, 1)
  13. TextBox1.Text = Trim(rum_key)
  14. End Sub

Попозже напишу екзешник. Тему можно закрывать




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 21 мая 2019 19:03
· Личное сообщение · #15

Автор сам может закрыть свою тему, кнопка "Закрыть тему" находится внизу страницы, под кнопкой "Отправить сообщение".


 eXeL@B —› Вопросы новичков —› Анализ алгоритма создания регистрационного ключа
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати