![]() |
eXeL@B —› Основной форум —› Помогите с шифрованием |
. 1 . 2 . >> |
Посл.ответ | Сообщение |
|
Создано: 01 февраля 2007 04:34 · Личное сообщение · #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 ![]() |
|
Создано: 01 февраля 2007 05:30 · Личное сообщение · #2 |
|
Создано: 01 февраля 2007 05:43 · Личное сообщение · #3 |
|
Создано: 01 февраля 2007 11:01 · Личное сообщение · #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 - слишком уж регулярные результаты получились. Наверное, первый пакет определяет параметры алгоритма. Если есть еще данные, неплохо бы и с более длинными стрингами, а также и с первым пакетом, может, и дойдем до чего-нибудь. ![]() |
|
Создано: 01 февраля 2007 11:33 · Личное сообщение · #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 ![]() |
|
Создано: 02 февраля 2007 14:22 · Личное сообщение · #6 newbb пишет: Мое первоначальное предположение, что это простой xor, не оправдалось. Все же думаю, что это какой-то простой алгоритм на базе xor - слишком уж регулярные результаты получились. Парень, ты, скорее всего, прав. Может, ксор со сдвигом? Частотный анализ, как всегда, поможет(?) в таком простом случае.Неплохо было бы какие-нибудь нолики покриптовать, длинную цепочку, тогда посмотрим. ----- Харе курить веники и нюхать клей, к вам едет из Америки бог Шива, и он еврей. ![]() |
|
Создано: 03 февраля 2007 03:29 · Личное сообщение · #7 |
|
Создано: 03 февраля 2007 07:49 · Личное сообщение · #8 |
|
Создано: 07 февраля 2007 09:25 · Личное сообщение · #9 |
|
Создано: 27 мая 2007 10:16 · Личное сообщение · #10 |
|
Создано: 27 мая 2007 10:48 · Личное сообщение · #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 так и не удалось. Большая просьба ко всем помочь. ![]() |
|
Создано: 27 мая 2007 14:53 · Личное сообщение · #12 |
|
Создано: 27 мая 2007 19:12 · Личное сообщение · #13 |
|
Создано: 27 мая 2007 20:33 · Личное сообщение · #14 |
|
Создано: 27 мая 2007 21:57 · Личное сообщение · #15 да секрета тут нету, просто качать долго ![]() там какбы сервер представляет из себя систему из нескольких компов - loginserver и gameserver, в протоколе общения и с тем и с тем я уже вроде разобрался, там в двух местах имеется шифрование: авторизация на один и другой, но на первый я впринцепи написал авторизацию, но только когда логин и пароль содержат символы '1' и '2', а дальше логин сервер передает 40-байтовый код из которого при авторизации на гейм сервер складывается и передается 16-байтовый, вот с ним вообще проблема,хотя те кто уже разобрались писали ничего сложного...дизассемблер и все дела...ток не дружу я с ним. ![]() |
|
Создано: 27 мая 2007 22:17 · Личное сообщение · #16 |
|
Создано: 27 мая 2007 22:37 · Личное сообщение · #17 _http://imperial.aqq.ru/pvp.zip урезаный до 7 МБ, эта фигулина отвечает за логин сервер аккаунт регится там за 3 секунды,зарегеный: логин 11211 пароль 12221 при вводе логина и пароля клиент шлет первый пакет- запрос на логин, ему приходит пакет с ключем и он посылает шифрованый с этим ключем, вот тут каменьто и зарыт( ![]() |
|
Создано: 27 мая 2007 23:03 · Поправил: [HEX] · Личное сообщение · #18 |
|
Создано: 27 мая 2007 23:10 · Поправил: p4s8x · Личное сообщение · #19 |
|
Создано: 28 мая 2007 00:44 · Личное сообщение · #20 |
|
Создано: 28 мая 2007 01:45 · Поправил: [HEX] · Личное сообщение · #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 готовый поксоренный логин и пароль. ----- Computer Security Laboratory ![]() |
|
Создано: 28 мая 2007 19:09 · Личное сообщение · #22 |
|
Создано: 28 мая 2007 19:48 · Личное сообщение · #23 |
|
Создано: 28 мая 2007 22:28 · Личное сообщение · #24 |
|
Создано: 29 мая 2007 16:49 · Личное сообщение · #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. ![]() |
|
Создано: 29 мая 2007 22:20 · Личное сообщение · #26 |
|
Создано: 30 мая 2007 17:42 · Личное сообщение · #27 работаю в olly, открываю rfo.exe, но никак не могу понять некоторых приколов: вопервых, то что написано в CPU до загрузки и после - конкретно отличается нажимаю RUN, перекючается с некоторых модулей, торможу, когда возвращается к rfo, в 0060F496 встречаются push 1 push 0 push 0 push 0, начинаю медленно через F8 выполнять везде где Call... ставлю брейкпоинты в надежде отловить посылку пакета, но тогда он у меня просто начинает бесконечно ходить по кругу ничего при этом не отправляя... поставил брейкпоинт в одном только месте нажал F9 и сразу и пакет и все там отправилось... и если смотреть RFOnline.exe то там четко видно как в ESI попадае логин и пароль и ксорится там, а тут ничего конкретного нету. [HEX] пишет: Может сразу и бота написать? Возьми оллю или иду и сам посмотри, что и как формируется. А то так и будешь бегать сюда за каждым шагом. Я конечно же пытаюсь сам в перву очередь разобраться и сделать, но этой области касаюсь пока в первые...и результаты соответствующие. ![]() |
|
Создано: 31 мая 2007 12:10 · Личное сообщение · #28 |
|
Создано: 31 мая 2007 13:49 · Личное сообщение · #29 p4s8x ХЗ че у тебя там твориться. Ты бы для начала ченить почитал бы как работать с оллей, а то небось лезешь туда куда не стоит лезть. Если расматривать тот комплект который ты кидал, то там RFpvp.exe это лишь оболочка для авторизации и старта самой игры (RFru.exe). Так если ты собрался смотреть саму игру как и что там обменивается, то для начала хоть посмотри с помощью PEiD упакована она или нет. Если какие то файлы упакованы, то не исключенно что в них есть антиотладочные приемы которые и не дадут тебе нормально смотреть код. Так что учи матчасть лучше. ----- Computer Security Laboratory ![]() |
|
Создано: 01 июня 2007 11:30 · Личное сообщение · #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 —› Основной форум —› Помогите с шифрованием |