Ru-MaNGOS

Вернуться   Ru-MaNGOS > Ядро > Опкоды, Формулы, Клиент > Копаем клиент

Важная информация

Копаем клиент Копаем клиент

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.08.2013, 14:32   #1
TOM_RUS
MaNGOS Dev
 
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
TOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небес
По умолчанию BannedAddons

http://i.imgur.com/RRmpAMN.jpg
http://i.imgur.com/PziqhFd.jpg
http://paste2.org/gDIZfIHs

Код:
 src/game/WorldSession.cpp | 51 ++++++++++++++++++++++++++++++-----------------
 src/game/WorldSession.h   | 12 ++++++-----
 2 files changed, 40 insertions(+), 23 deletions(-)

diff --git a/src/game/WorldSession.cpp b/src/game/WorldSession.cpp
index 12ea9fe..f6ec7a7 100644
--- a/src/game/WorldSession.cpp
+++ b/src/game/WorldSession.cpp
@@ -38,6 +38,7 @@
 #include "SocialMgr.h"
 #include "Auth/AuthCrypt.h"
 #include "Auth/HMACSHA1.h"
+#include <openssl/md5.h>
 #include "zlib/zlib.h"
 
 // select opcodes appropriate for processing in Map::Update context for current session state
@@ -833,13 +834,13 @@ void WorldSession::ReadAddonsInfo(WorldPacket& data)
     if (uncompress(const_cast<uint8*>(addonInfo.contents()), &uSize, const_cast<uint8*>(data.contents() + pos), data.size() - pos) == Z_OK)
     {
         uint32 addonsCount;
-        addonInfo >> addonsCount;                         // addons count
+        addonInfo >> addonsCount;                           // addons count
 
         for (uint32 i = 0; i < addonsCount; ++i)
         {
             std::string addonName;
-            uint8 enabled;
-            uint32 crc, unk1;
+            uint8 has_pub_key;
+            uint32 pub_key_crc, url_crc;
 
             // check next addon data format correctness
             if (addonInfo.rpos() + 1 > addonInfo.size())
@@ -847,15 +848,15 @@ void WorldSession::ReadAddonsInfo(WorldPacket& data)
 
             addonInfo >> addonName;
 
-            addonInfo >> enabled >> crc >> unk1;
+            addonInfo >> has_pub_key >> pub_key_crc >> url_crc;
 
-            DEBUG_LOG("ADDON: Name: %s, Enabled: 0x%x, CRC: 0x%x, Unknown2: 0x%x", addonName.c_str(), enabled, crc, unk1);
+            DEBUG_LOG("ADDON: Name: %s, has_pub_key: 0x%x, pub_key_crc: 0x%x, url_crc: 0x%x", addonName.c_str(), has_pub_key, pub_key_crc, url_crc);
 
-            m_addonsList.push_back(AddonInfo(addonName, enabled, crc));
+            m_addonsList.push_back(AddonInfo(addonName, has_pub_key, pub_key_crc, url_crc));
         }
 
-        uint32 unk2;
-        addonInfo >> unk2;
+        uint32 bannedTimeStamp;
+        addonInfo >> bannedTimeStamp;                       // LatestBannedAddOnTimestamp
 
         if (addonInfo.rpos() != addonInfo.size())
             DEBUG_LOG("packet under read!");
@@ -897,7 +898,7 @@ void WorldSession::SendAddonsInfo()
         data << uint8(unk1);
         if (unk1)
         {
-            uint8 unk2 = (itr->CRC != 0x4c1c776d);          // If addon is Standard addon CRC
+            uint8 unk2 = (itr->pub_key_crc != 0x4c1c776d);  // If addon is Standard addon CRC
             data << uint8(unk2);                            // if 1, than add addon public signature
             if (unk2)                                       // if CRC is wrong, add public key (client need it)
                 data.append(tdata, sizeof(tdata));
@@ -916,17 +917,31 @@ void WorldSession::SendAddonsInfo()
 
     m_addonsList.clear();
 
-    uint32 count = 0;
+    uint32 count = 1;
     data << uint32(count);                                  // BannedAddons count
-    /*for(uint32 i = 0; i < count; ++i)
+    for (uint32 i = 0; i < count; ++i)
     {
-        uint32
-        string (16 bytes)
-        string (16 bytes)
-        uint32
-        uint32
-        uint32
-    }*/
+        data << uint32(1);                                  // index
+
+        MD5_CTX ctx;
+
+        MD5_Init(&ctx);
+        const char *addon = "LFRAdvanced"; // sample addon name
+        MD5_Update(&ctx, addon, strlen(addon));
+        uint8 name_hash[16];
+        MD5_Final(name_hash, &ctx);
+        data.append(name_hash, 16);                         // Name MD5 (hash of addon's folder name)
+
+        MD5_Init(&ctx);
+        const char *version = ""; // addon version, ie "1.0"
+        MD5_Update(&ctx, version, strlen(version));
+        uint8 version_hash[16];
+        MD5_Final(version_hash, &ctx);
+        data.append(version_hash, 16);                      // Version MD5 (hash of "Version" metadata from addon's .toc file, if present)
+
+        data << uint32(time(NULL));                         // ban timestamp
+        data << uint32(1);                                  // state - should have low bit set! (client checks state & 1)
+    }
 
     SendPacket(&data);
 }
