Регистрационный файл

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Leon144
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 92
Зарегистрирован: 13.12.2008 (Сб) 9:57

Регистрационный файл

Сообщение Leon144 » 11.05.2009 (Пн) 14:00

Есть вопрос. Хочу создать регистрацию своего приложения с помощью key-файла как в Касперском или Др.Вебе. Подскажите где можно найти инфу или с чего начать копать. Заранее спасибо.
Хотели как лучше, получилось как всегда.

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Регистрационный файл

Сообщение MIT » 11.05.2009 (Пн) 14:06

Начни копать с MSDN, прокапывай через основы в сторону криптографии.
А потом почитай про то, что .NET приложения очень хорошо декомпилируются и твоя защита будет преодалена за 2 минуты.

З.Ы. на NET`е все же можно создать защищенный нативные конструкции для шароварности, но вот знаний для этого надо туева хуча. Да еще и Си знать необходимо...
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

vIRisium
Новичок
Новичок
 
Сообщения: 36
Зарегистрирован: 23.05.2009 (Сб) 7:58

Re: Регистрационный файл

Сообщение vIRisium » 23.05.2009 (Сб) 18:15

Есть пару способов, которые будет сложно преодолеть.

Лучше всего хранить рег код в коде программы, а точнее в самом исполяемом фаиле, записывай его в свободные места исполняемого фаила,при первом запуске, только в такие чтоб прога без глюков работала, и создавай функцию регистратор, которая бы в зависимости от принятого ключа редактировала этот самы кей ключ и меняла его на нужный, а потом при помощи не сложного механизма при запуске программа бы проверяла его и если все ок то работала в полном обьеме иначе не в полном.

Пример сумма всех байтов раскиданных по фаилу равна 12 а должна быть равна 17, фу-ия регистратор в зависимости от полученного ключа меняет их на определенные числа, добавляет и отнимает байты. И если код правильный то получится что программа заработает нормально, иначе загнется)) Я пробывал у меня работает

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: Регистрационный файл

Сообщение Nord777 » 23.05.2009 (Сб) 18:20

Я пробывал у меня работает
Выложи exe - проверим. :)
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

vIRisium
Новичок
Новичок
 
Сообщения: 36
Зарегистрирован: 23.05.2009 (Сб) 7:58

Re: Регистрационный файл

Сообщение vIRisium » 23.05.2009 (Сб) 18:32

Записывай в конец фаила. Тогда он живее будет)

Читай в массив байтов, а потом добавляй пару элементов в конец. Ща пошарюсь в мох кодах, найду выложу. Но тока выложу EXE. :D А то мне хана будет если найдут кряк к моим прогам)

А лучше ща перепишу свой пример элементарнейший)

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: Регистрационный файл

Сообщение Nord777 » 23.05.2009 (Сб) 18:49

А лучше ща перепишу свой пример элементарнейший)
Да, так и тебе спокойней будет и мне меньше копаться. :)
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

vIRisium
Новичок
Новичок
 
Сообщения: 36
Зарегистрирован: 23.05.2009 (Сб) 7:58

Re: Регистрационный файл

Сообщение vIRisium » 23.05.2009 (Сб) 18:54

Вот пример консольного приложения. Единственная проблема записываться прихоится в другой фаил, но это тоже можно исправить)

Код: Выделить всё
Module Module1

    Sub Main()

        Dim p As String = My.Application.Info.DirectoryPath
        If Strings.Right(p, 1) <> "\" Then
            p = p & "\"
        End If
        p = p & My.Application.Info.AssemblyName & ".exe"
        Dim bt() As Byte
        Dim btR() As Byte
        bt = IO.File.ReadAllBytes(p)
        ReDim btR(bt.Length)
        Dim i As Integer
        MsgBox(p)
        MsgBox(bt(bt.Length - 1))
        If bt(bt.Length - 1) = 14 Then
            Console.WriteLine("Good!!!") : Console.ReadLine()
        Else


            For i = 0 To bt.Length - 1

                btR(i) = bt(i)

            Next
            btR(bt.Length) = 14
            MsgBox(btR(bt.Length))
            IO.File.WriteAllBytes("C:\Crack.exe", btR)
            Console.WriteLine("Записанно")
        End If


        Console.ReadLine()
    End Sub

End Module


vIRisium
Новичок
Новичок
 
Сообщения: 36
Зарегистрирован: 23.05.2009 (Сб) 7:58

Re: Регистрационный файл

Сообщение vIRisium » 23.05.2009 (Сб) 18:56

После второго запуска программы она нормально заработает

vIRisium
Новичок
Новичок
 
Сообщения: 36
Зарегистрирован: 23.05.2009 (Сб) 7:58

Re: Регистрационный файл

Сообщение vIRisium » 23.05.2009 (Сб) 18:58

Его немного доработать и обычными средствами туда фиг влезешь)

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: Регистрационный файл

Сообщение Nord777 » 23.05.2009 (Сб) 19:01

Его немного доработать и обычными средствами туда фиг влезешь)
Ну ты дорабатывай, дорабатывай. И скидывай exe.
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

vIRisium
Новичок
Новичок
 
Сообщения: 36
Зарегистрирован: 23.05.2009 (Сб) 7:58

Re: Регистрационный файл

Сообщение vIRisium » 23.05.2009 (Сб) 19:02

Я дал пример начала, кому нужно тот доделает)

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: Регистрационный файл

Сообщение Nord777 » 23.05.2009 (Сб) 19:08

Я дал пример начала, кому нужно тот доделает)
Начала чего ты дал? Бесполезного кода? Зачем?
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Re: Регистрационный файл

Сообщение Williams » 23.05.2009 (Сб) 20:21

Еще надо привязываться к MAC-адресу сетевой карты, ID процессора и т.п. Как-то реазизовывал все это под нэтом...
И вы думаете, что вас оставят в живых после прочтения этого поста?

vIRisium
Новичок
Новичок
 
Сообщения: 36
Зарегистрирован: 23.05.2009 (Сб) 7:58

Re: Регистрационный файл

Сообщение vIRisium » 23.05.2009 (Сб) 20:30

Не.... Я делал такое... Результат поменяли процессор на помощнее и прога загнулась... :(

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Re: Регистрационный файл

Сообщение Williams » 23.05.2009 (Сб) 21:08

vIRisium писал(а):Не.... Я делал такое... Результат поменяли процессор на помощнее и прога загнулась... :(


В таких случаях клиент должен сообщить разработчику, и получить обновленный регистрационный код.
И вы думаете, что вас оставят в живых после прочтения этого поста?

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Регистрационный файл

Сообщение iGrok » 23.05.2009 (Сб) 22:03

Вроде уже столько раз обсуждали защиту, что аж тошно.

Итоговым решением во всех обсуждениях, насколько я помню, оказывался вариант, при котором на основании ключа вычисляется/генерируется что-либо, без чего работы программы невозможна в принципе.

К примеру, адрес условного/безусловного перехода, константа, участвующая во всех вычислениях, и т.п.

На .NET, боюсь, реализовать подобную защиту будет весьма непросто, если вообще возможно.

Если поискать по слову "защита", можно много чего интересного найти..
Есть вот такая штука. Для Vb6, но и оттуда можно почерпнуть пару идей. http://www.dotfix.net/module.php?module ... 69796d7169

На .NET почти вся защита перечёркивается наличем Reflector'а, но, думаю, всё же можно извернуться..

И ещё:
viewtopic.php?t=20643
label:
cli
jmp label

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: Регистрационный файл

Сообщение Nord777 » 23.05.2009 (Сб) 22:20

На .NET почти вся защита перечёркивается наличем Reflector'а, но, думаю, всё же можно извернуться..
Ломается всё. Вопрос времени. Бестолковое обсуждение.
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Регистрационный файл

Сообщение iGrok » 23.05.2009 (Сб) 22:29

Естественно ломается всё.

Nord777 писал(а):Вопрос времени.

Скорее, вопрос сравнительной стоимости времени и усилий, затраченных на взлом, времни и усилий, затраченных на защиту, и рыночной стоимости программы.
label:
cli
jmp label

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Регистрационный файл

Сообщение MIT » 24.05.2009 (Вс) 22:31

vIRisium писал(а):Вот пример консольного приложения. Единственная проблема записываться прихоится в другой фаил, но это тоже можно исправить)
Мне твою защиту поломать - две минуты, причем одну из них будет запускаться рефлектор :wink:

iGrok писал(а):На .NET почти вся защита перечёркивается наличем Reflector'а, но, думаю, всё же можно извернуться..

Код: Выделить всё
<PreserveSig(), MethodImpl(MethodImplOptions.Unmanaged, MethodCodeType:=MethodCodeType.Native), SuppressUnmanagedCodeSecurity()>
И чьхать мне на твой рефлектор. Вот хоть убейся, а ничего кроме названия процедуры ты не получишь. А если еще и обфускатором пройтись, то и его - хрен.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: Регистрационный файл

Сообщение Nord777 » 24.05.2009 (Вс) 23:24

И чьхать мне на твой рефлектор. Вот хоть убейся, а ничего кроме названия процедуры ты не получишь
Будем и дальше флудить?
Или всё же кто-нибудь выложит тестовый экзешник со своей суперзащитой?
Сколько уже можно воздух сотрясать?
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Регистрационный файл

Сообщение MIT » 25.05.2009 (Пн) 8:25

Nord777 писал(а):Будем и дальше флудить?
Будем.

Как освобожусь (предположительно это будет во вторник-среду) - напишу что-нибудь. Сейчас могу показать только проектик, переваренный обфускатором, можешь посмотреть рефлектором:
wa_test_MegaForce.rar
(8.26 Кб) Скачиваний: 53


Туда можно было записать простенькую булевую "регистрацию" в реестре, но мне и лениво и некогда. Да, эту "защиту" я признаю взломанной если ты мне приведешь сроку кода, выводящую сообщение в первозданном (или близком к тому) виде на любом ЯВУ.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: Регистрационный файл

Сообщение Nord777 » 25.05.2009 (Пн) 10:28

MIT, ты делаешь различие между кражей исходного кода и взломом? :|
Взломщику обычно фиолетово, что содержится внутри проги.
Главная его задача - прога должна работать. Без ввода рег. кодов, без наг-скринов, и.т.д
А восстанавливать код на языку высокого уровня - это нафиг никому не надо.
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Регистрационный файл

Сообщение iGrok » 25.05.2009 (Пн) 14:15

MIT писал(а):
iGrok писал(а):На .NET почти вся защита перечёркивается наличем Reflector'а, но, думаю, всё же можно извернуться..

Код: Выделить всё
<PreserveSig(), MethodImpl(MethodImplOptions.Unmanaged, MethodCodeType:=MethodCodeType.Native), SuppressUnmanagedCodeSecurity()>
И чьхать мне на твой рефлектор. Вот хоть убейся, а ничего кроме названия процедуры ты не получишь. А если еще и обфускатором пройтись, то и его - хрен.

MIT, я же, кажется, написал "почти".

Nord777 писал(а):А восстанавливать код на языку высокого уровня - это нафиг никому не надо.

Ну некоторым как раз это и надо, но на деле обычно проще не восстанавливать код, а писать аналог, зная функционал. )

З.Ы. Тоже интересно было бы посмотреть на "защищённый мега-защитой экзешник".
label:
cli
jmp label

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Регистрационный файл

Сообщение MIT » 25.05.2009 (Пн) 14:52

iGrok писал(а):З.Ы. Тоже интересно было бы посмотреть на "защищённый мега-защитой экзешник".
Что-то мне вспомнился спор про фотошоповую палитру. Ну да ладно.

Можно узнать, что входит в постановку задачи?
Как я понял, то программа должна себя регистрировать при получении файла-ключа, но тут есть пара уточнений:
- Нужно ли ограничение по времени (не активировал на 2 дня - не активируешь больше никогда)?
- Какой уровень привязки к железу необходим? Как насчет интелектуальной системы мониторинга апгрейда железа и секционной привязки?
- Какой уровень внедрения защиты в систему необходим?
- Необходима ли видимая "безвредность" кода для антивирусов (в расчет я принимаю только KIS09)?
- Нужно писать только на .NET`е, или же важна окончательная цель - защита .NET приложения?
- Взаимодействие с интернетом. Нужно ли мониторить состояние приложения, попытки взлома?

