Логотип игрового форума RF-Cheats.ru    
Новости онлайн игр Правила форума Чёрный рынок Реклама и привилегии Гаранты Арбитраж

Вернуться   Чит портал RF-Cheats.ru - форум читеров и ботоводов > > > >

Статьи о Rising Force

: Статьи описывающие те или иные особенности, фишки игры RFO.
Читы и обход фроста для RF Online без хайдаБоты и читы для Perfect World бесплатно без хайдаМоды и читы для World of Tanks (WoT) бесплатно без хайдаМоды и читы для Armored Warfare бесплатно без хайдаБоты и читы для DOTA 2 бесплатно без хайдаБоты и читы для Black Desert Online бесплатно без хайдаЧиты на ArcheAge бесплатно без хайдаЧиты для Warface бесплатно без хайдаВзлом ВКонтакте и ОдноклассниковСписок разделов со всеми играмиЧиты для онлайн игр



Ответ
 
Опции темы
Старый 03.07.2008, 10:26   #1
dark
Владимир Владимирович
Аватар для dark
OFFLINE
Регистрация: 09.04.2007
Сообщений: 970
Благодарностей:
35,042 всего
Мнения: + 24287
Репутация: 111789
Отправить сообщение для dark с помощью ICQ Отправить сообщение для dark с помощью Skype™

Читаем чужие приваты и кое-что ещё (без хайда)


В хакерских кругах довольно широко известен баг, называемый memory-leak. На самом деле это название может означать два типа багов:
1. исчерпание свободной памяти
2. возможность читать фрагменты памяти приложения (или ядра :)) В нашем случае, под memory-leak я подразумеваю второй пункт, но в роли приложения выступает сервер.
Начнём с азов программирования. Данные в пакетах передаются в бинарном виде (в том смысле, что не в ascii), поэтому для работы с ними используются сишные функции для работы с блоками памяти:
memcpy, memset, memcmp и memmove
Дело в том, что размеры некоторых пакетов в RFO могут варьироваться (только их мало, кстати). Этот момент и вопрос оптимизации привёл к тому, что разработчики Rising Force Online не проверяют длину пакетов при их обработке. Этот момент на самом деле потенциально опасен и может привести к утечкам памяти и нестабильности работы сервера.
Утверждение об отсутствие проверки длины мы можем легко проверить. Пошлём пакет на передвижение персонажа (как надо, в закодированном виде), но обрежем на, пускай, 4 байта. И сервер нас не отключит, напротив - мы получим ответ, что невозможно двинуться в это место. Это свидетельствует о том, что координата Z, которая идёт в пакете последней и которую мы обрезали, всё равно приняла какое-то значение. А значние это - кусочек памяти RFO-сервера, который находиться за пределами вашего пакета! Рассмотрим пример. Приблизительно так в RFO-сервере может быть реализована обработка пакета на передвижение:

Код:
void ParseCharacterMovePacket(int characterID, char *packet) {
	short int x = 0, y = 0, z = 0;

	memcpy(&x, packet, 2);
	memcpy(&y, packet + 2, 2);
	memcpy(&z, packet + 4, 2);

	ProcessMoving(characterID, x, y, z);

	return;
}
Разумеется, в RFO механизм реализован по-другому, но в этом коде наглядно показано, как из пакета (кстати, в данном случае предполагается, что он попадает в функцию расшифрованным) берутся координаты. А теперь представим, что длина пакета 4 байта, а не 6! В таких условия в переменную "z" попадут два байта, которые находятся после x и y координат в пакете (выделенная функция). Что именно там может оказаться предугадать крайне сложно, с учётом отсутствия сорсов RFO-сервера.
Если же в RFO-сервере где-то вместо memcpy используется memmove, то это однозначно приведёт к падению сервера.

