IPB

Здравствуйте Гость ( Вход | Регистрация )

Reply to this topicStart new topicStart Poll

Каскадный · [ Стандартный ] · Линейный

> Алгоритм шифрования скрипта в Mob файлах.

Jet
post Среда, 18 Февраля 2004, 23:31
Отправлено #1


Honor Guard
Group Icon

Группа: Add-on Developers
Сообщений: 1,066
Регистрация: 23-Фев-02
Из: gipat.ru
Пользователь №: 116



Сегодня мы решили опубликовать алгоритм шифрования скрипта в .MOB файлах.

Вы можете загрузить исходные коды этого алгоритма, на языке C++ и Delphi из раздела: файлы.
-> Файлы -> Tools -> Mod -> Mob Crypt


--------------------
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Slother
post Четверг, 19 Февраля 2004, 05:57
Отправлено #2


Henchman
Group Icon

Группа: Members
Сообщений: 6
Регистрация: 17-Фев-04
Из: Новосибирск
Пользователь №: 1,387



А что такое алгоритное шифрования (не щетайте меня диб biggrin.gif biggrin.gif илом)
просто не понел blush.gif


--------------------
СОНАТА (итал. sonata, от sonare — звучать), музыкальный жанр, произведение для одного или нескольких инструментов, написанное в форме сонатного цикла.



User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Mephisto
post Четверг, 19 Февраля 2004, 08:33
Отправлено #3


Wizard
Group Icon

Группа: Moderators
Сообщений: 677
Регистрация: 18-Дек-02
Из: Tallinn,Est
Пользователь №: 566



Есть такие файлы в пз, называются мобы. Так вот именно в них прописывается скрипт, отвечающий за квест. Этот скрипт по умолчанию зашифрован, зашифрован нивальским алгоритмом. Как им воспользоваться? Тут уж я не помошник точно. Алгоритм будет давать пользу только тем, кто имеет представление как им пользоваться rolleyes.gif . Но это лично мое мнение.


--------------------
"{}•••®\/A/\/\P][R[$®•••{}"
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
heller
post Четверг, 19 Февраля 2004, 12:10
Отправлено #4


War Mage
Group Icon

Группа: Moderators
Сообщений: 1,050
Регистрация: 12-Мар-02
Из: Москва
Пользователь №: 157



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


--------------------
SURREAL
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Talarasha
post Четверг, 19 Февраля 2004, 12:10
Отправлено #5


Wizard
Group Icon

Группа: Members
Сообщений: 563
Регистрация: 12-Окт-03
Пользователь №: 1,017



Угу, все интуитивно понятно...


--------------------
Say it once, say it twice,
Take a chance and roll the dice...
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Александр
post Четверг, 19 Февраля 2004, 18:09
Отправлено #6


Wizard
Group Icon

Группа: Members
Сообщений: 613
Регистрация: 17-Июн-03
Из: Москва,столица России
Пользователь №: 676



И всё-таки что-то народное мнение значит smile.gif
Эх,будем разбираться smile.gif


--------------------
Петька:Дуб ты,Василий Иванович!
Чапаев:Да,Петька,я могуч!
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
CAHEK7
post Четверг, 19 Февраля 2004, 18:41
Отправлено #7


Conjurer
Group Icon

Группа: Members
Сообщений: 214
Регистрация: 20-Мар-03
Из: Domodedovo
Пользователь №: 619



Вроде почти все понятно, только один вопросик, там тип PBYTEArray это массив байтов, типа если на VB, то Dim A() as Byte и вместо переменной buf использовать A?


--------------------
Что есть то есть, того что было не вернуть, не изменить ни дня.
Черный Обелиск "Дом желтого сна (часть 2)"
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
CAHEK7
post Четверг, 19 Февраля 2004, 20:09
Отправлено #8


Conjurer
Group Icon

Группа: Members
Сообщений: 214
Регистрация: 20-Мар-03
Из: Domodedovo
Пользователь №: 619



И еще... Откуда берется dwKey?


--------------------
Что есть то есть, того что было не вернуть, не изменить ни дня.
Черный Обелиск "Дом желтого сна (часть 2)"
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
ALtair
post Четверг, 19 Февраля 2004, 21:23
Отправлено #9


Wizard
Group Icon

Группа: Members
Сообщений: 473
Регистрация: 10-Сен-02
Из: Москва, черт ее дери.
Пользователь №: 554



из моба: <заголовок скрипта (ACCEECCB)><длина скрипта><Ключ скрипта (тот самый dwKey)><сам скрипт>