diff --git a/src/game/WorldSession.h b/src/game/WorldSession.h
index 19f40cd..ac1d6d3 100644
--- a/src/game/WorldSession.h
+++ b/src/game/WorldSession.h
@@ -77,16 +77,18 @@ struct AccountData
 
 struct AddonInfo
 {
-    AddonInfo(const std::string& name, uint8 enabled, uint32 crc) :
+    AddonInfo(const std::string& name, uint8 has_pub_key, uint32 pub_key_crc, uint32 url_crc) :
         Name(name),
-        Enabled(enabled),
-        CRC(crc)
+        has_pub_key(has_pub_key),
+        pub_key_crc(pub_key_crc),
+        url_crc(url_crc)
     {
     }
 
     std::string Name;
-    uint8 Enabled;
-    uint32 CRC;
+    uint8 has_pub_key;
+    uint32 pub_key_crc;
+    uint32 url_crc;
 };
 
 typedef std::list<AddonInfo> AddonsList;

Последний раз редактировалось TOM_RUS; 05.08.2013 в 20:43.
TOM_RUS вне форума   Ответить с цитированием
2 пользователя(ей) сказали cпасибо:
RomanRom2 (06.08.2013), ZGN (05.08.2013)
Старый 05.08.2013, 18:22   #2
Rave
Новичок
 
Регистрация: 30.04.2010
Сообщений: 12
Сказал(а) спасибо: 5
Поблагодарили 0 раз(а) в 0 сообщениях
Rave На верном пути
По умолчанию

Какое-то нездоровое оживление.
Я вообще считаю что разработку WoW эмуляторов надо забросить, так как скоро на официальных серверах будет f2p. Всё к этому идёт.
Rave вне форума   Ответить с цитированием
Старый 05.08.2013, 20:37   #3
TOM_RUS
MaNGOS Dev
 
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
TOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небес
По умолчанию

Цитата:
Сообщение от Rave Посмотреть сообщение
Я вообще считаю что разработку WoW эмуляторов надо забросить, так как скоро на официальных серверах будет f2p. Всё к этому идёт.
Как минимум до выхода титана никакого f2p не предвидится.
TOM_RUS вне форума   Ответить с цитированием
Старый 06.08.2013, 10:41   #4
RomanRom2
WowCore Dev
 
Аватар для RomanRom2
 
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
RomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всем
По умолчанию

Какое-то нездоровое оживление.
RomanRom2 вне форума   Ответить с цитированием
Старый 06.08.2013, 17:53   #5
YuruY
YTDB Dev
 
Аватар для YuruY
 
Регистрация: 01.02.2010
Сообщений: 288
Сказал(а) спасибо: 125
Поблагодарили 97 раз(а) в 53 сообщениях
YuruY Скоро придёт к известностиYuruY Скоро придёт к известности
По умолчанию

__________________
http://ytdb.ru/
http://svn2.assembla.com/svn/ytdbase/
YuruY вне форума   Ответить с цитированием
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.



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


ru-mangos.ru - Русское сообщество MaNGOS
Главная цель проекта MaNGOS - обучающая, поэтому разрешается использовать исходный код и собранную программу только для образовательных целей.
Вы не можете использовать MaNGOS в коммерческих целях, а также не разрешается устанавливать публичные серверы на базе MaNGOS.
Любое копирование материалов, информации в любом виде без указания источника - форума Ru-MaNGOS будет считаться нарушением авторских прав и нарушением Уголовного Кодекса РФ, ст. 146 ст. 147.
Перевод vBulletin: zCarot