Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   Работа программы до определенной даты (http://forum.oszone.net/showthread.php?t=144068)

malev 02-07-2009 22:08 1157658

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

FlatX007 02-07-2009 22:22 1157668

Могу предложить без инета ...

Вопрос: ограничение по дате стоит на какое-то конкретное число например 01.01.2010 или с момента старта программы должно пройти определённое количество дней часов ?

malev 02-07-2009 22:56 1157708

именно до даты, может и 1 день отработать

SyDr 02-07-2009 23:20 1157727

Скачиваешь с любого серъёзного сайта страничку на которой есть текущая дата.
Код:

#include <INet.au3>
_INetGetSource ( $s_URL )

Потом полученный исходник парсишь и получаешь текущую дату.

FlatX007 02-07-2009 23:34 1157737

Код:

$Url = "http://forum.oszone.net/index.php"
$Random = Round(Random(100,100000000000000000) )
$TempFile = @TempDir & "\" & $Random & ".txt"

InetGet($Url, $TempFile)
$sHTML = FileRead($TempFile)
$avArray = StringRegExp($sHTML, '(?i)<span class="time">(.*?)</span>.<br>', 3)
If @error Then
    MsgBox(16,"","Сервер времени недоступен")
    FileDelete($TempFile)
Else
    MsgBox(0,'', "Время с сайта oszone.net - " & $avArray[0])
    FileDelete($TempFile)
EndIf


Дату незнаю как ... ищи сайт :)

beve 02-07-2009 23:57 1157747

FlatX007, сделай для malev сверку с этим сайтом: http://time.jp-net.ru/, и желательно чтоб это не был только один сервер, можно сделать проверку с двух, с того и этого: http://bilet.pp.ru/calculator_rus/to...koe_vremia.php

Creat0R 03-07-2009 01:47 1157796

Вложений: 1
Я лично не пользуюсь этим, но ради спортивного интереса написал вот такой модуль:

Код:

#include <AppTrialModule.au3>

$n_APPTRIAL_EXPIRED_VALUE  = 24
$n_APPTRIAL_MODE            = 3 ;>= 1 seconds, >= 2 Minutes, >= 3 Hours, >= 4 Days.

$s_APPTRIAL_TITLE          = "My Software" ;This will be used in Registry entry and other places
$s_APPTRIAL_MSG            = "Your trial period (%s hours) has been expired."
$s_GET_PRODUCT_KEY_URL      = "http://my-web-site.com/app_registration.html"

;We set AppTrial Module on 24 hours
_SetAppTrial_Module()

Switch @extended
    Case 0
        MsgBox(48, $s_APPTRIAL_TITLE & " - Trial Version", _
            StringFormat("You still can use this program, you have left <%s> hours :) ", _
                $n_APPTRIAL_EXPIRED_VALUE - Round($n_APPTRIAL_OVERTIME, 1)))
    Case 1
        MsgBox(64, $s_APPTRIAL_TITLE & " - Full Version", "This is full version, thank you for buying our software.")
EndSwitch

MsgBox(64, $s_APPTRIAL_TITLE, "The program working (for now? :) )...")

Сама библиотека AppTrialModule.au3 с этим примером прикреплена к сообщению.

malev 03-07-2009 09:11 1157893

Спасибо Creat0R, попробую. Только это не совсем trial, полнофункциональная программа просто требующая обновления, скачиванием с файлообменника. Вот и вся выгода :)
Вроде понял принцип работы модуля создает скрытые системные файлы в них зашифрованная дата/время окончания, проверяет на наличие хотя бы одного из них. Если время закончилось ищет в реестре ключ регистрации. Интересно с точки зрения реализации но не практично. Либо дорабатывать как у касперского, своего рода зашифрованный ключ на период времени без которого программа не будет запускаться или работать. Если кто еще знает сервера дат напишите http://time.jp-net.ru/ типа такого, чтобы парсить меньше и без флеш.

Creat0R 03-07-2009 14:28 1158140

Цитата:

Цитата malev
это не совсем trial, полнофункциональная программа просто требующая обновления »

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

Цитата:

Цитата malev
Интересно с точки зрения реализации но не практично. Либо дорабатывать как у касперского, своего рода зашифрованный ключ на период времени без которого программа не будет запускаться или работать. »

Почему не практично, там Product Key тоже как бы зашифровывается ;) - Он привязан к системе на которой запущена программа.

SyDr 03-07-2009 15:30 1158202

