Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 12 ноября!


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

Кейген для программы, написанной на Basic .NET

Обсудить статью на форуме

Массу крэкерских инструментов, видеоуроков и статей вы сможете найти на видеокурсе от нашего сайта. Подробнее здесь.

Автор: FEUERRADER <feuerrader@ahteam.org>

Программа: FirePanel XP 1.5.7.0
Размер: 192512 байт
Язык: Basic .NET
Защита: Имя/код
Цель: исследовать .NET
Инструменты: Lutz Roeder’s .NET Reflector 4.1.29.0, Microsoft Visual Studio .NET 2003

Исследование программ, написанных для новой платформы .NET оказывается очень легким делом. Не берусь сказать, что всегда это будет легким и простым, но сейчас скажу, т.к. без особого труда можно написать кейген для такой реальной программы как FirePanel XP, которая написана на Basic .NET.

Суем ее в декомпилятор Reflector. Одной из особенностей его является то, что он может показывать декомпилированный код на языках IL, Basic, Delphi, C#. Так как программа написана на Basic, то и кейген будет на нем же, чтобы просто выдрать генерирующую код процедуру. Следует внимательно изучить дерево объектов в объекте FirePanelXP. Т.к. неизвестно в какой именно процедуре происходит проверка кода, мне пришлось проверять их все по порядку. Очень скоро попадается функция Info().


 Private Sub info()
 	...
             Dim text2 As String = Interaction.InputBox("Please input registered name here:", "", "", -1, -1)
             If (StringType.StrCmp(text2, "", False) = 0) Then
                   Me.override = True
                   Me.Close
             End If
             Dim text1 As String = Interaction.InputBox("Please input key here:", "", "", -1, -1)
             If (StringType.StrCmp(text1, "", False) = 0) Then
                   Me.override = True
                   Me.Close
             End If
             If (StringType.StrCmp(Me.kc(text2, 100, 200, 300, 400), text1, False) = 0) Then
                   Interaction.MsgBox("Thank You For Your Support", MsgBoxStyle.OKOnly, Nothing)
                   Me.ln.Text = text2
                   Me.ln2.Text = text1
                   Dim key1 As RegistryKey = Registry.LocalMachine.CreateSubKey("SOFTWAREFirePanel XP")
                   key1.SetValue("username", text2)
                   key1.SetValue("key", text1)
                   Me.btnr.Visible = False
             Else
                   Interaction.MsgBox("Your serial is invalid", MsgBoxStyle.OKOnly, Nothing)
                   Me.override = True
                   Me.Close
             End If
 	...
 End Sub
Сразу видно, что введенный код проверяется с верным значением функцией StrCmp(). А сам ключ возвращается функцией kc() уже готовенький и при этом как строка. Как кстати! Смотрим kc():

Public Function kc(ByVal username As String, ByVal var1 As Object, ByVal var2 As Object, ByVal var3 As Object, ByVal var4 As Object) As String
Dim obj5 As Object = Strings.Asc(username.Substring(0, 1))
Dim obj6 As Object = Strings.Asc(username.Substring((username.Length - 1), 1))
Dim obj7 As Object = Strings.Asc(username.Substring(0, CType(Math.Round(CType((CType(username.Length,Double) / 2),Double)),Integer)))
Dim obj8 As Object = Strings.Asc(username.Substring(CType(Math.Round(CType((CType(username.Length,Double) / 2),Double)),Integer)))
Dim obj1 As Object = Conversion.Hex(ObjectType.AddObj(ObjectType.MulObj(obj5, obj6), ObjectType.MulObj(ObjectType.MulObj(ObjectType.AddObj(obj7, obj8), var1), 100))).Substring(1, 5)
Dim obj2 As Object = Conversion.Hex(ObjectType.AddObj(ObjectType.MulObj(obj6, obj8), ObjectType.MulObj(ObjectType.MulObj(ObjectType.AddObj(obj5, obj6), var2), 100))).Substring(0, 5)
Dim obj3 As Object = Conversion.Hex(ObjectType.AddObj(ObjectType.MulObj(obj5, obj7), ObjectType.MulObj(ObjectType.MulObj(ObjectType.AddObj(obj6, obj8), var3), 100))).Substring(1, 5)
Dim obj4 As Object = Conversion.Hex(ObjectType.AddObj(ObjectType.MulObj(obj6, obj8), ObjectType.MulObj(ObjectType.MulObj(ObjectType.AddObj(obj7, obj5), var4), 100))).Substring(0, 5)
Return StringType.FromObject(ObjectType.AddObj(ObjectType.AddObj(ObjectType.AddObj(ObjectType.AddObj(ObjectType.AddObj(ObjectType.AddObj(obj1, "-"), obj2), "-"), obj3), "-"), obj4))
End Function

В принципе это готовая функция, которую осталось только скопировать в кейген. Т.к. я не знаю Basic абсолютно, то и разбираться, как же генерируется код мне было лень.
Создаем в Visual Studio новый солюшен как Basic -> Windows Application. Вставляем на форму кнопку и на событие нажатия делаем вызов функции. Типа такого:


     Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
             MessageBox.Show(kc("my name here", 100, 200, 300, 400), "my key",MessageBoxButtons.OK)
     End Sub

А выше вставляем выдранную функцию kc(). В принципе всё... Если пробовать компилировать то выйдет ошибка "Name ’ObjectType’ is not declared". Покопавшись в MSDN, удается узнать, что ObjectType нужно указывать как CompilerServices.ObjectType. Таким образом везде где будет ругаться, то добавляем CompilerServices.
Если всё сделать правильно, то получите код для программы :) Но разве это цель была?

[Только для образовательных целей]
Автор: FEUERRADER [AHTeam]
Jan 2005

Обсуждение статьи: Кейген для программы, написанной на Basic .NET >>>


Комментарии к статье: Кейген для программы, написанной на Basic .NET

-=PoisoN=- 09.04.2005 19:27:54
Хм.... Познавательно =)
---
necrolatry 14.04.2005 13:04:36
а если ты не знаешь pubic key ассембли ?
каким макаром доступишься к коду ?
---

Материалы находятся на сайте https://exelab.ru



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


Вы находитесь на EXELAB.rU
Проект ReactOS