А теперь поговорим о том, как мы можем это использовать. Как вы думаете, как сервер обрабатывает пакет на приват? Очень просто! Для примера мы шлём такой пакет на приват:
Цитата:
0x00 | 20 00 02 03 61 61 61 00 00 00 00 00 00 00 00 00
0x10 | 00 00 00 00 00 09 3a 20 62 00 00 00 00 00 00 00
Синим помечен ник получателя
Зелёным отправляемое сообщение (": b")
Красным - длина сообщения с учётом длины своего ника (ника отправителя)
Остальные данные в контексте данной статьи нас не интересуют
Сервер берёт из него ник адресата, определяет его ID, тупо копирует сообщение в новый пакет и шлёт адресату:
Цитата:
0x00 | 21 00 02 0a 02 FF FF FF FF 62 62 62 00 00 00 00
0x10 | 00 00 00 00 00 00 00 00 00 00 00 00 03 3a 20 62
0x20 | 00
Зелёным отмечено ID автора сообщения (специально изменено на FF..)
Синим - ник отправителя
Красным - длина сообщения (обратите внимание, уже без учёта длины ника)
Коричневым - сообщение
А теперь подумаем, каким же образом он копирует сообщение? Обратите внимание на байт, помеченный красным. Это длина сообщения, которое шлёт клиент. Причём, очень важно отметить, что это целиковая длина - с учётом ника, пробела, двоеточия и сообщения. О чём это говорит? А о том, что сервер берёт это значение, выделяет блок памяти равный длине этого сообщения +1. И копирует туда сообщение через strncpy, memcpy или свою собственную функцию.
А что будет, если мы обрежем этот пакет (уберём из него сообщение), но поставим какую-нибудь большую длину? Правильно, в следствие отсутствия проверок длины, сервер выделит нужный кусок памяти, но скопированы в него будут те данные, которые идут в памяти RFO-сервера после пакета. Ну и отправит его нам :) Вот пример такого пакета:
Цитата:
0x00 | 16 00 02 03 61 61 61 00 00 00 00 00 00 00 00 00
0x10 | 00 00 00 00 00 FF
Исходя из того, что смещение до данных в пакетах данного типа всегда постоянное, сообщение будет копироваться как-нибудь так:
Цитата:
char *message = (char *)malloc(packet[21] + 1); // 21 - смещение до длины сообщения
memcpy(message, packet + 22, packet[21]); // копируем несуществующее сообщение из пакета
А на месте packet + 22 сообщения нет. Поэтому будут скопированы те данные, которые есть =)
Таким образом мы можем просматривать рандомные кусочки памяти RFO-сервера. В них может быть всё - начиная от Логинов и паролей к чужим аккаунтам, заканчивая приватами (причём вне зависимости от расы :)). Вот скриншоты того, как я отлавливал чужие приваты (только зарегистрированные на форуме пользователи могут видеть скриншоты):







Я не приветствую воровство аккаунтов, поэтому развивать тему 4-го скриншота не буду.

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

И последнее, развивая тему memory-leak, хочу вернуться к серверному пакету на получение приватного сообщения (02 0a 02). В процессе изучения протокола RFO я стал замечать, что иногда пакет содержит непонятный мусор. Вот пример:
Цитата:
0x00 | 24 00 02 0a 02 FF FF FF FF 61 61 61 61 61 61 61
0x10 | 61 61 00 00 d4 f3 0e 41 01 00 01 00 06 3a 20 62
0x20 | 62 62 62 00
Всё, что в данном пакете отмечено цветом - место под ник. Но реальный ник персонажа короткий (9 байт) и отмечен синим цветом. А что же такое помечено красным? В идеале, это место полностью должно быть забито нулями. Откуда же там беруться посторонние данные? Тут я вижу два варианта:
1. память под пакет выделяется, но не очищается
2. копирование ника в пакет происходит через функцию для работы с блоками памяти. Например:
Цитата:
Код:
char nick[] = "mynickname";
memcpy(packet, nick, 18);
Длина ника всего-лишь 10 байт, а копируем в пакет все 18.
Так или иначе опять в пакет попадают данные из памяти RFO-сервера со всеми вытекающими последствиями...

ЗЫ. не сочтите за рекламу ( :))) ), но всё вышеописанное было реализовано через бота - он слал описанный пакет, я через клиент на другом персонаже получал приваты.

При копировании статьи на другие сайты, просьба оставлять копирайты в виде ссылки на оригинал.

Последний раз редактировалось dark; 03.07.2008 в 11:52.

Создание читов на заказ | Правила форума