Что мешает пользователю удалять ключи реестра и файлы?

Creat0R 03-07-2009 15:55 1158224

Цитата:

Цитата Sylver Dragon
Что мешает пользователю удалять ключи реестра и файлы? »

Это про мой пример?
Ну попробуй удали :) - но про эти файлы юзер не должен знать, и вообще, это пример концепции, каждый сам для себя может найти подходящий метод маскировки файлов и ключей.

P.S
А ключ реестра всего лишь содержит Product Key (после его верного введения), если его удалить, то программа снова станет Trial :)

SyDr 03-07-2009 17:53 1158351

Удалил 3 файла. Четвёртый сразу не заметил. Полез за подсказкой :)
А в чём должен был быть подвох?

В данном случае не вижу другого выхода, кроме как с интернета получить текущую дату.

Вот с проверкой на глобальный подвох:
Код:

#include <Inet.au3>
Func Now()
    Local $Source = _INetGetSource("http://time.jp-net.ru/")
    Local $Pattern = "Точная\sдата:\s(.*?)<"
    Local $Date = StringRegExp($Source, $Pattern, 1)
    Local $PathToHosts = @SystemDir & "\system32\drivers\etc\hosts"
    Local $Hosts = FileRead($PathToHosts)
    If StringInStr($Hosts, "time.jp-net.ru") Then Return 0
    Return $Date[0]
EndFunc


Creat0R 03-07-2009 18:17 1158368

Цитата:

Цитата Sylver Dragon
А в чём должен был быть подвох? »

В том что удалив один или часть файлов, Trial заканчивается :) - Однако удалив все файлы, счётчик триала начинается с нуля :( - Но как я уже сказал: “это пример концепции, каждый сам для себя может найти подходящий метод маскировки файлов и ключей” - Мы можем добавить ещё кучу файлов, записей в реестре и т.п.

Цитата:

Цитата Sylver Dragon
В данном случае не вижу другого выхода, кроме как с интернета получить текущую дату. »

А если программа не работает с интернетом, а у юзера инет не подключён?

P.S
Мне конечно было бы и самому интересно узнать как это в “реальности” делается, в прогах которые распространяются в виде Trial-версии...

SyDr 03-07-2009 18:35 1158378

Цитата:

Цитата Creat0R
В том что удалив один или часть файлов, Trial заканчивается - Однако удалив все файлы, счётчик триала начинается с нуля - Но как я уже сказал: “это пример концепции, каждый сам для себя может найти подходящий метод маскировки файлов и ключей” - Мы можем добавить ещё кучу файлов, записей в реестре и т.п. »

Я знаю один весьма хороший способ защитить программу. Но подходит не для всех типов программ
Цитата:

Цитата Creat0R
А если программа не работает с интернетом, а у юзера инет не подключён? »

:) Посылаем юзера далеко и надолго :) Он то ответить не сможет.

Цитата:

Цитата Creat0R
P.S
Мне конечно было бы и самому интересно узнать как это в “реальности” делается, в прогах которые распространяются в виде Trial-версии... »

Защитить полностью программу невозможно. Всегда можно удалить все записи, которые она производит. Хотя и тут могут быть вариации. К примеру, программа устанавливает свои драйвера, котороые скрывают записи из реестра/файлы с диска.
Реальные программы обычно защищаются созданием файлов в папке Windows с каким-нибудь "устрашающим" названием, типа "system.dat". Или созданием ключей реестра. Зачастую ничего не маскируется. То есть при желании триал продлить легко.

Creat0R 03-07-2009 18:44 1158389

Кстати, вот ещё метод гинерации Product Key:

Код:

$sProductKey = _AppTrial_Generate_ProductKey()

MsgBox(64, "Info", "Unique <Product Key> for this PC:" & @CRLF & @CRLF & $sProductKey)

Func _AppTrial_Generate_ProductKey()
    Local $sPK_Val = @OSVersion & @OSArch & @UserName & _GetMACAddress() & @OSBuild & @CPUArch & @OSType & @OSLang
    Local $sRet_PK, $aSplit_PK = StringSplit(StringRegExpReplace(StringUpper($sPK_Val), "[^A-Z0-9]+", ""), "")

    For $i = $aSplit_PK[0] To 1 Step -2
        If Mod($i, 5) = 0 Then
            $sRet_PK &= $aSplit_PK[$i] & "-"
        Else
            $sRet_PK &= $aSplit_PK[$i]
        EndIf
    Next

    Return
