Ru-MaNGOS

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

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

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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.03.2010, 17:30   #1
abdula123
Пользователь
 
Регистрация: 22.03.2010
Сообщений: 41
Сказал(а) спасибо: 7
Поблагодарили 25 раз(а) в 15 сообщениях
abdula123 На верном пути
По умолчанию

Цитата:
Сообщение от zhenya Посмотреть сообщение
используется модуль в чистом виде всем известной компании.. а раздавать модуль отдельно как то бредово. плюс надо кому то это все поддерживать, речь идет о базе проверок (мало того, что её надо наполнять, её нужно обновлять при смене клиента).
в базе сейчас 147 проверок (они в постоянной ротации, так-что клиент постоянно что-то проверяет).

7 из них обновлять не требуется вообще.

44 обновляются скриптом за пару минут из файлов клиента (контольные суммы файлов и куски wow.exe) или из логов сниффера.

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

в любом случае - особых знаний для поддержания базы в актуальном состоянии не требуется.
abdula123 вне форума   Ответить с цитированием
Старый 22.03.2010, 19:11   #2
zhenya
Пользователь
 
Регистрация: 12.03.2010
Сообщений: 85
Сказал(а) спасибо: 5
Поблагодарили 42 раз(а) в 17 сообщениях
zhenya Скоро придёт к известности
По умолчанию

Цитата:
Сообщение от abdula123 Посмотреть сообщение
в базе сейчас 147 проверок (они в постоянной ротации, так-что клиент постоянно что-то проверяет).

7 из них обновлять не требуется вообще.

44 обновляются скриптом за пару минут из файлов клиента (контольные суммы файлов и куски wow.exe) или из логов сниффера.

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

в любом случае - особых знаний для поддержания базы в актуальном состоянии не требуется.
Уже имеется 822 проверки из снифов + 5 самописных. для поддержания базы необходим парсер\снифер.
также как
Код:
    #S->C Warden Opcode: 03
    #Unk bytes:
    #14 00 60 D0 FE 2C 01 00 02 00 20 1A 36 00 C0 E3
    #35 00 50 F1 35 00 C0 F5 35 00 03 08 00 77 6C 93
    #A9 04 00 00 60 A8 40 00 01 03 08 00 36 85 EA F0
    #01 01 00 90 F4 45 00 01
для текущей версии клиента.
seed модуля + новый клиентский и серверный ключ для изменения после шифрации
чтобы обойти ограничения ОС приходиться использовать 1 модуль. после того как это выйдет в паблик читерам не составит труда подменивать ответы на проверки...

Для того чтобы налету криптовать пакеты вардена необходимо знать ключи для каждого модуля или доставать из памяти ключи.
zhenya вне форума   Ответить с цитированием
Старый 22.03.2010, 19:28   #3
TOM_RUS
MaNGOS Dev
 
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
TOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небес
По умолчанию

Цитата:
Сообщение от zhenya Посмотреть сообщение
Уже имеется 822 проверки из снифов + 5 самописных. для поддержания базы необходим парсер\снифер.
Там дюпов полно, т.к. seed разный и искомые байты не известны.
TOM_RUS вне форума   Ответить с цитированием
Старый 23.03.2010, 03:54   #4
abdula123
Пользователь
 
Регистрация: 22.03.2010
Сообщений: 41
Сказал(а) спасибо: 7
Поблагодарили 25 раз(а) в 15 сообщениях
abdula123 На верном пути
По умолчанию

Цитата:
Сообщение от zhenya Посмотреть сообщение
для поддержания базы необходим парсер\снифер.
только не нужно говорить, что ни у кого его нету
все равно не поверю.

Цитата:
Сообщение от zhenya Посмотреть сообщение
также как
Код:
    #S->C Warden Opcode: 03
    #Unk bytes:
    #14 00 60 D0 FE 2C 01 00 02 00 20 1A 36 00 C0 E3
    #35 00 50 F1 35 00 C0 F5 35 00 03 08 00 77 6C 93
    #A9 04 00 00 60 A8 40 00 01 03 08 00 36 85 EA F0
    #01 01 00 90 F4 45 00 01
для текущей версии клиента.

seed модуля + новый клиентский и серверный ключ для изменения после шифрации
вот парсинг твоего пакета.

Код:
data = decode("""
03
14 00 60 D0 FE 2C 01 00 02 00 20 1A 36 00 C0 E3
35 00 50 F1 35 00 C0 F5 35 00 03 08 00 77 6C 93
A9 04 00 00 60 A8 40 00 01 03 08 00 36 85 EA F0
01 01 00 90 F4 45 00 01
""")

from pkt_parser import *
pkt = Packet(SMSG_WARDEN_DATA, data)
print pkt

------------

