Русский / Russian English / Английский

Сейчас на форуме: rmn (+2 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS ·

 eXeL@B —› Основной форум —› Помогите с шифрованием
. 1 . 2 . >>
Посл.ответ Сообщение

Ранг: 3.0 (гость)
Статус: Участник

Создано: 1 февраля 2007 04:34 New!
Цитата · Личное сообщение · #1

Помогите узнать алгоритм шифрования.
Все данные получил снифером. На какой ключ не знаю. Алгоритм шифрования симметричный (я так думаю)
Сначала идёт

Логин
Пароль
Затем пакет, который посылается серверу (первые 2 байта — размер пакета, затем ещё 2 байта — тип пакета, затем логин и пароль (каждый по 12 символов максимум))
По идее ключ высылается в пакете, который приходит до этого.

1
1
0x0000 1F 00 15 03 C2 F1 F1 F1-F1 F1 F1 F1 F1 F1 F1 F1
0x0010 F1 C2 F1 F1 F1 F1 F1 F1-F1 F1 F1 F1 F1 F1 00

2
2
0x0000 1F 00 15 03 ED DF DF DF-DF DF DF DF DF DF DF DF
0x0010 DF ED DF DF DF DF DF DF-DF DF DF DF DF DF 00

11
11
07 00 15 0D 01 66 01
0x0000 1F 00 15 03 5A 5A 6B 6B-6B 6B 6B 6B 6B 6B 6B 6B
0x0010 6B 5A 5A 6B 6B 6B 6B 6B-6B 6B 6B 6B 6B 6B 00

22
22
07 00 15 0D 03 D9 01
0x0000 1F 00 15 03 EA EA D8 D8-D8 D8 D8 D8 D8 D8 D8 D8
0x0010 D8 EA EA D8 D8 D8 D8 D8-D8 D8 D8 D8 D8 D8 00

11
11
0x0000 1F 00 15 03 10 10 21 21-21 21 21 21 21 21 21 21
0x0010 21 10 10 21 21 21 21 21-21 21 21 21 21 21 00

22
22
0x0000 1F 00 15 03 E4 E4 D6 D6-D6 D6 D6 D6 D6 D6 D6 D6
0x0010 D6 E4 E4 D6 D6 D6 D6 D6-D6 D6 D6 D6 D6 D6 00

1234567890ab
111111
0x0000 1F 00 15 03 5A 5B 54 55-56 57 50 51 52 59 0A 0B
0x0010 69 5A 5A 5A 5A 5A 5A 69-69 69 69 69 69 69 00

Затем посмотрел пакет, который присылает сервер.

Вот информация снифера.
Логин — 1
Пароль — 1
Во всех попытках

Первый пакет по идее содержит ключ, на который будет шифроваться пакет. Формат пакета : первый 2 байта — размер, вторые 2 байта — тип пакета, последние 3 байта — (возможно) ключ шифрования

Второй пакет — пакет с логином и паролем (первые 2 байта — размер пакета, затем ещё 2 байта — тип пакета, затем логин и пароль (каждый по 13 символов максимум))

0x0000 07 00 15 0D 04 5F 03

0x0000 1F 00 15 03 54 67 67 67-67 67 67 67 67 67 67 67
0x0010 67 54 67 67 67 67 67 67-67 67 67 67 67 67 00


0x0000 07 00 15 0D 04 E7 02

0x0000 1F 00 15 03 DC EF EF EF-EF EF EF EF EF EF EF EF
0x0010 EF DC EF EF EF EF EF EF-EF EF EF EF EF EF 00


0x0000 07 00 15 0D 00 59 02

0x0000 1F 00 15 03 6E 5D 5D 5D-5D 5D 5D 5D 5D 5D 5D 5D
0x0010 5D 6E 5D 5D 5D 5D 5D 5D-5D 5D 5D 5D 5D 5D 00


0x0000 07 00 15 0D 03 09 01

0x0000 1F 00 15 03 39 08 08 08-08 08 08 08 08 08 08 08
0x0010 08 39 08 08 08 08 08 08-08 08 08 08 08 08 00


0x0000 07 00 15 0D 00 D9 01

0x0000 1F 00 15 03 EE DD DD DD-DD DD DD DD DD DD DD DD
0x0010 DD EE DD DD DD DD DD DD-DD DD DD DD DD DD 00

Ранг: 214.1 (наставник)
Статус: Участник

Создано: 1 февраля 2007 05:30 New!
Цитата · Личное сообщение · #2

довольно не просто, но опред. закономерности просматриваются. тебе после нужно найти пасс на логин?

Ранг: 3.0 (гость)
Статус: Участник

Создано: 1 февраля 2007 05:43 New!
Цитата · Личное сообщение · #3

Нет.
Это мне нужно для написания брута. Эмуляция клиента . Только как шифруется логин и пасс в пакете - не знаю.

Ранг: 6.9 (гость)
Статус: Участник

Создано: 1 февраля 2007 11:01 New!
Цитата · Личное сообщение · #4

Припомню:
N xor N = 0
N xor 0 = N
B xor (A xor B) = A
Предположение - стринги дополняются нулями. Тогда сразу получаем маску для xor. Рассматрываем все примеры.
C2 F1 F1 -> C2 xor F1 = 31 ('1')
ED DF DF -> ED xor DF = 31 ('1')
5A 5A 6B 6B -> 5A xor 6B = 31 ('1')
EA EA D8 D8 -> EA xor D8 = 32 ('2')
10 10 21 21 -> 10 xor 21 = 31 ('1')
E4 E4 D6 D6 -> E4 xor D6 = 32 ('2')
5A 5B 54 55-56 57 50 51 52 59 0A 0B 69 - здесь уже странно. Подойдем "с другой стороны", попробуем восстановить маску, все еще исходя из того, что имеем дело просто с xor.
5A xor 31 = 6B
5B xor 32 = 69
54 xor 33 = 67
55 xor 34 = 61
56 xor 35 = 63
57 xor 36 = 61
50 xor 37 = 67
51 xor 38 = 69
52 xor 39 = 6B
59 xor 30 = 69
0A xor 61 = 6B
0B xor 62 = 69
И что более интересно, во второй части пакета, где пароль 11111, только 5A и 69. А 5A xor 69 = 33 ('3').
Пока перейдем к второй группе пакетов.
54 67 67 -> 54 xor 67 = 33 ('3')
DC EF EF -> DC xor EF = 33 ('3')
6E 5D 5D -> 6E xor 5D = 33 ('3')
39 08 08 -> 39 xor 08 = 31 ('1')
EE DD DD -> EE xor DD = 33 ('3')

Мое первоначальное предположение, что это простой xor, не оправдалось. Все же думаю, что это какой-то простой алгоритм на базе xor - слишком уж регулярные результаты получились. Наверное, первый пакет определяет параметры алгоритма. Если есть еще данные, неплохо бы и с более длинными стрингами, а также и с первым пакетом, может, и дойдем до чего-нибудь.

Ранг: 3.0 (гость)
Статус: Участник

Создано: 1 февраля 2007 11:33 New!
Цитата · Личное сообщение · #5

Вот ещё пакеты. С первым и вторым

abcde12345
abcde12345


0x0000 07 00 15 0D 04 88 03

0x0000 1F 00 15 03 ED EC E3 E2-E1 BD BC B3 B2 B1 8E 8E
0x0010 8E ED EC E3 E2 E1 BD BC-B3 B2 B1 8E 8E 8E 00

addaadda
addaadda


0x0000 07 00 15 0D 04 41 03

0x0000 1F 00 15 03 22 2D 2D 22-22 2D 2D 22 41 41 41 41
0x0010 41 22 2D 2D 22 22 2D 2D-22 41 41 41 41 41 00


abcde12345
abcde12345


0x0000 07 00 15 0D 04 DD 01

0x0000 1F 00 15 03 86 87 88 89-8A D6 D7 D8 D9 DA E5 E5
0x0010 E5 86 87 88 89 8A D6 D7-D8 D9 DA E5 E5 E5 00


xyabmn
xyabmn


0x0000 07 00 15 0D 03 E5 02

Packet #28
0x0000 1F 00 15 03 94 95 8D 8E-99 9A EC EC EC EC EC EC
0x0010 EC 94 95 8D 8E 99 9A EC-EC EC EC EC EC EC 00

bbbaaabbb
bbbaaabbb

0x0000 07 00 15 0D 04 B1 03

0x0000 1F 00 15 03 D3 D3 D3 D2-D2 D2 D3 D3 D3 B1 B1 B1
0x0010 B1 D3 D3 D3 D2 D2 D2 D3-D3 D3 B1 B1 B1 B1 00

bbbaaabbb1
bbbaaabbb1

0x0000 07 00 15 0D 00 CB 00

0x0000 1F 00 15 03 AD AD AD AC-AC AC AD AD AD FC CF CF
0x0010 CF AD AD AD AC AC AC AD-AD AD FC CF CF CF 00


Ранг: 213.9 (наставник)
Статус: Участник
X-Literator

Создано: 2 февраля 2007 14:22 New!
Цитата · Личное сообщение · #6

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


Парень, ты, скорее всего, прав. Может, ксор со сдвигом?
Частотный анализ, как всегда, поможет(?) в таком простом случае.Неплохо было бы какие-нибудь нолики покриптовать, длинную цепочку, тогда посмотрим.

Ранг: 106.3 (ветеран)
Статус: Участник

Создано: 3 февраля 2007 03:29 New!
Цитата · Личное сообщение · #7

Ну а разобрать ехе сервера или клиента не вариант?

Ранг: 310.8 (мудрец)
Статус: Участник

Создано: 3 февраля 2007 07:49 New!
Цитата · Личное сообщение · #8

newbb На самом деле есть более простое предположение - дополнение байтом 0х00
Оно проходит для 2,a,b Если считать что 1 это 0х33, то версия живет и т.д. - надо проверить.
Если пароль длиной 12, то константу ксора достаем из 13-го байта.

Ранг: 3.0 (гость)
Статус: Участник

Создано: 7 февраля 2007 09:25 New!
Цитата · Личное сообщение · #9

Спасибо всем. Разобрался

Ранг: 13.3 (новичок)
Статус: Участник

Создано: 27 мая 2007 10:16 New!
Цитата · Личное сообщение · #10

Я уже 5-ый день сижу и долбаюсь с этим самым алгоритмом, помогите с этой схемой разабраться!

Ранг: 13.3 (новичок)
Статус: Участник

Создано: 27 мая 2007 10:48 New!
Цитата · Личное сообщение · #11

Что я заметил:
Рассмотрим на примере 07 00 15 0D 02 E0 03 и пароля с логином 1 - 1, ( как влияет последний байт 03 я так и не разобрался, есть большая вероятность, что вообще никак)
Первую цыфру второго байта "E" мы не трогаем, важна - вторая "0", я просниферил огромное кол-во пакетов и заметил такие соответствия:
0 0
1 6
2 4
3 2
4 0
5 6
6 4
7 2
8 0
9 6
A 4
B 2
C 0
D 6
E 4
F 2
Это увеличения байтов для "пустых" символов и 13-ого.
Значит "пустой" байт у нас будет E0 + 0 = E0
Получаем:
0x0000 1F 00 15 03 XY E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0
0x0010 E0....
(Пароль отличается от логина лишь перевернотостью байтов)
Далее для пароля и логина 1 есть такая закономерность:
E0 X Y
0 3 7
1 2 6
2 1 5
3 0 4
4 7 3
5 6 2
6 5 1
7 4 0
8 B F
9 A E
A 9 D
B 8 C
C F B
D E A
E D 9
F C 8

Т.е. для E у нас будет X=D, а для 0 Y=7
Таким образом получим
0x0000 1F 00 15 03 D7 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0
0x0010 E0....
Причем для логина 2 меняется только вторая цыфра:
0 6
1 7
2 4
3 5
4 2
5 3
6 0
7 1
8 E
9 F
A C
B D
C A
D B
E 8
F 9
и это будет:
0x0000 1F 00 15 03 D6 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0
0x0010 E0....

вот собсно такие схемы я расписал для
07 00 15 0D [00-04] XX
Но выяснить как завязать здесь XOR так и не удалось. Большая просьба ко всем помочь.

Ранг: 106.3 (ветеран)
Статус: Участник

Создано: 27 мая 2007 14:53 New!
Цитата · Личное сообщение · #12

Ну так а что мешает программу в отладчик засунуть?

Ранг: 13.3 (новичок)
Статус: Участник

Создано: 27 мая 2007 19:12 New!
Цитата · Личное сообщение · #13

я абсолютный новичек в этом деле... что я могу там увидеть?

Ранг: 106.3 (ветеран)
Статус: Участник

Создано: 27 мая 2007 20:33 New!
Цитата · Личное сообщение · #14

Ну так выложи здесь, если тайны не представляет, и попорси не новичков посмотреть.

Ранг: 13.3 (новичок)
Статус: Участник

Создано: 27 мая 2007 21:57 New!
Цитата · Личное сообщение · #15

да секрета тут нету, просто качать долго этот клиент игрушки - RfOnline, скачать его можно [url=тута]ftp://ftp.theabyss.ru/rf/G4e2p1.rar[/url]
там какбы сервер представляет из себя систему из нескольких компов - loginserver и gameserver, в протоколе общения и с тем и с тем я уже вроде разобрался, там в двух местах имеется шифрование: авторизация на один и другой, но на первый я впринцепи написал авторизацию, но только когда логин и пароль содержат символы '1' и '2', а дальше логин сервер передает 40-байтовый код из которого при авторизации на гейм сервер складывается и передается 16-байтовый, вот с ним вообще проблема,хотя те кто уже разобрались писали ничего сложного...дизассемблер и все дела...ток не дружу я с ним.


Ранг: 467.7 (мудрец)
Статус: Участник
Иной :)