--------------------
Duty is everything, the greatest of joys, the deepest of sorrows.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
heller
post Четверг, 19 Февраля 2004, 23:48
Отправлено #10


War Mage
Group Icon

Группа: Moderators
Сообщений: 1,050
Регистрация: 12-Мар-02
Из: Москва
Пользователь №: 157



QUOTE
Dim A() as Byte и вместо переменной buf использовать A?


Думаю так выйдет...


--------------------
SURREAL
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
CAHEK7
post Пятница, 20 Февраля 2004, 23:06
Отправлено #11


Conjurer
Group Icon

Группа: Members
Сообщений: 214
Регистрация: 20-Мар-03
Из: Domodedovo
Пользователь №: 619



и еще меня смущает вот эта строка
buf[i]:= buf[i] xor dwTmpKey;
Если buf это массив byte, a TmpKey это DWORD, то при операции Xor в итоге должен получиться тип больше чим Byte, если TmpKey будет больше 255, а соответственно должно получиться или не совпадение типов или переполнение.

И еще: в VB вроде нет функций Shl и Shr, поэтому пришлось их создавать... Как я понял эти функции делают сдвиг на несколько бит, например 5 (00000101) Shl 2 даст в итоге 20 (00010100), а 5 (00000101) Shr 2 даст 1 (00000001). Вопрос в том, правильно ли я думаю...

P.S. К сожалению я не могу проверить этот код ни на Дельфи, ни на Си поэтому возникают такие вопросы...

Сообщение отредактировал CAHEK7 - Пятница, 20 Февраля 2004, 23:08


--------------------
Что есть то есть, того что было не вернуть, не изменить ни дня.
Черный Обелиск "Дом желтого сна (часть 2)"
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
heller
post Суббота, 21 Февраля 2004, 15:55
Отправлено #12


War Mage
Group Icon

Группа: Moderators
Сообщений: 1,050
Регистрация: 12-Мар-02
Из: Москва
Пользователь №: 157



Все правильно shl (<<) , shr (>>) сдвиг влево и вправо соотвественно. Даже не верится что этого нет в VB.

Никакого перенолнения не происходит...


--------------------
SURREAL
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Jet
post Суббота, 21 Февраля 2004, 16:57
Отправлено #13


Honor Guard
Group Icon

Группа: Add-on Developers
Сообщений: 1,066
Регистрация: 23-Фев-02
Из: gipat.ru
Пользователь №: 116



Кстати, вместо shl, shr, << и >> можно использовать деление и умножение, таким образом можно значительно упростить функцию. biggrin.gif
Я думаю, что Нивал их и использовал у себя в алгоритме, мы ведь эту функцию восстанавливали из Assembler'а.

Думаю в C++ исходниках Нивала алгоритм имел такой вид:
CODE

PBYTE cryptScript( PBYTE buf, DWORD dwKey, DWORD dwSize)
{
 for(DWORD i=0;i<dwSize;i++)
   {
     dwKey = dwKey * 214013 + 2531011;
     buf[i] ^= (BYTE)(dwKey / 65536 % 256);
   }
 return buf;
}


А это, код на C#:
CODE
public string ReadCodedString()
{
 byte[] coded = new byte[DataSize - 4];     // sizeof(coded string) - sizeof(key)
 char[] decoded = new char[coded.Length];
 uint uKey;

 // Read
 uKey   = orStream.ReadUInt32();           // KEY
 coded = orStream.ReadBytes(coded.Length); // Coded string

 // Decode string
 for(int i = 0; i < coded.Length; i++)
 {
   uKey = uKey * 214013 + 2531011;
   decoded[i] = Convert.ToChar(coded[i] ^ Convert.ToByte(uKey / 65536 % 256));
 }
 return new string(decoded, 0, decoded.Length );
}

Если кто может перевести этот код на Delphi и VB

Сообщение отредактировал Jet - Суббота, 21 Февраля 2004, 17:55


--------------------
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
CAHEK7
post Суббота, 21 Февраля 2004, 20:47
Отправлено #14


Conjurer
Group Icon

Группа: Members
Сообщений: 214
Регистрация: 20-Мар-03
Из: Domodedovo
Пользователь №: 619



вот я и пытаюсь перевести это на ВБ, но пока не очень получается


--------------------
Что есть то есть, того что было не вернуть, не изменить ни дня.
Черный Обелиск "Дом желтого сна (часть 2)"
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
heller
post Суббота, 21 Февраля 2004, 22:29
Отправлено #15


War Mage
Group Icon

Группа: Moderators
Сообщений: 1,050
Регистрация: 12-Мар-02
Из: Москва
Пользователь №: 157