Хотя я так думаю, что важно именно достижение цели - защиты, а все остально никого не волнует. Верно?
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Регистрационный файл

Сообщение MIT » 25.05.2009 (Пн) 15:22

Персонально 2 Nord777:
В контексте .NET-программирования основной проблемой при построении защит является тот факт, что можно просто посмотреть на алгоритм защиты (даже на ЯВУ), спокойно его выкинуть, скомпилировав приложение в первозданный вид, но уже без защиты. Ты не поверишь, но я вполне понимаю разницу между восстановлением исходника и обходе защиты, так что придираться по данному параметру, думаю, не очень уместно, особенно ввиду того, что данных пример я выложил, что бы люди посмотрели, что даже за 2 минуты можно серьезно осложнить поиск алгоритма регистрации в .NET приложении. Даже посмотрев IL листинг этого примера ты мало что поймешь, в нем перемешан граф потока вызовов (это как минимум).
Отсюда вполне можно сделать вывод, что если потратить на защиту больше 10 минут своего времени, то тот вариант, который в основном применяется к .NET`у (а именно пересборка и/или эмуляция регистрации) станет не применим, и тут уже идет в дело стандартная схема мониторинга изменения системы, а посему все зависит уже не от "дыры" в .NET`е, а от ловкости программиста, пищущего хитроумную защиту.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Re: Регистрационный файл