Создано: 27 мая 2007 22:17 New!
Цитата · Личное сообщение · #16

p4s8x
Епать... 1.1 Гига качать? в баню Либо урезать до минимума, либо никто не станет и смотреть даже.

Ранг: 13.3 (новичок)
Статус: Участник

Создано: 27 мая 2007 22:37 New!
Цитата · Личное сообщение · #17

_http://imperial.aqq.ru/pvp.zip
урезаный до 7 МБ, эта фигулина отвечает за логин сервер
аккаунт регится там за 3 секунды,зарегеный:
логин 11211 пароль 12221
при вводе логина и пароля клиент шлет первый пакет- запрос на логин, ему приходит пакет с ключем и он посылает шифрованый с этим ключем, вот тут каменьто и зарыт(


Ранг: 467.7 (мудрец)
Статус: Участник
Иной :)

Создано: 27 мая 2007 23:03 · Поправил: [HEX] New!
Цитата · Личное сообщение · #18

Упс... не тот файл стартовал.

Ранг: 13.3 (новичок)
Статус: Участник

Создано: 27 мая 2007 23:10 · Поправил: p4s8x New!
Цитата · Личное сообщение · #19

на данном этапе только RFPVP.exe нужно, все что дальше вытекает из этого файла

P.s. хотел удалить это сообщение
выскочило: Вы не можете отправить "пустое" сообщение! Это ИМХО никому не интересно.
Улыбнуло


