Ru-MaNGOS

Ru-MaNGOS (http://mangos.ytdb.ru/index.php)
-   Флудильня (http://mangos.ytdb.ru/forumdisplay.php?f=30)
-   -   sandbox(1.х.х-3.х.х) + открытый код (http://mangos.ytdb.ru/showthread.php?t=5440)

lovepsone 15.05.2012 15:50

Может завалялся у кого сендбокс с исходниками под старые версии вов? Очень хочется глянуть как сервер соединяется с клиентом, как передаются данные и тд. Просто пока на стороне мангоса не разобрался, для меня пока сложно, так как только изучаю с++ и ООП. Хочется хоть каких нибудь нормальных примерчиков.

неужели не у кого нету?? Может тогда тогда с катаклизма имеется, на форуме лежат только бинарники.

NeatElves 16.05.2012 13:59

На вовкоре посмотри, может остались.)

evilstar 16.05.2012 15:02

У ТОМ_RUSa спроси, может у него осталось

lovepsone 16.05.2012 16:04

Цитата:

Сообщение от NeatElves (Сообщение 27346)
На вовкоре посмотри, может остались.)

к сожалению там только бинарники по ходу.

Fabian 16.05.2012 22:17

I've the old Emupedia WotLK Sandbox source, but idk if I should share it :D

lovepsone 21.05.2012 18:33

наверное не у кого нету. Закрывайте тему и в корзину. Буду сам пытаться писать, исходя из кода мангоса.

RomanRom2 07.09.2012 01:34

есть у меня, все три. я бы мог их раздать сейчас, но как говорил наш один всем хорошо знакомый - "у вас с дельфи еще хуже чем с си" :pardon:

lovepsone 07.09.2012 15:40

Что же вы жалеете свои труды! С++ я целое лето изучал, хочется посмотреть вообще как пишутся sendbox'ы. В случае мангоса я тока понял верхушки, а в корешки так и не въехал! Просто хочется иметь хоть какой - то пример! Как то так...

RomanRom2 07.09.2012 16:32

судя по ответу вы наверное не поняли, исходники на дельфи.

да собственно сандбоксы пишутся максимально упрощенно, без изысков, без каких либо намеков на полноценный сервер, хотя есть подозрение некоторые "серверы" именно так и написаны =)))

окей, давайте я подготовлю исходники и выложу, впервые в истории wowcore поделиться какими то либо исходниками :secret: не пожалеть бы потом только =))) впрочем в сандбоксах чего скрывать кроме респонсов.

lovepsone 07.09.2012 16:48

Delphi это не проблема, так как я его уже изучал! Буду признателен вам если увижу исходнички... Для себя переведу их в С.

что- то долго вы....

RomanRom2 13.09.2012 16:39

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

Sid 13.09.2012 16:59

На скорую руку заново переписываете и представите нам "все так и было!" :D :D

RomanRom2 13.09.2012 17:54

нунах... переписывать все заново, я не на сколько мазохист :)

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

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

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

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

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

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

RomanRom2 21.09.2012 13:28

sandbox готов. осталось разобраться с гитом, который мне никак не давался все это время... может в этот раз все получится. на гитхабе есть RomanRom2 и внутри WoWCore, пока пустой.

lovepsone 21.09.2012 13:54

Очень хорошо! Если вы не можете закинуть на гит, то я могу объяснить. Тока скажите как с вами связаться! Может через скайп или т.п.

Lordronn 21.09.2012 15:49

Используйте GitHub for Windows, очень удобная утилита

RomanRom2 21.09.2012 23:29

чего то залилось, проверьте.

lovepsone 21.09.2012 23:45

Как я понял 1.12.1 залилось! Завтра посмотрю, спать охота! СП!

RomanRom2 24.09.2012 19:56

порт на 2.4.3 готов, за исключением эпизодической баги связанной с созданием персонажей в чар-листе. Никак не могу найти и победить. На 1.12.1 она возможно тоже есть, но никак себя не проявляет.

Вижу, репу мою форкают (зачем то). Форкающим просьба, посмотрите чо со спеллами, почему они не завершаются... Тот же код нормально работает на БК и Личе, возможно в классике какая то своя особенность.