StringRegExpReplace($sRet_PK, "\A-+|-+$|\A.{1,4}-|-.{1,4}$", "")
EndFunc

Func
_GetMACAddress($iGetMACIndex = 1)
    Local $sRead = ""
    Local $ipHandle = Run(@ComSpec & ' /c ipconfig /all', '', @SW_HIDE, 2)

    While Not @error
        $sRead &= StdoutRead($ipHandle)
    WEnd

    $sRead = StringStripWS($sRead, 7)

    Local $aMAC_Dashed = StringRegExp($sRead , '([0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2})', 3)

    If Not IsArray($aMAC_Dashed) Then Return 0
    If $iGetMACIndex <  1 Then Return 0
    If $iGetMACIndex > UBound($aMAC_Dashed) Or $iGetMACIndex = -1 Then $iGetMACIndex = UBound($aMAC_Dashed)

    Return StringReplace($aMAC_Dashed[$iGetMACIndex - 1], '-', ':', 0)
EndFunc


SyDr 03-07-2009 18:53 1158396

По мне, так такой вариант вообще не подходит.
Имя компьютера легко меняется, IP адрес сетевой платы тоже. Можно установить СервисПак. И... Only For Current User...

Creat0R 03-07-2009 19:14 1158409

Цитата:

Цитата Sylver Dragon
Имя компьютера легко меняется, IP адрес сетевой платы тоже. Можно установить СервисПак. И... Only For Current User... »

Ну тогда эти данные можно исключить из строки гинерации :) - Поправил.

FlatX007 03-07-2009 19:23 1158417

Я делал так .... возвращается ранодомный ключь, считывается некоторые разделы реестра, рандомный ключ умножается на число указанное в программе, перекодируется в HEX, инфа считанная из разделов реестра кодируется в RC4 ключём служит - (рандомный ключ умножается на число указанное в программе, перекодируется в HEX), кодированная инфа записывается в INI ... при проверке ключа происходит обратный процесс.
Дорабатывать можно безконечно...

Кому непонятно прикреплю рабочий пример (щас немогу, на работе был так сказать маленький собантуй...)

proxy 03-07-2009 20:07 1158456

Цитата:

Цитата FlatX007
возвращается ранодомный ключь »

главное не увлечся, а то ж пользователь unIstall какойнить game, и проверочный ключ вместе с ней... :)
имхо, если ограничит список выбора ключа, на что нить, что меняется только с переустановкой ОС, то вариант поприятней, чем если генерировать по MAC or IP (к примеру MAC и в настройках сетевой поменять можно, чем ипользуюсь, так как привязка у провайдера), а IP меняется еще проще. + еще вариант, генерировать по процессору, чипсету, материнке.

Цитата:

Цитата Sylver Dragon
Посылаем юзера далеко и надолго Он то ответить не сможет. »

))))))))))))))) жжжошь )
один единственный вариант - отсчитывать время работы программы и записывать куданить: в пару тройку файлов по разным путям (по ходу так у Creat0R-ра?) + резерв в реестре надежно замаскированный )


Все варианты по проверке из интернет: не забывайте, если чужой сайт - он и изменен может быть, а доступ на ваш сайт, может быть временно закрыт, - т.е. необходимо сразу планировать - подымать тревогу, только через 1-2 дня, если недоступен важный файл из интернета )) +пользователь может использовать фаервол и сразу запретить вашему приложению доступ в интернет (например, у меня ESS 4, и им все блочу непотребное) - по этому, необходимо предупреждать (только с доступом в инет) ..


умммм, а кто нить вкурсе: как заминить байтики в файле, что бы приложение осталось работоспособным?

SyDr 03-07-2009 20:18 1158466

C игрушками проще. Можно время триала в сохранке хранить :)
С программами только определёнными такое прокатит.

Цитата:

Цитата proxy
один единственный вариант - отсчитывать время работы программы и записывать куданить: в пару тройку файлов по разным путям (по ходу так у Creat0R-ра?) + резерв в реестре надежно замаскированный ) »

Знаю разработчика одного (не лично :)): у него ограничение в триале на число запусков. И настройки в этом же файле. Хочешь ещё 10 раз запустить - будь добр настраивай прогу заново))

Цитата:

Цитата proxy
Все варианты по проверке из интернет: не забывайте, если чужой сайт - он и изменен может быть, а доступ на ваш сайт, может быть временно закрыт, - т.е. необходимо сразу планировать - подымать тревогу, только через 1-2 дня, если недоступен важный файл из интернета )) +пользователь может использовать фаервол и сразу запретить вашему приложению доступ в интернет (например, у меня ESS 4, и им все блочу непотребное) - по этому, необходимо предупреждать (только с доступом в инет) .. »

"Будтье добры обновить программу и разрешить ей выход в сеть"

proxy 03-07-2009 20:34 1158476

Цитата:

Цитата Sylver Dragon
С программами только определёнными такое прокатит. »

угу, вот про это ))
100% защиты нет, где нить на 90% ..... ) ....и то, по спицифике, по возможностям ))

FlatX007 04-07-2009 00:19 1158602

По IP адресам (@IPAddress1, @IPAddress2 ....) вообще нестоит делать. Я когда пробовал у меня стояла DVB карта и что же я обнаружил IP адресс который был на @IPAddress1 "перепдыл" на @IPAddress2, потом ещё раз поменялся ... :)

malev 04-07-2009 13:10 1158799

Какие бурные дискуссии в теме, еще раз повторю:
Цитата:

программа актуальна при работающем интернете....
хотя для общего понятия принципа защиты полезно. Можно попробовать еще с привязкой к серийнику жесткого диска(или еще чего нибудь), а на случай замены активация через инет, отсылка кода активации и получение на его основе регистрационного кода. Все данные конечно шифровать. Пока считаю для себя полезным сообщение Sylver Dragon, буду проверять.

oszip 04-07-2009 14:18 1158848

Индивидуальный ключ для каждого компьютера.
Регистрация ключа - на сервере в интернет.
Время от времени программа сверяет ключ с сервером.
Если что не так - отключается и перестает работать.

Взломать можно только крякнув программу :)

malev 06-07-2009 22:26 1160559

Возникла идея а что если получать время и дату с сайтов времени?! Но для этого нужно знать протокол sntp. Есть варианты его использования? только не командная строка. А пока реализую версию генерации ключа, в файл с шифрованием. Есть еще функции шифрования кроме _stringencrypt?

proxy 06-07-2009 23:52 1160631

Цитата:

Цитата malev
Возникла идея а что если получать время и дату с сайтов времени?! »

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

Цитата:

Цитата malev
_stringencrypt »

не уж то взломал? ;) коль уж так - попробуй это...тут целый набор вкусностей

malev 07-07-2009 11:58 1160942

свой сайт хорошо, но не у всех есть да и может быть не доступен а серверов времени куча, правда надо знать протокол...
за ссылку спасибо попробуем.

malev 07-07-2009 14:00 1161025

Набросал черновой примерчик, может кому пригодится:
Создает зашифрованный файл ключ с датой действия по заданным параметрам, буду дорабатывать под свою программу, мне проще у меня дата будет жестко задана в программе, а с ключом будет сверяться, при запуске.
Код:

#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiEdit.au3>
#include <String.au3>
#include <Date.au3>

