Исследование программ, написанных для новой платформы .NET оказывается очень легким делом. Не берусь сказать, что всегда это будет легким и простым, но сейчас скажу, т.к. без особого труда можно написать кейген для такой реальной программы как FirePanel XP, которая написана на Basic .NET.
Суем ее в декомпилятор Reflector. Одной из особенностей его является то, что он может показывать декомпилированный код на языках IL, Basic, Delphi, C#. Так как программа написана на Basic, то и кейген будет на нем же, чтобы просто выдрать генерирующую код процедуру. Следует внимательно изучить дерево объектов в объекте FirePanel XP. Т.к. неизвестно в какой именно процедуре происходит проверка кода, мне пришлось проверять их все по порядку. Очень скоро попадается функция 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("SOFTWARE\FirePanel 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(Obje
ctType.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