lovepsone 24.09.2012 20:34

я форкнул твои исходники! Копаюсь в коде... разбираюсь!

RomanRom2 25.09.2012 16:04

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

LordJZ 25.09.2012 20:40

Цитата:

Сообщение от RomanRom2 (Сообщение 29552)
бага найдена, пофикшена, обновления залиты на гитхаб. сандбокс 2.4.3 так же зарелизен.
на БК какая то хрень с аддоном Blizzard_TimeManager. на форумах пишут что у меня клиент закоррапчен - странно, только что проставлен с чистого листа. ну и как всегда на форумах вопросов больше чем ответов... думал, что я как то аддоны не проинициализировал, попробовал что то сделать в точности согласно снифам - не помогло. в общем оставил. не помню, была ли эта проблема в старом сандбоксе от 2008 года. пишут, что это близзовский баг.

Про сандбоксы не знаю, но проблема такая была.

lovepsone 27.09.2012 15:29

Константы
Код:

UPDATEFIELDS_VERSION                          = '2.4.3';
UPDATEFIELDS_BUILD                            = '08606';
UPDATEFIELDS_RELEASE                          = 'WoW [Release] Build 8606 (Jul 10 2008 11:43:23)';

попробовал поменять на другую версию , пока качал патчи(взял 2.3.3 7799)
Но в клиент не пустило. Что же еще поменялось до 2.4.3?

И еще вопрос:
SRP6 библиотека, которая дает авторизацию в клиенте без пароля, или это связано с шифровкой пароля? Может есть какая нить инфа? Как на с++ она реализовывается?

Lordronn 27.09.2012 16:06

SRP\SRPP реализован в библиотеке OpenSSL

Deamon 27.09.2012 16:13

Цитата:

Сообщение от lovepsone (Сообщение 29573)
SRP6 библиотека, которая дает авторизацию в клиенте без пароля, или это связано с шифровкой пароля? Может есть какая нить инфа? Как на с++ она реализовывается?

Насколько я помню в SRP6 высчитывается хэш от связки (login+":"+password). Причем login и password должны быть обязательно в верхнем регистре. И насколько я помню login во время авторизации передается отдельно в незашифрованом виде в первом пакете от клиента.

Т.е. чтобы организовать беспарольный ввод нужно просто на стороне сервера игнорировать проверку hash'а от (login+":"+password).

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

Added:
Для беспарольного ввода нужно вот здесь закомментировать строки 235-240

lovepsone 27.09.2012 17:22

То есть как я теперь понял библиотека предназначена для rsa шифровки.
Да и еще пожалуйста подскажите как расшифровывается символы типа
Код:

$101
. Я так понимаю это какая форма счисления, только какая не пойму,(походу двоичная) как она расшифровывается, или они все одинакова переводятся. В интернет пока нечего не нашел. Может не так задаю вопрос?

RomanRom2 27.09.2012 20:52

0x101
2.3.3->2.4.3 - поменялось очень много. не стоит.
при авторегистрации все же проверяли хеш, только от LOGIN:LOGIN, во избежание ботов всяких. именно это и делается в сандбоксе.

Цитата:

Сообщение от LordJZ (Сообщение 29554)
Про сандбоксы не знаю, но проблема такая была.

проблема так и не побеждена. клиента можно инициализировать в двух состояниях:
- либо когда аддон этот выключен (отправив SMSG_ADDON_INFO) - в этом случае клиент при каждом входе в мир показывает ошибку "аддон выключен (забанен)";
- либо когда аддон включен (можно в SMSG_ADDON_INFO включить или вообще SMSG_ADDON_INFO не посылать) - в этом случае клиент входит в мир нормально, без ошибок. ошибка возникает если нажать ESC находясь уже внутри мира, вызывая меню (там где настройки, логаут и т.п.).
во втором случае клиент предлагает задизейблить этот аддон. после выключение все работает по первому сценарию.