Я не оказываю услуги гаранта!
База данных кидал: blacklist.rf-cheats.ru
Обязательно проверяйте человека через чёрный список прежде чем совершать с ним сделку.
 
Ответить с цитированием
Сказали спасибо:
Sound3D (13.12.2017), g00dw1n (20.07.2017), Euphoria (27.01.2010), Lone (19.01.2010), Wolandemort (08.05.2009), Zadohlik (22.11.2008), Недоступно (12.08.2008)


Старый 04.07.2008, 05:01   #2
n1fr1t
Модератор раздела Requiem Online
Аватар для n1fr1t
OFFLINE
Регистрация: 14.11.2007
Возраст: 31
Сообщений: 43
Благодарностей:
304 всего
Мнения: + 586
Репутация: 1339
Отправить сообщение для n1fr1t с помощью ICQ Отправить сообщение для n1fr1t с помощью Skype™

Перечитал пару раз статью, загрузил два окна офа, поставил записывать впе на первое окно, написал второму, взял пакет, стёр само сообщение ( брал также как и в статье ": b" ), поставил длину 255 ( FF ) , послал, ничего не произошло.. Опять послал , опять ничего не произошло ..
Непойму в чом косяк то ..
Вот пакет :
Код:
27 00 02 03 74 73 65 74 74 73 65 74 74 73 65 74
 00 00 00 00 00 FF 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00
Добавлено через 14 минут
Позже пробовал с длинной 100 и 225, отправлялось и приходило пустое сообщение, а дальше опять ничего не происходит..

Последний раз редактировалось n1fr1t; 04.07.2008 в 05:16. Причина: Добавлено сообщение
 
Ответить с цитированием
Старый 04.07.2008, 07:43   #3
xXRFXx
Гость
Аватар для xXRFXx
Сообщений: n/a
Благодарностей:
0 всего

Сразу видно Дарк защитил диплом - появилось свободное время.
Дарк ты уже расшифровал небойсь метод кодировки с 4-го скрина? И еще вопрос идет перехват (вследствии чего получатель не получит ПМ, происходит не memcpy, а memcut) или рандомное выдергивание и памяти все таки?

Последний раз редактировалось xXRFXx; 04.07.2008 в 07:58.
 
Ответить с цитированием
Старый 04.07.2008, 11:09   #4
Sergion
Постоялец
Аватар для Sergion
OFFLINE
Регистрация: 06.05.2007
Сообщений: 138
Благодарностей:
192 всего
Мнения: + 775
Репутация: 1160
Отправить сообщение для Sergion с помощью ICQ Отправить сообщение для Sergion с помощью Skype™

Цитата:
Сообщение от xXRFXx Посмотреть сообщение
Дарк ты уже расшифровал небойсь метод кодировки с 4-го скрина?
Дарк его давно знал =)) См. его статью про кодиовку логина и пароля для авторизации или статью Vogel'а "пишем свой лоадер".
 
Ответить с цитированием
Старый 04.07.2008, 11:11   #5
lucker2lucky
Гость
Аватар для lucker2lucky
Сообщений: n/a
Благодарностей:
0 всего

я так понимаю там пасс на одном из скринов в md5 :) тока откуда он там взялся, и почему
 
Ответить с цитированием
Старый 04.07.2008, 11:53   #6
n1fr1t
Модератор раздела Requiem Online
Аватар для n1fr1t
OFFLINE
Регистрация: 14.11.2007
Возраст: 31
Сообщений: 43
Благодарностей:
304 всего
Мнения: + 586
Репутация: 1339
Отправить сообщение для n1fr1t с помощью ICQ Отправить сообщение для n1fr1t с помощью Skype™

Цитата:
Сообщение от lucker2lucky Посмотреть сообщение
я так понимаю там пасс на одном из скринов в md5 :) тока откуда он там взялся, и почему
Цитата:
сервер выделит нужный кусок памяти, но скопированы в него будут те данные, которые идут в памяти RFO-сервера после пакета.
Написано ведь)
Народ в маём случае, что нетак зделал ?
 
Ответить с цитированием
Старый 04.07.2008, 15:28   #7
JEY
Старая гвардия
Аватар для JEY
OFFLINE
Регистрация: 12.05.2008
Сообщений: 466
Благодарностей:
1,123 всего
Мнения: + 3164
Репутация: 3544
Отправить сообщение для JEY с помощью ICQ Отправить сообщение для JEY с помощью Skype™