Ранг: 467.7 (мудрец)
Статус: Участник
Иной :)

Создано: 28 мая 2007 00:44 New!
Цитата · Личное сообщение · #20

ну вот в твоём кострированом дистрибе та смая процедурка где вся каша и варится по шифрованию логина и пароля
00440048 |. E8 13000000 CALL RFpvp.00440060 ; SendLoginAccept
разбираться уже поздно, так что сам ковыряй.


Ранг: 467.7 (мудрец)
Статус: Участник
Иной :)

Создано: 28 мая 2007 01:45 · Поправил: [HEX] New!
Цитата · Личное сообщение · #21

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

Дальше шлем пакет на выдачу ключа/авторизацию (констант):
05 00 15 0C FF

Приняли константы из пакетика прилетевшего с сервака:
07 00 15 0D 03 D5 01
где содержимое пишется в соответствующие регистры
CL = 03
AL = 01D5
потом
CL = CL+1
AL = AL+3


/*440031*/ MOV CX,WORD PTR DS:[EAX+1]
/*440035*/ MOV DL,BYTE PTR DS:[EAX]
/*440037*/ ADD CX,3
/*44003B*/ INC DL
/*44003D*/ PUSH ECX // AL (word) - константа
/*44003E*/ PUSH EDX // CL (байт) - константа