Сообщение Williams » 25.05.2009 (Пн) 15:36

В обфускаторе, которым я пользуюсь, присутствует замечательная вещь под названием "обфускация контрольного потока". Разумеется, это в дополнение к стандартной обфускации и шифрованию строк. Проги пока никто не сломал :)
И вы думаете, что вас оставят в живых после прочтения этого поста?

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: Регистрационный файл

Сообщение Nord777 » 26.05.2009 (Вт) 15:16

MIT
Основные методы твоей мега-защиты:

:wink:
Код: Выделить всё
      Dim s1, s2 As String
      Dim ss1, ss2, ss3, ss4, ss5, ss6 As String

      s2 = GetStr2("eKK02Y6lk7RpSxZCnS1S/MNVuERXwpif0g58s5ZjkH/gR6gfsFdYb+CnCL8Q9ziPwEdo3/AXmC8gZ0h/ULd4T//5AgIAAek=")

      ss1 = GetStr1("xAdDusYcSoMzpR6+O1eEEI6vdV0=")
      ss2 = GetStr1("zuMwkmMhQBhW9w==")
      ss3 = GetStr1("vBc7gq/W+mqyx7an")
      ss4 = GetStr1("riPQMoNB4Di2F8XFuxY6cJ6H0ssriw==")
      ss5 = GetStr1("4cXZe/+Wyrh+F2Wd")
      ss6 = GetStr1("uxHTZQiGitc=")

      s1 = String.Format(s2, New Object() {ss1, ss2, ss3, ss4, ss5, ss6})

      Interaction.MsgBox(s1, MsgBoxStyle.OkOnly, Nothing)