warden_opcode       : WARDEN_MODULE_LOADLIB (0x3)
check_len           : 20
check_crc           : 754896992
data                : 01000200201a3600c0e3350050f13500c0f53500
real_crc            :   754896992
check_opcode_1      : 3
check_len_1         : 8
check_crc_1         : 2845011063
data_1              : 04000060a8400001
real_crc_1          :   2845011063
check_opcode_2      : 3
check_len_2         : 8
check_crc_2         : 4041901366
data_2              : 01010090f4450001
real_crc_2          :   4041901366
кстати, пакет явно от старой версии клиента, в 3.3.2.11403 эти значения вот такие:

Код:
010002006089310000523100e05e3100f0623100
040000f0303f0001
010100d03f440001
на 03 опкод модуль реагируется прогрузкой несколькх функций через GetModuleHandle / GetProcAddress

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


Цитата:
Сообщение от zhenya Посмотреть сообщение
чтобы обойти ограничения ОС приходиться использовать 1 модуль. после того как это выйдет в паблик читерам не составит труда подменивать ответы на проверки...
не понял, о каких ограничениях идет речь?


сам процесс создания ключа выглядит так:

Код:
04:29:52
SMSG_WARDEN_DATA
warden_opcode       : WARDEN_MODULE_SEED (0x5)
seed                : f377c0dcb7f1625af8ee9ee352450442

04:29:52
CMSG_WARDEN_DATA
warden_response     : WARDEN_RESPONSE_HASH (0x4)
SHA1                : 67b3c364930ee3dd10fdbf6596b2aaa55e57a279
по одному и тому-же сиду разные модули выдадут разные хэши и сгененрируют разные ключи. это да.

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

и из этой базы уже потом проверять клиентов.

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


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

повторяю еще раз, АБСОЛЮТНО ВСЯ НЕОБХОДИМАЯ ИНФОРМАЦИЯ ЕСТЬ НА АНГЛОЯЗЫЧНЫХ ФОРУМАХ в открытом виде уже наверное год как. если не больше.

Последний раз редактировалось abdula123; 23.03.2010 в 04:02.
abdula123 вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
sven (23.03.2010)
Старый 23.03.2010, 05:42   #5
zhenya
Пользователь
 
Регистрация: 12.03.2010
Сообщений: 85
Сказал(а) спасибо: 5
Поблагодарили 42 раз(а) в 17 сообщениях
zhenya Скоро придёт к известности
По умолчанию

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

Код:
byte seed[16]; // taken from 0x05 packet
byte[] rc4_seed_client = ModuleSpecificHash(&seed); // this value than stored at module+4
byte[] rc4_seed_server = ModuleSpecificHash(&seed); // so we have double processed seed here
clientRC4Crypt_Init(rc4_seed_client);
serverRC4Crypt_Init(rc4_seed_server);
byte[] seedHash = SHA1(rc4_seed_client); // used in 0x04 packet
но вот близы точно не забьют если выложить варден работающий с большим числом модулей.. будет открыт путь для написания ботов и прочего..
п.с. хотелось бы посмотреть на модуль для macos клиента..
а на деле кому оно надо те уже написали простейшую поддержку..

Последний раз редактировалось zhenya; 23.03.2010 в 05:58.
zhenya вне форума   Ответить с цитированием
Старый 23.03.2010, 06:37   #6
abdula123
Пользователь
 
Регистрация: 22.03.2010
Сообщений: 41
Сказал(а) спасибо: 7
Поблагодарили 25 раз(а) в 15 сообщениях
abdula123 На верном пути
По умолчанию

Цитата:
Сообщение от zhenya Посмотреть сообщение
Данный пакет был для 3.3.2 и оно даже работает нормально..
странно. значит пакет менялся.
в логах за последние 10 дней - только те значения, что я написал.

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


Цитата:
Сообщение от zhenya Посмотреть сообщение
идеи есть как собирать seed, и новые ключи шифрации для каждого модуля ?
вот мой кусок кода, который делает это для одного сида.
адаптировать его под цикл - не проблема.

Код:
wmod = WardenModule("2A7BD368FF3D0795B4DE7F823F487175.raw")
wmod.load()
wmod.prepare()
wmod.init()

# state - текущее крипто-состояние
wmod.live_rc4_data = state

print " -> GenerateRC4Keys"
wmod.GenerateRC4Keys("")

# теперь шифруем пакет SEED и скармливаем вардену
# если ключи принялись нормально - он его обработает и выдаст HASH

s_pkt = decode("""
05 xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx
xx
""")

pkt_crypted = server_crypt.crypt(s_pkt)

print " -> PacketHandler"
print wmod.PacketHandler(pkt_crypted)

resp_crypted = wmod.send_queue.pop(0)
resp_decrypted = client_crypt.crypt(resp_crypted)

print "decrypted responce"
print dump2hexstr(resp_decrypted)

# после SEED->HASH  грузим новые ключи
rc4_states = cast(wmod.rc4_keys_ptr, POINTER(c_ubyte))