Ну и самая основная процедурка:
Используются CL, AL и строка с логином и паролем

LEA ESI,DWORD PTR SS:[ESP+10] // Ссылка на строку login.....[x12 байт]pass......[x12 байт]
MOV EDI,1B // 27 байт шифруем (нахрина 27 байт не понятно, все равно потом чуть далее 27 байт затирется нулем)
L002:
MOV DL,BYTE PTR DS:[ESI]
ADD DL,CL
XOR DL,AL
MOV BYTE PTR DS:[ESI],DL
INC ESI
DEC EDI
JNZ L002


/*4400ED*/ LEA ESI,DWORD PTR SS:[ESP+10]
/*4400F1*/ MOV EDI,1B
/*4400F6*/ MOV DL,BYTE PTR DS:[ESI]
/*4400F8*/ ADD DL,CL
/*4400FA*/ XOR DL,AL
/*4400FC*/ MOV BYTE PTR DS:[ESI],DL
/*4400FE*/ INC ESI
/*4400FF*/ DEC EDI
/*440100*/ JNZ SHORT RFpvp.004400F6


Всё.
На выходе в ESI готовый поксоренный логин и пароль.

Ранг: 13.3 (новичок)
Статус: Участник

Создано: 28 мая 2007 19:09 New!
Цитата · Личное сообщение · #22

