Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Крокодил ВКонтакте - анализ багов приложения |

30.03.2010, 01:47
|
|
Познавший АНТИЧАТ
Регистрация: 24.06.2008
Сообщений: 1,996
Провел на форуме: 6075534
Репутация:
2731
|
|
Крокодил ВКонтакте - анализ багов приложения
Значит так, сегодня решил покопать эту игрушку. Авторы этого приложения не пожалели 35 000 рублей на специальный домен - kroko.vkontakte.ru, хотя 1 миллион пользователей, наверное, оправдывают цену.
Не туда что-то я пошёл, пожалуй, перейду к анализу приложения.
- Удлинение хвоста Крокодила на N см.
Анализируя запросы и исходники Кроко, я увидел, что после выигрыша, отсылается запрос на api.vkontakte.ru, в котром указывается новая длина хвоста. Пример запроса:
Код:
http://api.vkontakte.ru/api.php?api_id=1709838&value=1000&sig=a32d41491c2717ee135f4747854c64f2&method=putVariable&random=4831976.466812193&key=1402&test_mode=1
Поясню список параметров:- api_id - ID приложения
- value - длина хвоста в миллиметрах
- random - абсолютно случайное число
- test_mode - тестовый режим. Это позволяет тестировать приложение без загрузки его на сайт.
- method - название метода API из общего списка функций. putVariable – записывает значение переменной.
- key - номер переменной, в которой записывается её значение.
- sig - это именно то, что нам нужно сгенерировать (найти), и над этим придется потрудится. sig - подпись, которая создается в целях безопасности. Параметр sig равен md5 от конкатенации следующих строк:
- viewer_id – id текущего пользователя, переданный SWF посредством flashvars при инициализации.
- пар "parameter_name=parameter_value", расположенных в порядке возрастания имени параметра (по алфавиту).
- секрета приложения api_secret
Приведу пример: в запросе, который я написал выше, параметр sig равен a32d41491c2717ee135f4747854c64f2, тоесть md5 от
Код:
34595285api_id=1709838key=1402method=putVariablerandom=4831976.466812193test_mode=1value=1000api_secret
Вроде-бы все есть, да только одного нету - секретного ключа приложения. Берем в руки SWF Decompiler, открываем в нем флешку Крокодила (далее - Кроко). Находим интересный класс - Const:

Вот и все, секретный ключ приложения у нас: nM27UsOLVI.
Теперь никакого труда не составит сгенерировать sig, а соответственно послать запрос на увеличение длины хвоста в api.vkontakte.ru
Делаем md5 следующей строки:
Код:
YOUR_IDapi_id=1709838key=1402method=putVariablerandom=4831976.466812193test_mode=1value=LENGTHnM27UsOLVI
Изменяемые значение выделены и окрашены в оранжевый цвет, а именно:- YOUR_ID - ваш ID ВКонтакте.
- LENGTH - необходимая длина в миллиметрах.
Получили sig? Отлично. Идем удлинять хвост, переходим по ссылке:
Код:
http://api.vkontakte.ru/api.php?api_id=1709838&value=LENGTH&sig=SIG&method=putVariable&random=4831976.466812193&key=1402&test_mode=1
- LENGTH - необходимая длина хвоста.
Важно: не должна отличатся от той, что была при генерации sig
- SIG - полученный sig.
Обновляем приложение, радуемся 
Важно: пользователь, которому изменяется длина хвоста должен быть залогинен ВК
PS: Тому, кто ничего не понимает в том, что я написал выше написал специальный скрипт, который генерирует ссылку сам: http://hacker.hmarka.net/kroko.php
- Экстрасенсорика или узнаем секретное слово
Эх, моя любопытность Берем в руки HTTPAnalyzer (сниффер (перехватчик) запросом. Жмем Start в нем, после чего в приложении нажимаем "Начать игру". Получаем несколько запросов. Первые два - для получения баннеров рекламы, третий - для кроссдомена, а последний - для получения параметров игры.
Именно он нас интересует. В теле ответа получаем следующее:
Код:
<?xml version="1.0"?><response><word>1079,1084,1088,1082,1082,1084,1091,1092</word><presenterPen>24</presenterPen><count>2</count><sessionId>95799079</sessionId><presenterId>34595285</presenterId><playerIds>34595285,19531510</playerIds><timeToStart>14992</timeToStart></response>
Это ответ в формате XML. То, что между <> и </> - это имя параметра, а то, что между именами - значение. На интересует только одно - word - зашифрованное слово. Но как его расшифровать? Опять берем SWF Decompiler, смотрим функцию расшифровки.

Единственным аргументом этой функции является именно этот word. Далее функция преобразовывает эту строку в массив, разбивая её через запятую. Позже создается цикл от 0 и до количества элементов массива минус 5 (5 последних цифр - мусор, который отбрасывается). В самом цикле переменной _loc_2 присваивается значение конкатенации строк _loc_2 и значение элемента массива _loc_3 с индексом _loc_4 минус _loc_4. Вот такая вот защита от "хакеров", но нам это не страшно Т.к. все обходится элементарно просто. Если закодирован первый символ был 1079, то его раскодирование = String.fromCharCode(1079 - 0), тоесть String.fromCharCode(1079). Второй был 1084, его раскодировка = String.fromCharCode(1084 - 1), тоесть String.fromCharCode(1083), и так далее, с каждым разом увеличивая _loc_4.
PS: Кто ничего не понял - юзает мою тулзу http://hacker.hmarka.net/kroko2.php
Ну, вобщем, все...
Если куда-то копируете, ссылку сюда давайте  И еще мой копирайт 
Последний раз редактировалось mailbrush; 30.03.2010 в 16:39..
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|