Код: Выделить всё
   Public Function GetStr1(ByVal S As String) As String
      Dim num As UInt32 = &H2348F323
      Dim num2 As UInt32 = &H723A91C1
      Dim bytes As Byte() = System.Convert.FromBase64String(S)
      Dim num3 As Byte = &H13
      Dim i As Integer
      For i = &H0 To bytes.Length - 1
         num = ((((num * &H4245D7) + num3) + &H4FE301) Mod &HFFFFFFFE)
         num2 = ((((num2 * &H51B372) + num3) + &H1598F71) Mod &HFFFFFFFE)
         bytes(i) = CByte((bytes(i) - CByte(num2)))
         bytes(i) = CByte((bytes(i) Xor num))
         num3 = bytes(i)
      Next i
      Return UTF8.GetString(bytes)
   End Function


Код: Выделить всё
   Public Function GetStr2(ByVal S As String) As String
      Dim num As UInt32 = &H2348F323
      Dim num2 As UInt32 = &H723A91C1
      Dim bytes As Byte() = System.Convert.FromBase64String(S)
      Dim num3 As Byte = &H13
      Dim i As Integer
      For i = &H0 To bytes.Length - 1
         num = ((((num * &H4245D7) + num3) + &H4FE301) Mod &HFFFFFFFE)
         num2 = ((((num2 * &H51B372) + num3) + &H1598F71) Mod &HFFFFFFFE)
         bytes(i) = CByte((bytes(i) - CByte(num2)))
         bytes(i) = CByte((bytes(i) Xor num))
         num3 = bytes(i)
      Next i
      Return UTF8.GetString(bytes)
   End Function


Во вложении твоё приложение, но без показа сообщения.
Вложения
MegaForce_hacked.rar
(7.13 Кб) Скачиваний: 61
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Re: Регистрационный файл

Сообщение Williams » 26.05.2009 (Вт) 15:28

Аааа! Мега-защиту сломали :) Nord777 - кулхацкер :mrgreen:
И вы думаете, что вас оставят в живых после прочтения этого поста?

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Регистрационный файл

Сообщение MIT » 26.05.2009 (Вт) 15:41

Да, забавно. Ладно, я тогда что-нибудь повеселее приготовлю.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: Регистрационный файл

Сообщение Nord777 » 26.05.2009 (Вт) 18:10

Ладно, я тогда что-нибудь повеселее приготовлю.
MIT, ломаются даже очень серьёзные защиты(например в виде HASP-ключа), поэтому лучше потрать своё время на интересную книжку, а не написание "мега"-защиты.
Пойми, если твой код лежит у меня на винте - он ломается. Вопрос времени.
Эта прога ломалась за чашечкой кофе перед работой, и это при том, что я не считаю себя хакером.
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

След.

Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 81

    TopList  
cron