Спасиба БААААльшоЕ. Щас тока нада с ассемблером разобраться и переписать это как-нибудь на дельфи


Ранг: 467.7 (мудрец)
Статус: Участник
Иной :)

Создано: 28 мая 2007 19:48 New!
Цитата · Личное сообщение · #23

p4s8x
на Дельфях пишется в 5 строчек максимум вся функция шифрации (ксоривания).
Там и думать нечего.
каждый байт из строки сначала складывается с CL, а потом ксорится на AL вот и все.

Ранг: 13.3 (новичок)
Статус: Участник

Создано: 28 мая 2007 22:28 New!
Цитата · Личное сообщение · #24

ВОт Теперь СПасибо НАИОГРОМНЕЙШЕЕ) Все работает ну просто МЕГАзамечательно). Щас пойду крутить авторизацию на геймсервере)

Ранг: 13.3 (новичок)
Статус: Участник

Создано: 29 мая 2007 16:49 New!
Цитата · Личное сообщение · #25

Нда... не тут то было: после авторизации на логин сервере, последним пакетом приходит
33 00 15 08 ......
структура его такова a a b b c d d d d e e f f f ... [40xf] ... f f f
a a - длина пакета
b b - тип пакета
c - константа - 0x00.
d d d d - ip-адрес сервера
e e - порт сервера
f f - ключ, который в преобразованном виде служит для авторизации на game-сервере.

этот ключ одно приложение передает другому и в самом начале при заставки оно отсылает пакет "0101"
который имеет следуюущую структуру:
a a b b c c c c d d d ... [16xd] ... d d d e e e e f g g g ... [32xg] ... g g g
a a - длина пакета
b b - тип пакета
c c c c - уникальный номер аккаунта
d d - ключ, сгенерированный на основе пакета [15 08] логин-сервера
e e e e - константа - 0x01edf700
f - константа - 0x00
g g - константный md5-хэш длиной 32 байта - e1dd28790cd983e1d8e7a94d20cfbe0

вот как из 1508 [fx40] генерируется 0101 [dx16] никак не могу разгодать, есть подазрение, что [c c c c - уникальный номер аккаунта(на конкретном аккаунте никогда не меняется)], както также связан с этим шифрованием,
сжал до пределов _http://imperial.aqq.ru/kg4.zip
логин belggg
пароль 123654
если кто возьмется помочь буду очень благодарен!
з.ы. icq 67672060.