поиск в гугле ничего не дал, одни вопросы, из ответов только "repare", что по понятным причинам сейчас невозможно, плюс клиент у меня все таки только что проставлен, с чистого листа. без каких либо аддонов (никогда ими не пользовался даже).

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

Vladimir 28.09.2012 03:01

Цитата:

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

RomanRom2 28.09.2012 08:32

проблема с аддонами полностью решена. спасибо minimajack за терпение, тестирование и чистый каталог Interfaces. как приятно работать с увлеченным человеком :)
врочем, чистый каталог сейчас и не понадобился бы, я знаю как вылечить аддоны прямо с сервера.

кто бы мог подумать, что аддоны (*.pub файлы) действительно корраптятся и даже удаляются с диска при неправильном SMSG_ADDON_INFO. что и понятно, ведь SMSG_ADDON_INFO может быть выстроен такого формата, при котором ожидается публичный ключ аддона, он то и пишется в pub файл. понятное дело, если мы не знаем чо делаем, то в аддоны пишется (может писаться при некоторых обстоятельствах) всякий мусор, что в свою очередь приводит к всяким печальным последствиям, как у меня до сего момента.

осталась пока проблема с голым чаром.

Den 28.09.2012 22:27

На офе в лк, лично сам видел такую проблему - как голые чары.

RomanRom2 30.09.2012 13:22

парсю "свежие" снифы 3.3.5 на предмет добывания начальных констант для новых плееров. с удивлением обнаружил, что ActionButtons стали какие то другие. например мой любимый хуман маг раньше всегда содержал следующее:
c.SetActionButtons(0, 6603, $00000000); // Spell: Attack
c.SetActionButtons(1, 133, $00000000); // Spell: Fireball
c.SetActionButtons(2, 168, $00000000); // Spell: Frost Armor
c.SetActionButtons(10, 159, $80000000); // Item: Refreshing Spring Water
c.SetActionButtons(11, 2070, $80000000); // Item: Darnassian Bleu

а теперь только пару спеллов и все. куда все подевалось...
c.SetActionButtons(0, 133, $00000000); // Spell: Fireball
c.SetActionButtons(1, 168, $00000000); // Spell: Frost Armor
c.SetActionButtons(9, 59752, $00000000); // Spell: Every Man for Himself

никто не помнит, когда близзы отменили ранки у спеллов, не в 3.3.5 случаем?

Konctantin 30.09.2012 13:51

в катаклизме

KiriX 01.10.2012 11:19

Цитата:

Сообщение от RomanRom2 (Сообщение 29596)
парсю "свежие" снифы 3.3.5 на предмет добывания начальных констант для новых плееров. с удивлением обнаружил, что ActionButtons стали какие то другие. например мой любимый хуман маг раньше всегда содержал следующее:
c.SetActionButtons(0, 6603, $00000000); // Spell: Attack
c.SetActionButtons(1, 133, $00000000); // Spell: Fireball
c.SetActionButtons(2, 168, $00000000); // Spell: Frost Armor
c.SetActionButtons(10, 159, $80000000); // Item: Refreshing Spring Water
c.SetActionButtons(11, 2070, $80000000); // Item: Darnassian Bleu

а теперь только пару спеллов и все. куда все подевалось...
c.SetActionButtons(0, 133, $00000000); // Spell: Fireball
c.SetActionButtons(1, 168, $00000000); // Spell: Frost Armor
c.SetActionButtons(9, 59752, $00000000); // Spell: Every Man for Himself

никто не помнит, когда близзы отменили ранки у спеллов, не в 3.3.5 случаем?

Всё правильно. В 3.3.5 и выпилили милиатаку у кастеров и всякую еду с панели.

RomanRom2 03.10.2012 10:28

спасибо.

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

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

давно хотел, лет 5 назад так уже точно - написать программку, которая подбирает ключ по этому RAW. немного фантазии и солдатской смекалки - и raw-to-pkt.exe теперь вообще не обязательно знать ключ :secret:

таким образом я спас все "битые" RAW снифы классов 2.0.6 и множество других старых снифов, считавшихся утерянными все это время. в результате некоторые классы в сандбоксе 3.3.5 будут от 2.0.6, увы. с радостью приму недостающие снифы, если у кого имеются таковые и религия позволяет "поделиться":
Код:

RACE_HUMAN_CLASS_WARLOCK;      // WARNING: 2.0.6 DATA!
RACE_ORC_CLASS_SHAMAN;        // WARNING: 2.0.6 DATA!
RACE_UNDEAD_CLASS_WARRIOR;    // WARNING: 2.0.6 DATA!
RACE_UNDEAD_CLASS_ROGUE;      // WARNING: 2.0.6 DATA!
RACE_UNDEAD_CLASS_PRIEST;      // WARNING: 2.0.6 DATA!
RACE_UNDEAD_CLASS_DEATHKNIGHT; // WARNING: 3.0.2 DATA!
RACE_UNDEAD_CLASS_MAGE;        // WARNING: 2.0.6 DATA!
RACE_UNDEAD_CLASS_WARLOCK;    // WARNING: 2.0.6 DATA!
RACE_TAUREN_CLASS_HUNTER;      // WARNING: 2.0.6 DATA!
RACE_TAUREN_CLASS_DRUID;      // WARNING: 2.0.6 DATA!
RACE_BLOODELF_CLASS_PRIEST;    // WARNING: 2.0.6 DATA! + STATS FROM MAG

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

еще одна особенность данного сандбокса в том, что ВНЕЗАПНО обнаружилось, что все мои сниферы так или иначе переползли на русские аккаунты и снифы в основном русские. в связи с чем много респонсов содержат только русские имена, английских нет. я прикрутил конечно же юникод (дельфи это уже давно умеет нативно), но так же ВНЕЗАПНО выяснилось, что enGB клиент не хавает юникод в принципе. ну, в общем пришлось возвращать респонсы в транслите :mda:, с префиксом "RUS:". ну зато можно сделать выборку по RUS в командах .un, .in и т.п.

сегодня релиз.

lovepsone 05.10.2012 19:57

Что ж... Прошу вашей помощи. Нарыл кое что при получения данных по сокету, когда вводишь логин и пароль.

Код:

075CEF4C  00 00 00 B3 06 0A 37 D5 0C A6 42 F5 C5 21 C2 C9  ...³.7Õ.¦BõÅ!ÂÉ
075CEF5C  A4 F7 6B 8F DB F9 93 C1 35 40 73 BF A9 6B C2 59  ¤÷kÛù“Á5@s¿©kÂY
075CEF6C  49 D0 4B 01 07 20 B7 9B 3E 2A 87 82 3C AB 8F 5E  IÐK ·›>*‡‚<«^
075CEF7C  BF BF 8E B1 01 08 53 50 06 29 8B 5B AD BD 5B 53  ¿¿Ž±SP)‹[*½[S
075CEF8C  E1 89 5E 64 4B 89 73 1A BA 56 A1 8D 78 09 15 E9  á‰^dK‰sºV¡x.é
075CEF9C  7E 6F 07 62 04 CB E4 A7 D9 79 3E 14 43 E5 E1 5A  ~obËä§Ùy>CåáZ
075CEFAC  6C 80 DD 95 A4 D5 F9 2C A0 BC A6 E2 82 95 E5 94  l€Ý•¤Õù,*¼¦â‚•å”
075CEFBC  D5 8C 4D 25 36 CD 00                            ÕŒM%6Í.


00                                                        opcode                _1byte
00                                                        cmd                _1byte
00                                                        error-code        _1byte
B3 06 0A 37 D5 0C A6 42 F5 C5 21 C2 C9 A4 F7 6B          B                _32bytes
8F DB F9 93 C1 35 40 73 BF A9 6B C2 59 49 D0 4B
01                                                        len of g        _1byte
07                                                        g                _1byte
20                                                        len of N        _1byte
B7 9B 3E 2A 87 82 3C AB 8F 5E BF BF 8E B1 01 08                N                _32bytes
53 50 06 29 8B 5B AD BD 5B 53 E1 89 5E 64 4B 89
73 1A BA 56 A1 8D 78 09 15 E9 7E 6F 07 62 04 CB          Salt                _32bytes
E4 A7 D9 79 3E 14 43 E5 E1 5A 6C 80 DD 95 A4 D5
F9 2C A0 BC A6 E2 82 95 E5 94 D5 8C 4D 25 36 CD                unknown3 (CRC?)        _16bytes
00 on socket left                                                _________________________
                                                                        _118 bytes

Эти данные обрабатываются в исходниках сандбокса используя SRP 6.

Я в VC++ используя либы OpenSSL хочу обработать эти данные, но не знаю с чего начать. Прошу вашей помощи в написании а также объяснений.

RomanRom2 05.10.2012 21:03

вам нужна либа для srp6, стащите ее из кода мангоса. ну или как там сделано, захаркожено может, я не знаю. openssl не содержит ничего для работы с srp6, там только работа с большими числами и хеши.

lovepsone 08.10.2012 15:36

В коде мангоса вот что я нарыл:
Цитата:

b.SetRand(19 * 8);
BigNumber gmod = g.ModExp(b, N);
B = ((v * 3) + gmod) % N;

MANGOS_ASSERT(gmod.GetNumBytes() <= 32);

BigNumber unk3;
unk3.SetRand(16 * 8);

///- Fill the response packet with the result
pkt << uint8(WOW_SUCCESS);

// B may be calculated < 32B so we force minimal length to 32B
pkt.append(B.AsByteArray(32), 32); // 32 bytes
pkt << uint8(1);
pkt.append(g.AsByteArray(), 1);
pkt << uint8(32);
pkt.append(N.AsByteArray(32), 32);
pkt.append(s.AsByteArray(), s.GetNumBytes());// 32 bytes
pkt.append(unk3.AsByteArray(16), 16);
uint8 securityFlags = 0;
pkt << uint8(securityFlags); // security flags (0x0...0x04)
Прочитал много статей по SRP-6. теперь встал вопрос. Зачем хешировать login:password, если эти данные не отправляются к клиенту. И еще вопрос. Переменная N = 2*q+1 как я понял из татей это простое число. Но как оно генерируется я так и не понял. Откуда оно берется вообще?В коде мангоса так и не нашел.

Evgeniy 08.10.2012 16:02

плохо искал
Код:

N.SetHexStr("894B645E89E1535BBDAD5B8B290650530801B18EBFBF5E8FAB3C82872A3E9BB7");
Цитата:

Зачем хешировать loginpassword, если эти данные не отправляются к клиенту. -
потому как по хешу только и можно проверить достоверность ключа. Не хранить же пароль в открытом виде.
Они не только не отправляются клиенту, но и не передаются серверу от клиента.

lovepsone 08.10.2012 16:16

Цитата:

Сообщение от Evgeniy (Сообщение 29759)
плохо искал
Код:

N.SetHexStr("894B645E89E1535BBDAD5B8B290650530801B18EBFBF5E8FAB3C82872A3E9BB7");
потому как по хешу только и можно проверить достоверность ключа. Не хранить же пароль в открытом виде.

За это спасибо. Так мы получаем N. Дальше идем по формулам и получаем B. Salt мы получаем рандомно как я понял в размере 32 байтов. И потом эти данные отправляем на клиент. Так я понимаю ? Session тоже надо генерировать ?

То есть вот что у меня получается: Пременная buffer[119] которая передаст данные по сокету имеет:
Код:

buffer[0] = AUTH_LOGON_CHALLENGE;
buffer[1] = AUTH_OK;
// unk
buffer[2] = 0;
// далее копируем из B все в буфер в размере 32 байт

// это константы
buffer[35] = 1;
buffer[36] = 7;

buffer[37] = 32;

// далее копируем из salt  все в буфер в размере 32 байт

// остальные байты от 102 до 118 обнуляем?

Цитата:

Сообщение от Evgeniy (Сообщение 29759)
Они не только не отправляются клиенту, но и не передаются серверу от клиента.

Это я уже давно понял.


Текущее время: 04:52. Часовой пояс GMT +3.

ru-mangos.ru - Русское сообщество MaNGOS