print "unload"
wmod.UnloadModule()
Цитата:
Код:
byte seed[16]; // taken from 0x05 packet
byte[] rc4_seed_client = ModuleSpecificHash(&seed); // this value than stored at module+4
byte[] rc4_seed_server = ModuleSpecificHash(&seed); // so we have double processed seed here
clientRC4Crypt_Init(rc4_seed_client);
serverRC4Crypt_Init(rc4_seed_server);
byte[] seedHash = SHA1(rc4_seed_client); // used in 0x04 packet
но вот близы точно не забьют если выложить варден работающий с большим числом модулей.. будет открыт путь для написания ботов и прочего..
п.с. хотелось бы посмотреть на модуль для macos клиента..
а на деле кому оно надо те уже написали простейшую поддержку..
варден работающий с любым модулем уже давно есть - для War3 / Diablo2.

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

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

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


оно надо коммерческим ботописателям - у некоторых из них действительно давно всё налажено.
ну или ботописателям-любителям, если кому делать нехер.
abdula123 вне форума   Ответить с цитированием
Старый 23.03.2010, 12:15   #7
zhenya
Пользователь
 
Регистрация: 12.03.2010
Сообщений: 85
Сказал(а) спасибо: 5
Поблагодарили 42 раз(а) в 17 сообщениях
zhenya Скоро придёт к известности
По умолчанию

В d2gs используется только 1 модуль заданный в d2warden.ini также как и ключ.
Код:
;Please don't modify following values!
;І»ТЄРЮёДПВГжµДЦµЈЎ
MOD=3ea42f5ac80f0d2deb35d99b4e9a780b.mod
MOD_RC4_Key=4f340a327dc8b4b8a7d1c15cf73c0e78
У близов есть ротация, у нас её нету. => Написав "Антиварден" для одного сервера, оно будет работать везде. А если держать в открытом все данные ключи шифрация для каждого модуля.. это не составит труда уже под бли**** написать бота или прогу подделывающую варден проверки.
Если вы поможете мне найти для всех модулей Seed, new client key, new server key.
0х3 пакет если отличается для различных модулей то необходимо еще и это.
также 0х4 пакет необходимо hash который возращает клиент. На текущий момент у TOM_RUS чуть больше 210 различных модулей с RC4 ключами к ним. Все равно как я понимаю в git не будут включены модули т.к. они подписаны RSA близарда.

имхо это откроет путь для начинающих читописателей, ботописателей.

п.с. если интересно #rmdc@rusnet

Последний раз редактировалось zhenya; 23.03.2010 в 12:19.
zhenya вне форума   Ответить с цитированием
Старый 23.03.2010, 13:49   #8
abdula123
Пользователь
 
Регистрация: 22.03.2010
Сообщений: 41
Сказал(а) спасибо: 7
Поблагодарили 25 раз(а) в 15 сообщениях
abdula123 На верном пути
По умолчанию

Цитата:
Сообщение от zhenya Посмотреть сообщение
В d2gs используется только 1 модуль заданный в d2warden.ini также как и ключ.
Код:
;Please don't modify following values!
;І»ТЄРЮёДПВГжµДЦµЈЎ
MOD=3ea42f5ac80f0d2deb35d99b4e9a780b.mod
MOD_RC4_Key=4f340a327dc8b4b8a7d1c15cf73c0e78
речь идет о немного других серверах
BNLS сервера точно поддерживают загрузку разных модулей. причем на лету.

http://bnls.ghostbot.net:9367/

Цитата:
У близов есть ротация, у нас её нету. => Написав "Антиварден" для одного сервера, оно будет работать везде. А если держать в открытом все данные ключи шифрация для каждого модуля.. это не составит труда уже под бли**** написать бота или прогу подделывающую варден проверки.
Если вы поможете мне найти для всех модулей Seed, new client key, new server key.
с ключами ой. самих ключей я никогда не вижу - т.к. забираю у модулей готовые крипто-состояния RC4 (т.е. BOX, I, J - и клиентский и серверный). и подсовываю им тоже крипто-состояния. для шифрования этого хватает. и вардену, и мне.

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



кстати, если кто в криптографии силен - можно ли из начального состояния RC4 (с I и J равными 0) вычислить ключ за небольшое время?

что-то мне подсказывает, что нет - т.к. неизвестно J, которое было на момент окончания заполнения BOX. а атаковать RC4 по всем правилам - слишком долгое удовольствие.

впрочем, вопрос чисто теоретический, и без начального ключа всё работает нормально.


Цитата:
0х3 пакет если отличается для различных модулей то необходимо еще и это.
за последние 10 дней изменений не было. раньше - не следил


Цитата:
также 0х4 пакет необходимо hash который возращает клиент. На текущий момент у TOM_RUS чуть больше 210 различных модулей с RC4 ключами к ним. Все равно как я понимаю в git не будут включены модули т.к. они подписаны RSA близарда.
ну у меня пока только 38 модулей.
я, кстати, их храню уже расшифроваными и распаковаными - меньше мороки при загрузке

Последний раз редактировалось abdula123; 23.03.2010 в 13:52.
abdula123 вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
sven (26.03.2010)
Ответ


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

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



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


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