На VB можно забить, там нету беззнаковых типов...


--------------------
SURREAL
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Jet
post Суббота, 21 Февраля 2004, 22:49
Отправлено #16


Honor Guard
Group Icon

Группа: Add-on Developers
Сообщений: 1,066
Регистрация: 23-Фев-02
Из: gipat.ru
Пользователь №: 116



Зато есть double, в котором можно хранить без знаковое целое, и в ручную обрабатывать переполнение.
Так что возможности есть, вот для того, чтобы это реализовать нужно опыт иметь, так с лету не получится. sad.gif
Может у нас на форуме найдутся профи, которым это под силу?


--------------------
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
CAHEK7
post Суббота, 21 Февраля 2004, 23:16
Отправлено #17


Conjurer
Group Icon

Группа: Members
Сообщений: 214
Регистрация: 20-Мар-03
Из: Domodedovo
Пользователь №: 619



я возможно реализую все это на ВБ, но я не все понимаю в этих функциях, т.к. си я не знаю совершенно, поэтому возникают некоторые вопросы, вот например строчка buf[i] ^= (BYTE)(dwKey / 65536 % 256); , я так и не понял что означеат (BYTE) , а % в си обозначают остотак от деления или целочисленное деление? А с C# этот знак ^ обзоначает возведение в степень или xor или чтото еще?
Jet давай с тобой в аське свяжемся и там все обсудим?


--------------------
Что есть то есть, того что было не вернуть, не изменить ни дня.
Черный Обелиск "Дом желтого сна (часть 2)"
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Jet
post Суббота, 21 Февраля 2004, 23:24
Отправлено #18


Honor Guard
Group Icon

Группа: Add-on Developers
Сообщений: 1,066
Регистрация: 23-Фев-02
Из: gipat.ru
Пользователь №: 116



(BYTE) - пеиведение к типу байт
% - остаток от деления, это для того чтобы небыло переполнения
^ - означает XOR
У меня аська не установлена, если можно, то лучше по MSN или IRC
irc.mastak.ru #gipat или выходи в чат сайта


--------------------
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
CAHEK7
post Воскресенье, 22 Февраля 2004, 01:16
Отправлено #19


Conjurer
Group Icon

Группа: Members
Сообщений: 214
Регистрация: 20-Мар-03
Из: Domodedovo
Пользователь №: 619



А вот и на VB:
CODE
Public Sub ScriptCrypt(ByRef Script() As Byte, ByVal Key As Long)

Dim Tmp As Double
Dim i As Long
Dim TmpLng As Long
Tmp = Key

For i = 0 To UBound(Script)

   Tmp = Tmp * 214013 + 2531011
'-------------------------------------------------
      Do While Tmp > 2199023255552#
        Tmp = Tmp - 2199023255552#
      Loop
      Do While Tmp > 274877906944#
        Tmp = Tmp - 274877906944#
      Loop
      Do While Tmp > 34359738368#
        Tmp = Tmp - 34359738368#
      Loop
      Do While Tmp > 4294967296#
        Tmp = Tmp - 4294967296#
      Loop
' Это все приведение Double к DWORD
' экспериментируюя с количиством циклов
' и со значениями можно добиться большего быстродействия
'-------------------------------------------------

   TmpLng = CLng(Int(Tmp / 65536))
   TmpLng = TmpLng Mod 256
   
   Script(i) = Script(i) Xor CByte(TmpLng)

Next

End Sub


проверил быстродействие: около 20 - 50 ms (миллисекунд) на 7 кб скрипта
Спасибо Jet'у помог очень...

Сообщение отредактировал CAHEK7 - Воскресенье, 22 Февраля 2004, 01:57


--------------------
Что есть то есть, того что было не вернуть, не изменить ни дня.
Черный Обелиск "Дом желтого сна (часть 2)"
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
CAHEK7
post Воскресенье, 22 Февраля 2004, 15:26
Отправлено #20


Conjurer
Group Icon

Группа: Members
Сообщений: 214
Регистрация: 20-Мар-03
Из: Domodedovo
Пользователь №: 619



А как можно определить зашифрованный скрипт или нет? Вот например Zone20.mob. Там после CAECCEAC идет только размер, и сразу незашифрованный скрипт.


--------------------
Что есть то есть, того что было не вернуть, не изменить ни дня.
Черный Обелиск "Дом желтого сна (часть 2)"
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

Reply to this topicTopic OptionsStart new topic
1 чел. читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
 

Упрощённая версия Сейчас: 20 Октября 2019 - 07:01