#Region ### START Koda GUI section ###
$Form1 = GUICreate("Шифровальщик", 341, 175, 199, 115)
$Button1 = GUICtrlCreateButton("Создать ключ...", 239, 113, 89, 22, 0)
$Button2 = GUICtrlCreateButton("Проверить лицензию", 7, 143, 125, 22, 0)
$inpkey = GUICtrlCreateInput("system.key", 7, 114, 217, 21)
GUICtrlSetState(-1, $GUI_DISABLE)
$Edit1 = GUICtrlCreateEdit("", 7, 21, 216, 88)
GUICtrlSetData(-1, @YEAR & "/" & @MON & "/" & @MDAY)
$InputLevel = GUICtrlCreateInput(3,238, 40, 50, 20, 0x2001)
$UpDownLevel = GUICtrlSetLimit(GUICtrlCreateUpdown($InputLevel), 10, 1)
$Input1 = GUICtrlCreateInput("mypassword", 238, 86, 89, 21, BitOR($ES_PASSWORD,$ES_AUTOHSCROLL))
$Label1 = GUICtrlCreateLabel("Что шифруем: формат даты yyyy/MM/dd", 8, 4, 76, 13)
$Label2 = GUICtrlCreateLabel("Уровень шифра:", 240, 21, 88, 17)
$Label3 = GUICtrlCreateLabel("Пароль шифра:", 240, 66, 82, 17)
$Label4 = GUICtrlCreateLabel("Лицензия: ", 145, 148, 170, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case
$Button1
            $stringEnc
=_StringEncrypt(1, GUICtrlRead($edit1), $Input1, $InputLevel)
            $crFile=FileOpen(GUICtrlRead($inpkey),2)
            FileWriteLine($crFile,$stringEnc)
            FileClose($crFile)
            $uncrFile=FileOpen(GUICtrlRead($inpkey),0)
        Case $Button2
            $uncrFile
=FileOpen(GUICtrlRead($inpkey),0)
            $uncrData=_StringEncrypt(0,FileReadLine($uncrFile) , $Input1, $InputLevel)
            $lic=_DateDiff('d',_NowCalcDate(),$uncrData)
            If $lic<0 then
                GUICtrlSetData($label4,"Лицензия: просрочена " & $lic & " дня(ей)")
            ElseIf $lic=0 then
                GUICtrlSetData($label4,"Лицензия истекает сегодня")
            Else
                GUICtrlSetData($label4,"Лицензия: действ. " & $lic & " дня(ей)")
            Endif
        EndSwitch
WEnd


Andress 10-12-2010 17:12 1562744

malev,
Цитата:

Цитата malev
Набросал черновой примерчик, может кому пригодится: »

Собственно вопрос такой - за счёт чево генерируетса по какому алгоритму? - чтото не могу понять где там движок генерации.
Собственно хочу использовать этот движок + вставить ешё свой, а куда воткнуть не пойму?

FlatX007 11-12-2010 19:22 1563425

Цитата:

Цитата Andress
Собственно вопрос такой - за счёт чево генерируетса по какому алгоритму? - чтото не могу понять где там движок генерации.
Собственно хочу использовать этот движок + вставить ешё свой, а куда воткнуть не пойму? »

читать дальше »

Код:

Func _StringEncrypt($i_Encrypt, $s_EncryptText, $s_EncryptPassword, $i_EncryptLevel = 1)
    If $i_Encrypt <> 0 And $i_Encrypt <> 1 Then
        SetError(1, 0, '')
    ElseIf $s_EncryptText = '' Or $s_EncryptPassword = '' Then
        SetError(1, 0, '')
    Else
        If
Number($i_EncryptLevel) <= 0 Or Int($i_EncryptLevel) <> $i_EncryptLevel Then $i_EncryptLevel = 1
        Local $v_EncryptModified
        Local $i_EncryptCountH
        Local $i_EncryptCountG
        Local $v_EncryptSwap
        Local $av_EncryptBox[256][2]
        Local $i_EncryptCountA
        Local $i_EncryptCountB
        Local $i_EncryptCountC
        Local $i_EncryptCountD
        Local $i_EncryptCountE
        Local $v_EncryptCipher
        Local $v_EncryptCipherBy
        If $i_Encrypt = 1 Then
            For
$i_EncryptCountF = 0 To $i_EncryptLevel Step 1
                $i_EncryptCountG = ''
                $i_EncryptCountH = ''
                $v_EncryptModified = ''
                For $i_EncryptCountG = 1 To StringLen($s_EncryptText)
                    If $i_EncryptCountH = StringLen($s_EncryptPassword) Then
                        $i_EncryptCountH = 1
                    Else
                        $i_EncryptCountH += 1
                    EndIf
                    $v_EncryptModified = $v_EncryptModified & Chr(BitXOR(Asc(StringMid($s_EncryptText, $i_EncryptCountG, 1)), Asc(StringMid($s_EncryptPassword, $i_EncryptCountH, 1)), 255))
                Next
                $s_EncryptText = $v_EncryptModified
                $i_EncryptCountA = ''
                $i_EncryptCountB = 0
                $i_EncryptCountC = ''
                $i_EncryptCountD = ''
                $i_EncryptCountE = ''
                $v_EncryptCipherBy = ''
                $v_EncryptCipher = ''
                $v_EncryptSwap = ''
                $av_EncryptBox = ''
                Local $av_EncryptBox[256][2]
                For $i_EncryptCountA = 0 To 255
                    $av_EncryptBox[$i_EncryptCountA][1] = Asc(StringMid($s_EncryptPassword, Mod($i_EncryptCountA, StringLen($s_EncryptPassword)) + 1, 1))
                    $av_EncryptBox[$i_EncryptCountA][0] = $i_EncryptCountA
                Next
                For $i_EncryptCountA = 0 To 255
                    $i_EncryptCountB = Mod(($i_EncryptCountB + $av_EncryptBox[$i_EncryptCountA][0] + $av_EncryptBox[$i_EncryptCountA][1]), 256)
                    $v_EncryptSwap = $av_EncryptBox[$i_EncryptCountA][0]
                    $av_EncryptBox[$i_EncryptCountA][0] = $av_EncryptBox[$i_EncryptCountB][0]
                    $av_EncryptBox[$i_EncryptCountB][0] = $v_EncryptSwap
                Next
                For $i_EncryptCountA = 1 To StringLen($s_EncryptText)
                    $i_EncryptCountC = Mod(($i_EncryptCountC + 1), 256)
                    $i_EncryptCountD = Mod(($i_EncryptCountD + $av_EncryptBox[$i_EncryptCountC][0]), 256)
                    $i_EncryptCountE = $av_EncryptBox[Mod(($av_EncryptBox[$i_EncryptCountC][0] + $av_EncryptBox[$i_EncryptCountD][0]), 256)][0]
                    $v_EncryptCipherBy = BitXOR(Asc(StringMid($s_EncryptText, $i_EncryptCountA, 1)), $i_EncryptCountE)
                    $v_EncryptCipher &= Hex($v_EncryptCipherBy, 2)
                Next
                $s_EncryptText = $v_EncryptCipher
            Next
        Else
            For $i_EncryptCountF = 0 To $i_EncryptLevel Step 1
                $i_EncryptCountB = 0
                $i_EncryptCountC = ''
                $i_EncryptCountD = ''
                $i_EncryptCountE = ''
                $v_EncryptCipherBy = ''
                $v_EncryptCipher = ''
                $v_EncryptSwap = ''
                $av_EncryptBox = ''
                Local $av_EncryptBox[256][2]
                For $i_EncryptCountA = 0 To 255
                    $av_EncryptBox[$i_EncryptCountA][1] = Asc(StringMid($s_EncryptPassword, Mod($i_EncryptCountA, StringLen($s_EncryptPassword)) + 1, 1))
                    $av_EncryptBox[$i_EncryptCountA][0] = $i_EncryptCountA
                Next
                For $i_EncryptCountA = 0 To 255
                    $i_EncryptCountB = Mod(($i_EncryptCountB + $av_EncryptBox[$i_EncryptCountA][0] + $av_EncryptBox[$i_EncryptCountA][1]), 256)
                    $v_EncryptSwap = $av_EncryptBox[$i_EncryptCountA][0]
                    $av_EncryptBox[$i_EncryptCountA][0] = $av_EncryptBox[$i_EncryptCountB][0]
                    $av_EncryptBox[$i_EncryptCountB][0] = $v_EncryptSwap
                Next
                For $i_EncryptCountA = 1 To StringLen($s_EncryptText) Step 2
                    $i_EncryptCountC = Mod(($i_EncryptCountC + 1), 256)
                    $i_EncryptCountD = Mod(($i_EncryptCountD + $av_EncryptBox[$i_EncryptCountC][0]), 256)
                    $i_EncryptCountE = $av_EncryptBox[Mod(($av_EncryptBox[$i_EncryptCountC][0] + $av_EncryptBox[$i_EncryptCountD][0]), 256)][0]
                    $v_EncryptCipherBy = BitXOR(Dec(StringMid($s_EncryptText, $i_EncryptCountA, 2)), $i_EncryptCountE)
                    $v_EncryptCipher = $v_EncryptCipher & Chr($v_EncryptCipherBy)
                Next
                $s_EncryptText = $v_EncryptCipher
                $i_EncryptCountG = ''
                $i_EncryptCountH = ''
                $v_EncryptModified = ''
                For $i_EncryptCountG = 1 To StringLen($s_EncryptText)
                    If $i_EncryptCountH = StringLen($s_EncryptPassword) Then
                        $i_EncryptCountH = 1
                    Else
                        $i_EncryptCountH += 1
                    EndIf
                    $v_EncryptModified &= Chr(BitXOR(Asc(StringMid($s_EncryptText, $i_EncryptCountG, 1)), Asc(StringMid($s_EncryptPassword, $i_EncryptCountH, 1)), 255))
                Next
                $s_EncryptText = $v_EncryptModified
            Next
        EndIf
        Return $s_EncryptText
    EndIf
EndFunc  ;==>_StringEncrypt



Время: 15:33.

Время: 15:33.
© OSzone.net 2001-