Ru-MaNGOS

Ru-MaNGOS (http://mangos.ytdb.ru/index.php)
-   Копаем клиент (http://mangos.ytdb.ru/forumdisplay.php?f=35)
-   -   BattleNet авторизация (http://mangos.ytdb.ru/showthread.php?t=210)

Konctantin 10.03.2010 19:02

BattleNet авторизация
 
восстановлено с кеша google.com
Огромная благодарность Shadez за помощь.
================================================== =====================================
1 Aven
Грядет день Х когда с новым патчем станет невозможным авторизация по старому методу, давайте разберемся вместе с новым протоколом
Вот, что пока удалось раскопать:

Стандартный порт подключения: 1119
Адрес сервера указывается в файле realmlist.wtf в параметре set realmlistbn
Клиент (тестировалось на 10505) подключается именно по нему, когда в качестве логина используется E-Mail.

Логин использовался: 12345aabbcc@sfgsfg.ru

Первый пакет отправляемый клиентом серверу:
PHP код:

40 00 0a ed ea 07 0a ed 2d 76 4e aa 4a 1d 00 2b b7 ab 01 2b b4 b7 00 00 14 84 01 2b b7 ab 63 30 b9 b2 01 00 14 72 00 2b b7 ab 65 b7 23 a1 00 00 14 84 01 2b b7 
ab 73 3a a9 2a 01 00 14 84 55 37 b7 b6 00 2b b4 b7 00 00 00 f5 43 37 32 ba 00 2b b4 b7 00 00 1a 8b 0a 02 31 32 33 34 35 61 61 62 62 63 63 40 73 66 67 73 66 67 
2e 72 75

@
??
?-
vN?J+·«+?·„+·«c0??r+·«e·#?„+·«s:©*„U7·¶+?·?C72?+?·‹
12345aabbcc@sfgsfg.ru 

Я предпологаю что это CMD_GRUNT_AUTH_CHALLENGE

================================================== =====================================
2 TOM_RUS
В первом пакете содержится информация о версии компонентов клиента и логин в виде е-мэйла.
Также несколько респонсов:
PHP код:

no play time
4  213.248.127.130
:1119  192.168.1.2:19197  8  Recv  
0000  40 28 01 CE 00 00 00 00                            
@(......

no wow accounts
4  213.248.127.130
:1119  192.168.1.2:2567  8  Recv  
0000  40 28 00 EB 00 00 00 00                            
@(......

unknown account
4  213.248.127.130
:1119  192.168.1.2:2568  8  Recv  
0000  40 28 00 E8 00 00 00 00                            
@(......

unknown version
2  213.248.127.130
:1119  192.168.1.2:3867  8  Recv  
0000  40 28 00 F0 00 00 00 00                            
@(...... 

Про первые 4 пакета нет никакой информации (CMSG 40 00, SMSG 42 10, CMSG 42 08, SMSG 40 10).

Пакет 40 00:
PHP код:

1  192.168.1.2:12858  213.248.127.130:1119  106  Send  
40 00
0A ED EA 07 0A ED 2D 76 4E AA 4A 1D 
// 12 bytes per component
00 2B B7 AB 01 2B B4 B7 00 00 13 6D
01 2B B7 AB 63 30 B9 B2 01 00 13 6D
01 2B B7 AB 65 B7 23 A1 00 00 13 6D
01 2B B7 AB 73 3A A9 2A 01 00 13 6D
55 37 B7 B6 00 2B B4 B7 00 00 00 F5
43 37 32 BA 00 2B B4 B7 00 00 16 36
06 07 unk
?? ?? ?? ?? ?? ?? ?? ?? @ ?? ?? ?? ?? ?? ?? ?? ?? ?? e-mail 

Далее:
Запрос реалмлиста 40 02:
PHP код:

5  192.168.1.2:2723  213.248.127.130:1119  2  Send  
0000  40 02                                              
@. 

Первый ответ на запрос реалмлиста 40 02 (возможно это количество персонажей, созданных в соответствующих мирах):
PHP код:

// byte - count
// for(count)
//     6 bytes
6  213.248.127.130:1119  192.168.1.2:2723  15  Recv  
0000  40 02 02 1A 07 02 03 00 01 1A 07 03 04 00 02       
@.............. 

Сам реалмлист 42 02:
PHP код:

// D0 XX, D1 XX is realm names in Russian
// D0 A1 D0 B5 D0 B4 D0 BE D0 B3 D1 80 D0 B8 D0 B2 - Седогрив
// for each realm:
// 42 02 +
// 5 bytes +
// + 1 byte - name length,
// + realm name (no NULL terminator!),
// + 14 bytes.
// realm list ends with 43 02

7  213.248.127.130:1119  192.168.1.2:2723  684  Recv  
0000  42 02 1A 07 03 0C 00 10 D0 A1 D0 B5 D0 B4 D0 BE    B
...............
0010  D0 B3 D1 80 D0 B8 D0 B2 80 00 00 01 00 00 00 0C    ................
0020  00 40 6E D9 17 00 42 02 1A 07 04 08 00 10 D0 9F    .@n...B.........
0030  D0 BE D0 B4 D0 B7 D0 B5 D0 BC D1 8C D0 B5 80 00    ................
0040  00 01 00 00 00 0C 00 40 6D 91 68 00 42 02 1A 07    .......@m.h.B...
0050  04 0A 00 0E D0 A0 D0 B0 D0 B7 D1 83 D0 B2 D0 B8    ................
0060  D0 B9 80 00 00 01 00 00 00 0C 00 40 60 83 12 00    ...........@`...
0070  42 02 1A 07 05 09 00 14 D0 94 D1 80 D0 B0 D0 BA    B...............
0080  D0 BE D0 BD D0 BE D0 BC D0 BE D1 80 80 00 00 00    ................
0090  00 00 00 0C 00 40 81 EB 85 00 42 02 1A 07 01 08    .....@....B.....
00A0  00 1A D0 A2 D0 B5 D1 80 D0 BC D0 BE D1 88 D1 82    ................
00B0  D0 B5 D0 BF D1 81 D0 B5 D0 BB D1 8C 80 00 00 01    ................
00C0  00 00 00 0C 00 43 C8 00 00 00 42 02 1A 07 00 0D    .....C....B.....
00D0  00 17 D0 AF D1 81 D0 B5 D0 BD D0 B5 D0 B2 D1 8B    ................
00E0  D0 B9 20 D0 BB D0 B5 D1 81 80 00 00 01 00 00 00    .. .............
00F0  0C 00 43 C8 00 00 00 42 02 1A 07 00 0C 00 10 D0    ..C....B........
0100  90 D0 B7 D1 83 D1 80 D0 B5 D0 B3 D0 BE D1 81 80    ................
0110  00 00 00 00 00 00 0C 00 40 92 2D 0E 00 42 02 1A    ........@.-..B..
0120  07 00 0E 00 1D D0 9F D0 B8 D1 80 D0 B0 D1 82 D1    ................
0130  81 D0 BA D0 B0 D1 8F 20 D0 B1 D1 83 D1 85 D1 82    ....... ........
0140  D0 B0 80 00 00 01 00 00 00 0C 00 40 7A 3D 71 00    ...........@z=q.
0150  42 02 1A 07 00 0F 00 17 D0 92 D0 B5 D1 87 D0 BD    B...............
0160  D0 B0 D1 8F 20 D0 9F D0 B5 D1 81 D0 BD D1 8F 80    .... ...........
0170  00 00 00 00 00 00 0C 00 40 97 DF 3B 00 42 02 1A    ........@..;.B..
0180  07 04 0B 00 15 D0 A2 D0 BA D0 B0 D1 87 20 D0 A1    ............. ..
0190  D0 BC D0 B5 D1 80 D1 82 D0 B8 80 00 00 01 00 00    ................
01A0  00 0C 00 44 16 00 00 00 42 02 1A 07 02 08 00 10    ...D....B.......
01B0  D0 93 D0 BE D1 80 D0 B4 D1 83 D0 BD D0 BD D0 B8    ................
01C0  80 00 00 01 00 00 00 0C 00 43 C8 00 00 00 42 02    .........C....B.
01D0  1A 07 01 0D 00 08 D0 93 D1 80 D0 BE D0 BC 80 00    ................
01E0  00 01 00 00 00 0C 00 43 C8 00 00 00 42 02 1A 07    .......C....B...
01F0  02 0B 00 17 D0 A1 D1 82 D1 80 D0 B0 D0 B6 20 D0    .............. .
0200  A1 D0 BC D0 B5 D1 80 D1 82 D0 B8 80 00 00 01 00    ................
0210  00 00 0C 00 43 C8 00 00 00 42 02 1A 07 02 09 00    ....C....B......
0220  13 D0 9A D0 BE D1 80 D0 BE D0 BB D1 8C 2D D0 BB    .............-..
0230  D0 B8 D1 87 80 00 00 01 00 00 00 0C 00 40 8C 5A    .............@.Z
0240  1D 00 42 02 1A 07 02 0A 00 1D D0 A1 D0 B2 D0 B5    ..B.............
0250  D0 B6 D0 B5 D0 B2 D0 B0 D1 82 D0 B5 D0 BB D1 8C    ................
0260  20 D0 94 D1 83 D1 88 80 00 00 01 00 00 00 0C 00     ...............
0270  43 C8 00 00 00 42 02 1A 07 05 0B 00 1F D0 91 D0    C....B..........
0280  BE D1 80 D0 B5 D0 B9 D1 81 D0 BA D0 B0 D1 8F 20    ............... 
0290  D1 82 D1 83 D0 BD D0 B4 D1 80 D0 B0 80 00 00 00    ................
02A0  00 00 00 0C 00 44 16 00 00 00 43 02                .....D....C. 

Клиент шлет в какой же мир мы хотим зайти (связи с реалмлистом найти не удалось) 44 02:
PHP код:

8  192.168.1.2:2723  213.248.127.130:1119  10  Send  
0000  44 02 1A 07 03 8C C6 D0 E9 06                      D
......... 

Сервак шлет адрес этого мира (вот в этом опкоде что-то странное, он меняется при каждом выборе нового мира, например 44 A2, 44 32, 44 C2 и т.д. всегда 44 ?2...):
PHP код:

// 08 A6 22 0E unknown crap
// 3E 43 2D 09 IP
// 0E 8C       PORT

9  213.248.127.130:1119  192.168.1.2:2723  12  Recv  
0000  44 32 08 A6 22 0E 3E 43 2D 09 0E 8C                D2
..".>C-... 

На этом все заканчивается...

================================================== =====================================
3 Aven
Тоже поснифал
Вот что интересно, в отличии от старого протокола, после получения полного списка миров клиент запрашивает периодически изменения в нем, а не полный список:

запрос:
PHP код:

00000145  40 01                                            @. 

ответ:
PHP код:

000027E0  40 01                                            @.
000027E2  42 02 0a 02 03 0a 00 0f  54 77 69 73 74 69 6e 67 B....... Twisting
000027F2  20 4e 65 74 68 65 72 80  00 00 01 00 00 00 08 00  Nether
. ........
00002802  40 56 24 dd 00                                   @V$..
00002807  42 02 1a 07 00 0e 00 1d  d0 9f d0 b8 d1 80 d0 b0 B....... ........
00002817  d1 82 d1 81 d0 ba d0 b0  d1 8f 20 d0 b1 d1 83 d1 ........ .. .....
00002827  85 d1 82 d0 b0 80 00 00  01 00 00 00 0c 00 40 92 ........ ......@.
00002837  e1 48 00                                         .H.
0000283A  42 02 12 06 00 0e 00 09  4d 6f 6f 6e 67 6c 61 64 B....... Moonglad
0000284A  65 80 00 00 06 00 00 00  08 00 40 2c cc cd 00    e
....... ..@,... 

Полный сниф удачного входа на "Борейская тундра".
http://pastebin.com/m449fe02c

Пакет 40 10 - содержит данные о аккаунте WoW, видны строки имени оригинального аккаунта
PHP код:

00000317  40 10 61 75 74 68 00 00  45 55 23 45 1d 42 8a 16 @.auth.. EU#E.B..
00000327  71 e2 76 35 e9 23 e9 ac  fd 6f 8a 88 3a cb 1f 8e q.v5.#.. .o..:...
00000337  6b 2a 41 52 f0 37 e5 84  15 94 08 01 03 b8 e4 36 k*AR.7.. .......6
00000347  05 d0 f1 17 b3 49 c1 90  ad ea 3d 84 36 da 90 e6 
.....I.. ..=.6...
00000357  6c b8 ae 8d f9 47 17 1b  39 59 84 45 5f 80 00 af l....G.. 9Y.E_...
00000367  c8 03 03 d0 90 00 00 00  fa 14 01 66 67 64 66 20 ........ ...fgdf 
00000377  73 66 67 73 66 67 02 06  44 46 53 44 53 47 53 00 sfgsfg
.. DFSDSGS.
00000387  00 00 00 00 00 00 08 00  00 00 00                ........ ... 

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

Konctantin 10.03.2010 19:04

================================================== =====================================
4 Fog
А если прикрепить учетку еще и к US BN то оригинальное имя отправиться 2 раза и появится меню выбора учеток. Из двух одинаковых, правда.

================================================== =====================================
5 TOM_RUS
Цитата:

А если прикрепить учетку еще и к US BN то оригинальное имя отправиться 2 раза и появится меню выбора учеток. Из двух одинаковых, правда.
Один аккаунт можно 2 раза прикрепить? о_О

================================================== =====================================
6 Aven
к учетной записи БН можно прикреплять несколько аккаунтов, тогда после авторизации можно выбрать, какую учетную запись wow использовать.

================================================== =====================================
7 TOM_RUS
Цитата:

к учетной записи БН можно прикреплять несколько аккаунтов, тогда после авторизации можно выбрать, какую учетную запись wow использовать.
Это понятно, я понял так что одну и туже учетку можно 2 раза прикрепить...
Цитата:

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

================================================== =====================================
8 Fog
Цитата:

Один аккаунт можно 2 раза прикрепить? о_О
Не знаю как щас, но когда я создавал BN учетку у меня изначально создалась us-учетка, прикрепил к ней обыкновенный акк, перевел BN на eu и какое-то время было 2 записи (дня 3), оба вели на один аккаунт.

P.S. В ЛК на battle.net отображалась eu-версия оригинальной учетки как WOTLK, а us-версия - как Trial, при каждом заходе писал, что срок вышел и требовал проплатить.

Велосипед ?

Реалмлист-опкод
Код:

42 02 1A 07 04 0B 00 15 D0 A2 D0 BA D0 B0 D1 87
20 D0 A1 D0 BC D0 B5 D1 80 D1 82 D0 B8
80 00 00
01 00 00 00 0C 00
40 A0 C4 9C 00 42 02 1A 07 00
0D 00 17 D0 AF D1 81 D0 B5 D0 BD D0 B5 D0 B2 D1
8B D0 B9 20 D0 BB D0 B5 D1 81 80 00 00 01 00 00
00 0C 00 43 C8 00 00 00 42 02 1A 07 02 0B 00 17
D0 A1 D1 82 D1 80 D0 B0 D0 B6 20 D0 A1 D0 BC D0
B5 D1 80 D1 82 D0 B8 80 00 00 01 00 00 00 0C 00
43 C8 00 00 00 42 02 1A 07 02 09 00 13 D0 9A D0
BE D1 80 D0 BE D0 BB D1 8C 2D D0 BB D0 B8 D1 87
80 00 00 01 00 00 00 0C 00 40 CC ED 91 00 42 02
1A 07 03 0C 00 10 D0 A1 D0 B5 D0 B4 D0 BE D0 B3
D1 80 D0 B8 D0 B2 80 00 00 01 00 00 00 0C 00 40
99 A9 FC 00 42 02 1A 07 01 0D 00 08 D0 93 D1 80
D0 BE D0 BC 80 00 00 01 00 00 00 0C 00 43 C8 00
00 00 42 02 1A 07 00 0E 00 1D D0 9F D0 B8 D1 80
D0 B0 D1 82 D1 81 D0 BA D0 B0 D1 8F 20 D0 B1 D1
83 D1 85 D1 82 D0 B0 80 00 00 01 00 00 00 0C 00
40 B2 5E 35 00 42 02 1A 07 00 0F 00 17 D0 92 D0
B5 D1 87 D0 BD D0 B0 D1 8F 20 D0 9F D0 B5 D1 81
D0 BD D1 8F 80 00 00 00 00 00 00 0C 00 43 C8 00
...

Указатель для итераций
ID батлгруппы
Имя (Ткач Смерти)
Длина имени в байтах
Связано с локалью ? id мира в батлгруппе ?
Какие-то другие данные по id мира курсив составляет GUID реалма (?) 0B - ??? - не посылается в предыдущем пакете

Нолик
Флаги
00 + offline? (00) + realmType (01) + 00 00 00 + timezone (0C) + 00
population

================================================== =====================================
9 TOM_RUS

Сегодня было выяснено что battle.net протокол использует модули (DLL) подобно Warden, модули эти скачиваются с сервера http://auth.eu.depot.battle.net:80 (для евро). Обработку пакетов осуществляет этот самый загружаемый модуль. Название модуля было обнаружено в серверных пакетах 42 08 (первый логин, когда модуль еще не загружен на компьютер) и 42 10 (последующие логины). Логично предположить что в первом пакете (40 00) есть информация о том, загружен модуль или нет.

В данный момент известно 6 модулей, их названия следующие:
PHP код:

36b27cd911b33c61730a8b82c8b2495fd16e8024fc3b2dde08861c77a852941c.authтакже известный как Thumbprint.dll
23451d428a1671e27635e923e9acfd6f8a883acb1f8e6b2a4152f037e5841594
.authтакже известный как Password.dll
f6aba5c5c77dde9484ea718ac8be35bd4fd49293849fdee1871320fd2ee5dff2
.authтакже известный как SYSDESC.dll

5a22ce74646016952737205c0ae4f9a55cfa69e1aa1ef4469d5aa74f3dcdbb1b
.authтакже известный как Password.dll
61292e01a368a60a91d4f8d6903fd5968de21bdab8fdc8f36ca0a05cc11bab53
.authтакже известный как Thumbprint.dll
012153849a95462bfbd818b5d060ec4a4a2c4ab9a1c0147cef221a83ae0c3141
.authтакже известный как Resume.dll 

Сохраняются модули после загрузки в папке:
C:\Documents and Settings\<USER_NAME>\Local Settings\Application Data\Blizzard Entertainment\Battle.net\Cache.

================================================== =====================================
10 Deamon

Изврат, извраат!

Прошлым вечером я пытался найти обработчики для этих опкодов в 3.2.2. Но в battlenet.dll я нашел только релазиции протоколов http/2.0 и ftp. А в wow.exe находится класс BattlenetLogin, и обработчиками там тоже и не пахнет.

Теперь понятно почему

================================================== =====================================
11 TOM_RUS
Приблизительная структура пакета 42 10:
PHP код:

5 байт строка auth
1 байт 0
2 байта регион 
(EU)
32 байта название модуля
3 байта 
(возможно опкоды для модуля)
если третий байт из последних трех равен 0то:
{
    
32+32+128 байт уходит обработчику в Password.dll
}
если третий байт равен 3то:
{
    
32 байт
    14 байт
    имя
    2 байта
    аккаунт
    4
+4+4 байта
}

потом опять повторяется:
5 байт строка auth
1 байт 0
2 байта регион 
(EU)
32 байта название модуля
2 байта 
(возможно опкоды для модуля)
512 байт уходит обработчику в Thumbprint.dll 

================================================== =====================================
12 Kosss

Гдето в 0x4210 пакете помоему возвращается ИП сервера, либо в нём содержится хаш включающий в себя ИП шлющего сервера. Возможно ли?

Просто если перенаправить например клиента на localhost через прокси Kobold PX, то клиент разрывает коннект с сообщением что игровой сервер не тот. Хотя прокси пропускает пакеты без изменений.

Либо в 0x4000 первом пакете клиент хашит ип по которому коннектит, но тогда сервер не слал бы жирного пакета в 791 байт у меня а ответил чем то мелким с отказом.

В общую копилку видимо аналогии RECONNECT_CHALLENGE:
PHP код:

CLIENT:
LENGTH2
OPCODE
0x4001
OPCODE_NAME
UNKNOWN
DATA
:
40 01

SERVER
:
LENGTH4
OPCODE
0x4101
OPCODE_NAME
UNKNOWN
DATA
:
41 01 0D 02 

Появились тогда когда я придержал 0x4210 дебуггером.

================================================== =====================================
13 TOM_RUS
Когда-то я тоже столкнулся с этой проблемой, но не стал разбираться из-за чего это происходит и заюзал winpcap вместо прокси. А что если прокси запустить на другой машине с реальным IP? Просто в battle.net.dll есть вот такой кусок кода:
PHP код:

int __cdecl sub_3C925610()
{
  
int result// eax@1
  
char v1// ***91;sp+4h***93; ***91;bp-4h***93;@1

  
dword_3C97A5D8 inet_addr("0.0.0.0");
  
dword_3C97A5E8 inet_addr("127.0.0.1");
  
dword_3C97A5D4 inet_addr("255.255.255.255");
  
dword_3C97A5C8 = *(_DWORD *)sub_3C925530((int)&v1"10.0.0.0/8", (int)&dword_3C97A5DC);
  
dword_3C97A5CC = *(_DWORD *)sub_3C925530((int)&v1"172.16.0.0/12", (int)&dword_3C97A5E0);
  
result sub_3C925530((int)&v1"192.168.0.0/16", (int)&dword_3C97A5E4);
  
dword_3C97A5D0 = *(_DWORD *)result;
  return 
result;


Возможно он используется для проверки не является ли IP сервера локальным...

================================================== =====================================
14 Kosss
Да кстати. Возможно клиент банально проверил на локальный адрес. Проверю и сообщу.

Konctantin 11.03.2010 07:16

Я тут сидел, думал чего-то и пришел к выводу что вся проблема в том, что клиент не невозможно заставить работать через прокси, так как он его минует, в данном случае надо использовать Поставщик многоуровневых услуг (LSP) - тобиш заставить трафик от клиента (в любом случае) ходить через DLL которая и будет выполнять роль прокси. Но это только предположение.
http://www.komodia.com/index.php?page=lsp.html
Это я начитался на wowcore.ru.

Dereka 11.03.2010 08:51

http://darkblizz.org/wiki/doku.php
инфа по старкрафту II и bnet2.0
там же ссылка на врапер
http://github.com/kow/Starcraft-2-Battle.Net-Wrapper
ссылчка там есть
Цитата:

Full authorisation client by Ralek and kynox written in C# utilising a C++ AuthModule interface http://www.studioaccescible.com/Starcraft2/Projects.rar
она неправильная.. вот нашёл
http://filebeam.com/f81c1f89a3bbc2ae1d053c1b6baee5bb
хотя всё это есть и тут
http://github.com/kow/Starcraft-2-Ba...b0bd3bcff62742

Konctantin 11.03.2010 09:26

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

Dereka 13.03.2010 13:59

вот ещё полезная ссылка
http://darkblizz.org/wiki/doku.php?id=bnet2_protcol

_PARADOX_ 14.03.2010 00:01

Цитата:

Сообщение от Konctantin (Сообщение 1271)
Я тут сидел, думал чего-то и пришел к выводу что вся проблема в том, что клиент не невозможно заставить работать через прокси, так как он его минует, в данном случае надо использовать Поставщик многоуровневых услуг (LSP) - тобиш заставить трафик от клиента (в любом случае) ходить через DLL которая и будет выполнять роль прокси. Но это только предположение.
http://www.komodia.com/index.php?page=lsp.html
Это я начитался на wowcore.ru.

через прокси можно заставить работать абсолютно все
лично я пользуюсь http://www.proxifier.com/

Fedia22 15.03.2010 06:40

как не странно я но я тоже решил как то попробовать через него (был случай когда отключили интернет и сидеть пришлось через друга который поднял UserGate) только была старая версия без НАТа... приходилось почему то подключать свой инет (подключаться он подключался только всегда писал что интернета нету. мол заплатите) чтоб battle.net мог авторизовать меня =\

Konctantin 06.04.2010 10:22

Лазил по google нашел вот это: http://code.google.com/p/starcrack/
Больше всего насторожило http://code.google.com/p/starcrack/s...BattleNetWorld и http://code.google.com/p/starcrack/s...azy/bnetserver это что же получается - отревирсили BNet2 протокол? или только частично?

RomanRom2 07.04.2010 10:24

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

Konctantin 07.04.2010 10:50

Цитата:

что тут обычный вов...
как это?

TOM_RUS 07.04.2010 11:01

Там достаточно информации чтобы полностью реализовать батлнет авторизацию для WoW. Но потребуется лоадер/модификация клиентских файлов для успешной авторизации.

RomanRom2 07.04.2010 13:54

что не есть приемлимо...

LordJZ 07.04.2010 13:56

Цитата:

Сообщение от TOM_RUS (Сообщение 3967)
...
Но потребуется лоадер/модификация клиентских файлов для успешной авторизации.

Почему ?

timmit 07.04.2010 13:57

Изменение клиентский файлов почему? очевидно вроде, это уже прямое нарушение лицензии

TOM_RUS 07.04.2010 14:05

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

RomanRom2 07.04.2010 14:09

наверное нужен лоадер, типа как наш снифер-инжектор. Deamon?

Deamon 07.04.2010 14:12

Потому что потому :). А если серьезно - то очевидное очевидно. Близзы в BN2 используют подключаемые модули, которые загружаются с сервера. Основная доля криптографии, по которой происходит авторизация клиента, происходит в них.

1) Password.dll - сие есть кладезь криптографии.
2) Thumbprint.dll - а сие есть причина, по которой не удается подсунуть клиенту другой сервер(!!!). Именно в этой dll-ке происходит проверка на ip адресс. Если она оканчивается неудачей... ну вообщем вы поняли.

Эти модули, как и модули вардена, подписаны цифровой подписью RSA-2048. Поэтому как и в вардене для использования самописных модулей необходмо сделать одно из двух:

а) Разложить N длиной 2048 бит на простые множители. Как вы понимаете, вероятность успешности сего действия есть число бесконечно малое.
б) Поменять в клиенте RSA ключ проверки на свой. Что есть уже более реальное действие, нежели первое

Added:
Вариант с подменой ip обсуждался в ирке.

1) Можно настроить маршрутизатор во внутренней сети так, чтобы по arp запросу на близовский ip выдавался мак локального маршрутизатора, и тот посылал пакеты на локальный WoW сервер. Тогда маршрут траффика будет идти куда надо и как надо. Но все, кто находится в пределах этой подсети - не смогут подключится к оффу.

2) Можно поплясать с бубном. Для каждой подсети поставить дополнительный компутер, а юзером раздать батники, которые будут по началу игры добавлять в статическую arp таблицу пару (ip близзов)\(мак доп. сервера) и по окончанию удалять. Это частично решает вопрос дискриминации игроков с оффа, но все же требует некоторых административных затрат.

zhenya 07.04.2010 14:25

клиент по ип конектится или по домену? если по домену можно подменять через windows/system32/drivers/etc/host.

TOM_RUS 07.04.2010 14:27

Цитата:

Сообщение от zhenya (Сообщение 3982)
клиент по ип конектится или по домену? если по домену можно подменять через windows/system32/drivers/etc/host.

По домену, но проверяет он IP адрес, поэтому этот метод не работает.

Deamon 07.04.2010 14:39

Цитата:

Сообщение от RomanRom2 (Сообщение 3980)
наверное нужен лоадер, типа как наш снифер-инжектор. Deamon?

Все что угодно, что заставляло бы клиента поверить, что он подключен к ip близов, а не к 127.0.0.1 и иже с ним.

Konctantin 07.04.2010 14:39

Цитата:

но проверяет он IP адрес,
а где он берет список IP адресов для сравнения?

Deamon 07.04.2010 14:43

Цитата:

Сообщение от Konctantin (Сообщение 3985)
а где он берет список IP адресов для сравнения?

Он вшит в thumbprint.dll

RomanRom2 07.04.2010 14:51

Цитата:

Сообщение от Deamon (Сообщение 3986)
Он вшит в thumbprint.dll

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

Deamon 07.04.2010 15:02

Цитата:

Сообщение от RomanRom2 (Сообщение 3988)
эта длл скачивается каждый раз при подключении? или только при апдейтах? или вообще эпизодически? т.е. есть ли смысл ломать эту длл?

В смысле её ломать? Еще раз по порядку:
1) Сервер при конекте клинета указывает ему идентификатор dll'ки, которую следует использовать. Если нужной dll'ки в кеше клиента не обнаруживается - клиент загружает загружает её с сервера
2) Dll подписана RSA-2048. Клиент проверяет эту подпись, поэтому подсунуть измененную dll c разбегу не получится. Чтобы изменить dll-ку нужно одно из двух:
  • Взломать близовский RSA ключ(разложить N на простые множители)
  • Заменить близовский RSA ключ своим и им же подписать измененную dll-ку
3) Можно пойти другим путем. И инъектором\хукером\драйвер ом или чем угодно другим заставить клиента поверить в то, что он подключен с серверу с близовским ip.

<Фанфары>

TOM_RUS 07.04.2010 15:03

Цитата:

Сообщение от Deamon (Сообщение 3986)
Он вшит в thumbprint.dll

Не верно. Адрес в виде RSA сигнутуры присылает сервер, и клиент проверяет эту сигнатуру с помощью паблик ключей, зашитых в Thumbprint.dll.

tempura 07.04.2010 17:14

Starcraft II beta также использует Battle.net авторизацию?
Ломаные SC2 уже есть - может в них есть что посмотреть?

Konctantin 07.04.2010 17:20

Цитата:

Ломаные SC2 уже есть - может в них есть что посмотреть?
там и смотрим

Neverdie 07.04.2010 18:37

Цитата:

Сообщение от tempura (Сообщение 3997)
Starcraft II beta также использует Battle.net авторизацию?
Ломаные SC2 уже есть - может в них есть что посмотреть?

да покамись там тоже голяк
толкового ниче нету
демон все нам разжевал и так что да каг

подключить бы биашу сюда бы
но ему же давно совсем неинтеренсо
а криптограция это его юзюминка была:mda:

GriffonHeart 08.04.2010 02:22

Цитата:

Сообщение от Deamon (Сообщение 3984)
Все что угодно, что заставляло бы клиента поверить, что он подключен к ip близов, а не к 127.0.0.1 и иже с ним.

Так вроде тут где-то писали, что клиент не станет коннектиться на серые IP вида 10.***, 192.168.** и 172.16**, а если использовать белые IP - всё равно борода?

vedmysh 08.04.2010 09:02

А что мешает подменять адрес к которому идет подключение в момент вызова функций апи винсокетов например хукнув/перехватив тем или иным способом connect/WSAConnect ?

Chestarfild 08.04.2010 14:17

Цитата:

Сообщение от vedmysh (Сообщение 4049)
А что мешает подменять адрес к которому идет подключение в момент вызова функций апи винсокетов например хукнув/перехватив тем или иным способом connect/WSAConnect ?

Костыли для клиента не есть хорошо.

ЗЫ: Близзы старую систему аутификации ещё не снесли?

Deamon 08.04.2010 14:42

Цитата:

Сообщение от vedmysh (Сообщение 4049)
А что мешает подменять адрес к которому идет подключение в момент вызова функций апи винсокетов например хукнув/перехватив тем или иным способом connect/WSAConnect ?

Ну это есть один из методов решения проблемы. Так работают проксификаторы, о которых говорил TOM_RUS.

Просто ясно одно: без лоадера для клиента WoW в BN2 не обойтись.

Цитата:

Сообщение от Chesterfield (Сообщение 4060)
ЗЫ: Близзы старую систему аутификации ещё не снесли?

Почти все считают, что её снесут в Катаклизме

GriffonHeart 09.04.2010 02:33

Я думаю не снесут для совместимсоти со старыми клиентами :)

vedmysh 09.04.2010 06:51

Цитата:

Сообщение от Chesterfield (Сообщение 4060)
Костыли для клиента не есть хорошо.

ЗЫ: Близзы старую систему аутификации ещё не снесли?

Ну это смотря какие костыли. Инжектировать код в рантайме прямо в исполняемую секцию процесса да, не хорошо. Хотя без этого иногда не обойтись. А вот подключить к процессу свою dll и подменить в IAT адрес функции на себя это совершенно другое. Первое в windows происходит повсеместно и разными способами. Взять тот же fraps. Который кстати ни один античит не трогает. Второе то, что по сути делает лоадер ос. Тем более я так понимаю сейчас без 'костылей' никак.

tempura 09.04.2010 13:33

Цитата:

Сообщение от GriffonHeart (Сообщение 4099)
Я думаю не снесут для совместимсоти со старыми клиентами :)

Апдейт старых клиентов для изменения системы аутентификации - дело элементарное. Вспомни переход на ВотЛК - в старом клиенте ТВС тогда появился порт Штормвинда, а клиент остался старым.

TOM_RUS 09.04.2010 13:59

Цитата:

Сообщение от GriffonHeart (Сообщение 4099)
Я думаю не снесут для совместимсоти со старыми клиентами :)

Какими еще старыми клиентами? На оффе у всех одна и та же версия, поэтому ни о какой обратной совместимости не может быть и речи.

GriffonHeart 09.04.2010 15:25

Под старыми клиентами я имел ввиду клиент версий 1.x и 2.x. Ведь залогинившись на логон-сервер по старому протоколу - они будут качать wow-paptch.mpq, в котором будет давлоадер апдейта.
Конечно, эту проблему они могут полностью отдать Лаунчеру, но всё же.....

tempura 09.04.2010 16:11

Не, вроде бы все равно не прокатывает...
Вход на старый логон сервер - загрузка патчей, после всех апдейтов - вход уже на BN сервер.
вот, кстати, примером: _http://80.239.148.130/update/PatchSequenceFile.txt

LordJZ 09.04.2010 17:08

А от того, что клиенты старых версий коннектятся по старой системе авторизации, наличие кода для старой системы в новых версиях клиента не зависит...


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

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