Ранг: 467.7 (мудрец)
Статус: Участник
Иной :)

Создано: 29 мая 2007 22:20 New!
Цитата · Личное сообщение · #26

p4s8x
Может сразу и бота написать? Возьми оллю или иду и сам посмотри, что и как формируется. А то так и будешь бегать сюда за каждым шагом.

Ранг: 13.3 (новичок)
Статус: Участник

Создано: 30 мая 2007 17:42 New!
Цитата · Личное сообщение · #27

работаю в olly, открываю rfo.exe, но никак не могу понять некоторых приколов:
вопервых, то что написано в CPU до загрузки и после - конкретно отличается
нажимаю RUN, перекючается с некоторых модулей, торможу, когда возвращается к rfo, в 0060F496 встречаются push 1 push 0 push 0 push 0, начинаю медленно через F8 выполнять везде где Call... ставлю брейкпоинты в надежде отловить посылку пакета, но тогда он у меня просто начинает бесконечно ходить по кругу ничего при этом не отправляя... поставил брейкпоинт в одном только месте нажал F9 и сразу и пакет и все там отправилось...
и если смотреть RFOnline.exe то там четко видно как в ESI попадае логин и пароль и ксорится там, а тут ничего конкретного нету.
[HEX] пишет:
Может сразу и бота написать? Возьми оллю или иду и сам посмотри, что и как формируется. А то так и будешь бегать сюда за каждым шагом.

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

Ранг: 13.3 (новичок)
Статус: Участник

Создано: 31 мая 2007 12:10 New!
Цитата · Личное сообщение · #28

Почему когда я ставлю брейпоинты там на 0060F2F2, он не останавливается на них?


Ранг: 467.7 (мудрец)
Статус: Участник
Иной :)

Создано: 31 мая 2007 13:49 New!
Цитата · Личное сообщение · #29

p4s8x
ХЗ че у тебя там твориться. Ты бы для начала ченить почитал бы как работать с оллей, а то небось лезешь туда куда не стоит лезть.

Если расматривать тот комплект который ты кидал, то там RFpvp.exe это лишь оболочка для авторизации и старта самой игры (RFru.exe). Так если ты собрался смотреть саму игру как и что там обменивается, то для начала хоть посмотри с помощью PEiD упакована она или нет. Если какие то файлы упакованы, то не исключенно что в них есть антиотладочные приемы которые и не дадут тебе нормально смотреть код.
Так что учи матчасть лучше.

Ранг: 13.3 (новичок)
Статус: Участник

Создано: 1 июня 2007 11:30 New!
Цитата · Личное сообщение · #30

Я вот что выяснил: Лаунчер RFPVP.exe(RFAbbys.exe) сохраняет авторизационные данные в System\DefaultSet.tmp
00000000:63 de 5f 32 32 23 62 65 6c 67 67 67 00 00 00 00 cЮ_22#belggg....
00000010:00 00 00 28 b3 64 6e 31 e3 aa a6 0e 43 ef 09 95 ...(іdn1гЄ¦.Cп.•
00000020:53 5b 93 a4 13 2e ae 3a 4b bd 4b 9d S[“¤..®:KЅKќ
Причем меняется с каждым его запуском только вот эта часть 31 e3 aa a6 0e 43 ef 09 95 | 53 5b 93 a4 13 2e ae как раз 16 байт, т.е. еще в лаунчере происходит первое преобразование ключа от пакета "1508"
из 40 байт в 16. А в самой RFru.exe(RFO.exe) происхожит второе преобразование этого ключа в пакете 0101 и отправляется на сервер.

С дизассемблерами у меня чет ничего не получается перечитал кучу статей по olly, потренился на crackme какие нашел все получились... а тут засада прям какаято.
Я наверное даж готов уже заплатить тому, кто поможет найти конечный алгоритм шифрования....
. 1 . 2 . >>
 eXeL@B —› Основной форум —› Помогите с шифрованием

Видеокурс ВЗЛОМ