Былобы полезно внедрить ее в рудокопа! т к качаешся ты гденить а рядом стукачек какойнить качается, и он хоп ГМу намылил, а ты увидел и осознал то что нада сматываться.

ICQ: 751228
Skype: Jeye51
E-Mail: Jey-n70@ya.ru


Научу кидать людей на деньги. Оплата: 50% до обучения, 50% после.
 
Ответить с цитированием
Старый 04.07.2008, 15:44   #8
Noster
Постоялец
Аватар для Noster
OFFLINE
Регистрация: 24.12.2007
Сообщений: 139
Благодарностей:
244 всего
Мнения: + 1563
Репутация: 735

Цитата:
Сообщение от jey Посмотреть сообщение
Былобы полезно внедрить ее в рудокопа! т к качаешся ты гденить а рядом стукачек какойнить качается, и он хоп ГМу намылил, а ты увидел и осознал то что нада сматываться.
Прости, но это бред :11: Прочитай заного,
Цитата:
сервер выделит нужный кусок памяти, но скопированы в него будут те данные, которые идут в памяти Rfo-сервера после пакета.
Каим образом он перехватит именно то сообщение, о котором ты говоришь
P.S. Но если честно я прав только если никаким способом нельзя искать в памяти сервера))). Хотя скорее всего речь опять пошла о нерельных вещах =)
 
Ответить с цитированием
Старый 04.07.2008, 15:56   #9
dark
Владимир Владимирович
Аватар для dark
OFFLINE
Регистрация: 09.04.2007
Сообщений: 970
Благодарностей:
35,042 всего
Мнения: + 24287
Репутация: 111789
Отправить сообщение для dark с помощью ICQ Отправить сообщение для dark с помощью Skype™

Цитата:
Сообщение от Noster Посмотреть сообщение
Прости, но это бред :11: Прочитай заного,

Каим образом он перехватит именно то сообщение, о котором ты говоришь
P.S. Но если честно я прав только если никаким способом нельзя искать в памяти сервера))). Хотя скорее всего речь опять пошла о нерельных вещах =)
Ну да, искать что-то только вручную, как делал я) то есть дампишь эти кусочки памяти и анализируешь их визуально на предмет наличия читабельного текста или чего-то вкусного :))

Цитата:
Сообщение от xXRFXx Посмотреть сообщение
Сразу видно Дарк защитил диплом - появилось свободное время.
Дарк ты уже расшифровал небойсь метод кодировки с 4-го скрина? И еще вопрос идет перехват (вследствии чего получатель не получит ПМ, происходит не memcpy, а memcut) или рандомное выдергивание и памяти все таки?
не понял тебя)

Создание читов на заказ | Правила форума

Я не оказываю услуги гаранта!
База данных кидал: blacklist.rf-cheats.ru
Обязательно проверяйте человека через чёрный список прежде чем совершать с ним сделку.
 
Ответить с цитированием
Старый 04.07.2008, 16:01   #10
JEY
Старая гвардия
Аватар для JEY
OFFLINE
Регистрация: 12.05.2008
Сообщений: 466
Благодарностей:
1,123 всего
Мнения: + 3164
Репутация: 3544
Отправить сообщение для JEY с помощью ICQ Отправить сообщение для JEY с помощью Skype™

Дарк а ты тож считаешь что я бред написал?

ICQ: 751228
Skype: Jeye51
E-Mail: Jey-n70@ya.ru


Научу кидать людей на деньги. Оплата: 50% до обучения, 50% после.
 
Ответить с цитированием
Ответ


Опции темы

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

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

Быстрый переход

Мир танков | Проект "Армата" | ArcheAge | Black Desert | РФ Онлайн | Айон | Майнкрафт | Браузерные игры
Элдер скролс | Р2 Онлайн | Реквием Онлайн | ПУБГ | Роял Квест | ГТА Санадреас | Контра | Дота 2
Мир кораблей | Лост Арк | Arma2 DayZ mod | The War Z | Карос: Начало | Tera Online
Читы для всех Онлайн-игр