eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 июня!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: daFix, pirkspilot (+2 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

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

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

Создано: 21 мая 2019 13:14 · Поправил: rummy New!
Цитата · Личное сообщение · #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 (гость)
Статус: Участник

Создано: 21 мая 2019 13:53 New!
Цитата · Личное сообщение · #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() и склеивают ли + стринги тоже не знаю


Ранг: 194.3 (ветеран)
Статус: Участник

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

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

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

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

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

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

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


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

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


Ранг: 194.3 (ветеран)
Статус: Участник

Создано: 21 мая 2019 14:29 · Поправил: f13nd New!
Цитата · Личное сообщение · #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

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

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

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

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

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

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

Создано: 21 мая 2019 15:05 · Поправил: tizo New!
Цитата · Личное сообщение · #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 (гость)
Статус: Участник

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

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

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


Ранг: 194.3 (ветеран)
Статус: Участник

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

tizo пишет:
f13 retort

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

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

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

Ранг: 160.5 (ветеран)
Статус: Участник

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

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

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



Ранг: 194.3 (ветеран)
Статус: Участник

Создано: 21 мая 2019 15:54 · Поправил: f13nd New!
Цитата · Личное сообщение · #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)

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


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

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

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

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

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

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

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

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

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

Создано: 21 мая 2019 18:45 New!
Цитата · Личное сообщение · #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

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


Ранг: 1983.4 (!!!!)
Статус: Модератор
retired

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

Автор сам может закрыть свою тему, кнопка "Закрыть тему" находится внизу страницы, под кнопкой "Отправить сообщение".
 eXeL@B —› Вопросы новичков —› Анализ алгоритма создания регистрационного ключа
Эта тема закрыта. Ответы больше не принимаются.

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS