Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Социальные сети (https://forum.antichat.xyz/forumdisplay.php?f=133)
-   -   Крокодил ВКонтакте - анализ багов приложения (https://forum.antichat.xyz/showthread.php?t=191651)

mailbrush 30.03.2010 01:47

Крокодил ВКонтакте - анализ багов приложения
 
Значит так, сегодня решил покопать эту игрушку. Авторы этого приложения не пожалели 35 000 рублей на специальный домен - kroko.vkontakte.ru, хотя 1 миллион пользователей, наверное, оправдывают цену.

Не туда что-то я пошёл, пожалуй, перейду к анализу приложения.
  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:
    http://s12.radikal.ru/i185/1003/c2/30c564a24f93.jpg
    Вот и все, секретный ключ приложения у нас: 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


  2. Экстрасенсорика или узнаем секретное слово
    Эх, моя любопытность :) Берем в руки HTTPAnalyzer (сниффер (перехватчик) запросом. Жмем Start в нем, после чего в приложении нажимаем "Начать игру". Получаем несколько запросов. Первые два - для получения баннеров рекламы, третий - для кроссдомена, а последний - для получения параметров игры.

    http://s43.radikal.ru/i102/1003/49/46e931e89a03.jpg

    Именно он нас интересует. В теле ответа получаем следующее:
    Код:

    <?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, смотрим функцию расшифровки.

    http://s001.radikal.ru/i195/1003/ce/70ca7a7eca2b.jpg

    Единственным аргументом этой функции является именно этот 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

Ну, вобщем, все...

Если куда-то копируете, ссылку сюда давайте :) И еще мой копирайт :cool:

steyj 30.03.2010 03:32

Нормаль, а может как нибудь для игры в покер чего ни будь создашь? К примеру видеть карты игрока

tiath 30.03.2010 03:34

steyj а хохо не хуху? )))

steyj 30.03.2010 03:43

Можно и такое в каком конверте

GlooK 30.03.2010 04:25

Руки бы оторвать тому кодеру, кто юзает putVariable в приложениях.

netdimarik 30.03.2010 04:40

ну чтоже ждём когда допишут )) а так респект !)

Zyon 30.03.2010 07:54

Стало интересно, вот только приложение пока я это не юзал))

Assembler 30.03.2010 12:11

Молодца, ай молодца. mailbrush по старой дружбе http://vkontakte.ru/app676982 тоже все перерыл именно этот Sig параметр тоже понял что надо сгенерировать но до сих пор не понял какие параметры в него шить. Помоги... Если что кинь в ЛС. Просто если догадаешься как это уже приват инфо в чистом виде...

regau 30.03.2010 12:37

скинь на vkbugs.ru

Assembler 30.03.2010 12:45

Пусть допишет сначала. Потом если захочет сам скинет. Я бы на его месте по другому бы сделал.

BELbIY 30.03.2010 12:48

Ух ты сработало спс

Assembler 30.03.2010 13:44

Вот от покера

Видимо два запроса отвечают 21 и 22

Вот 21


Вот сам запрос:
Код:

http://pokerex.skillclub.com/Entry.ashx?sig=2178f7f2456053709e3962139cf0e368&pid=9830377&method=max&val=70&salt=12378642&uid=9830377&key=21&auth%5Fkey=a34a0154ced6fe1a96e890f6a1517c60
Вот то что в запросе:
Sig 2178f7f2456053709e3962139cf0e368 - подпись
pid 9830377 мой ид
method max - че делать (метод)
val 70 - фишки
salt 12378642 =)
uid 9830377 мой ид
key 21 номер запроса
auth_key a34a0154ced6fe1a96e890f6a1517c60 - ключ авторизации

Вот 22

Код:

http://pokerex.skillclub.com/Entry.ashx?sig=de09d544e9eb1dc5aa6d5fc1c2880b03&pid=9830377&method=setScore&val=70&salt=10059406&uid=9830377&key=22&auth%5Fkey=a34a0154ced6fe1a96e890f6a1517c60
Sig de09d544e9eb1dc5aa6d5fc1c2880b03 - подпись
pid 9830377 мой ид
method setScore - че делать (метод) - Вот тут поставить счет.
val 70 - фишки
salt 10059406 =)
uid 9830377 мой ид
key 22 номер запроса
auth_key a34a0154ced6fe1a96e890f6a1517c60 - ключ авторизации - Он кстати одинаковый. Ну это и понятно =)

Походу тут мд5 + salt =(

Вот еще можно изменить все свои данные типо имя и т.д.
Режим Аноним

Код:

http://pokerex.skillclub.com/Entry.ashx?sig=d4eac27e295068c606e10de89f9f6a3d&salt=9923647&uid=9830377&method=setLabel&pid=9830377&label=9830377%7C%D0%98%D0%B3%D0%BE%D1%80%D1%91%D0%BA%7C%D0%9B%D0%B8%D1%87%D0%BD%D0%BE%D1%81%D1%82%D1%8C%7C%401cs4398%2E%403%2Fu9830377%2Fc%5Fcc2e1c85%402%7C%401cs4398%2E%403%2Fu9830377%2Fb%5F1fd5d379%402%7C112%7C%7C26%2E1%2E1989%7C%7C%7C2%7C%7C%7C&auth%5Fkey=a34a0154ced6fe1a96e890f6a1517c60
Sig d4eac27e295068c606e10de89f9f6a3d - подпись
pid 9830377 мой ид
method setLabel - че делать (метод) - Вот тут поставить данные о тебе.
salt 9923647 =)
uid 9830377 мой ид
label 9830377%7C%D0%98%D0%B3%D0%BE%D1%80%D1%91%D0%BA%7C% D0%9B%D0%B8%D1%87%D0%BD%D0%BE%D1%81%D1%82%D1%8C%7C %401cs4398%2E%403%2Fu9830377%2Fc%5Fcc2e1c85%402%7C %401cs4398%2E%403%2Fu9830377%2Fb%5F1fd5d379%402%7C 112%7C%7C26%2E1%2E1989%7C%7C%7C2%7C%7C%7C - тут данные обо мне
auth_key a34a0154ced6fe1a96e890f6a1517c60 - ключ авторизации - Он кстати одинаковый. Ну это и понятно =)

Осталось понять как sig подделать.

7on 30.03.2010 14:25

как открыть флешку в SWF Decompiler
не получаетса , смотрел видео как делать, у них там появляется в експлорере кнопка, а у меня её нету(((

Assembler 30.03.2010 14:55

https://www.sothink.com/download/swfcatcher.xpi

Аддон для мозилы.
Далее в инструменты и щелкай по нему.

7on 30.03.2010 15:01

спс большое, но теперь она у меня сохранилась а там всего 9 кб, и нету конст((

Assembler 30.03.2010 15:10

Мда. const есть но secret нет но судя по скрину маил браша че то мы не так делаем. У него название идет не api_wrapper.swf вобщем маилбраш ты где???

Assembler 30.03.2010 15:21

Вобщем надо версию SWF Decompiler 5.4 скачивать
Таблетка


SWF Decompiler V5.4 build 535
Name: Registered
Code: 031U4A-K03QAX-6YDQBB-JTHN2J-2KEUCV-4MNAD0-KT9BVV-QN3B1W-HDJUZA-0AWPT8-6HWBJR-UBZYMK

Скачать от сюда
http://www2.sothink.com/download/swfdec.zip

mailbrush 30.03.2010 16:41

Дописал до конца :)

Цитата:

маилбраш ты где???
В школе был.

ЗЫ: Мб потом поковыряю покер еще...

Assembler 30.03.2010 16:59

Маил браш, слух отпиши Мне в личку ID 9830377

waik 30.03.2010 17:55

Цитата:

Сообщение от mailbrush

Если куда-то копируете, ссылку сюда давайте :) И еще мой копирайт :cool:

Старался и оформлял долго,надеюсь ты одобришь. Кпирайт есть!

хttp://allcheats.ru/t163634/?uri=/t163634-post1942157/#post1942157

StiXy24 30.03.2010 18:02

А по сути что от этого приложения7 Как я понимаю только понты.
mailbrush, против не чего не имею... просто не понимаю почему подняли такое активное обсуждение... вопрос один, реальные деньги на этом поднять можно7 Прочитал мельком, понял тему так, что можно выделится среди других и на этом точка.

Timofa 30.03.2010 18:59

Заморочился парень ))) Эта игруля того не стоит.Я все это же в чарльз с ней делал.Плюс к тому и ручку себе сделал самую дорогую.Мелочь,а приятно )

Assembler 30.03.2010 19:37

Эта нет но при этом есть дофига приложений которые работают по тому же принципу... А это уже абсолютно другая тема. И я знаю как на этом реально можно заработать причем не мало...

Assembler 30.03.2010 19:40

И кстати маилбраш Ты говоришь исходняк разбирать. Как его выковырять то?

ViLKaa 31.03.2010 17:48

в сурскоде страницы ищем 3456234yv823nf*ku4atfifr*324.ZIP
качаем, меняем расширение на swf и декомпилим всякими SWF декомпилерами

Neset 31.03.2010 21:54

Такс...
Покерок ...
Просмотрел сниффер вобщем как такового в запросах нету ничего интересного как в кроко. Хотя может быть и есть просто я недопонимаю но походу sig гдето не там делаетс

В декомпиляторе примерно из интересного нашел следующее тоже не очень понимаю может кто пошарестее посмотрит
Насколько я понимаю это запрос на создание или присоеденение секрета

m_psTransactionsLoader.addSignature(Application.in stance.socialapi.CurrentApiNetworkSecretKey(), Preloader._instance.loaderInfo.parameters.vid);

Щас еще поковыряю мб еще че интересное или сам секрет найду...

Но одно я понял sig добавляется в запрос уже в готовом виде.... и пока хз я не знаю от чего зависит.

Такс может быть это, только если покопатья там несколько видов запроса и каждый выглядить по разному вот один из них
Цитата:

public function addSignature(param1:String, param2:String = "") : void
{
var _loc_4:String = null;
var _loc_3:* = new Array();
for (_loc_4 in m_variables)
{

if (_loc_4.length > 0 && _loc_4 != "sig")
{
_loc_3.push(_loc_4 + "=" + m_variables[_loc_4]);
}
}
_loc_3.sort();
m_variables["sig"] = MD5.encrypt(param2 + _loc_3.join("") + param1);
return;
________________________________

variables["sig"] = generate_signature(request_params, m_apiNetwork.VIEWER_ID, m_apiNetwork.SECRET_KEY)
Ага =) ищу дальше SECRET_KEY


________________________________

Что то нашел но не уверен что то что надо почему их два??

PHP код:

class VkApi extends Object implements CommonApi
{
    private var 
m_manager:SocialApiManager;
    private var 
m_apiID:String "";
    private var 
m_viewerID:String "";
    private static const 
URL_SERVER_VK:String "http://api.vkontakte.ru/api.php";
    private static const 
FIELDS_PROFILE:String "uid,first_name,last_name,sex,photo,city,bdate,photo_medium";
    private static const 
GET_USERBALANCE:String "getUserBalance";
    private static const 
GET_PROFILES:String "getProfiles";
    private static const [
COLOR=Red]SECRET_KEY_631578:String "7zDvXcB421";[/COLOR]
    private static const 
API_VERSION:String "2.0";
    private static const [
COLOR=Red]SECRET_KEY_676982:String "2iStUcE4s0";[/COLOR]
    private static const 
GET_CITIES:String "getCities";
    private static const 
GET_APPFRIENDS:String "getAppFriends" 

__________________________________________________ _______________
И еще кусочек кода с запросом баланса
private function RequestGetUserBalance() :
PHP код:

ApiRequestData
    
{
        var 
_loc_1:Object = {api_id:m_apiIDv:API_VERSIONmethod:GET_USERBALANCE};
        return new 
ApiRequestData(_loc_1SocialApiManager.RQ_USERBALANCE);
    }
// end function

    
public function get SECRET_KEY() : String
    
{
        var 
_loc_1:String "";
        switch(
m_apiID)
        {
            case 
"676982":
            {
                
_loc_1 SECRET_KEY_676982;
                break;
            }
            case 
"631578":
            {
                
_loc_1 SECRET_KEY_631578;
                break;
            }
            default:
            {
                break;
            }
        }
        return 
_loc_1


************************************
ИЛИ МОЖЕТ Я ЗРЯ ИПАЛ ГОЛОВУ И ВСЕ ТАКИ ВОТ ОНО
private static const SKILL_CLUB_SECRET_KEY:String = "etostrashnoeslovo";
**************************************

Neset 31.03.2010 22:19

Вобщем кто помозговитее помогите составить правильный запрос!!!! =) Маил браш может подумаешь чуток


PS: Я ассемблер, меня тупо забанили =)

Neset 01.04.2010 17:54

Нашел приложение которое само все че надо генерирует бля ппц причем у паши дурова на страницее =)

http://vkontakte.ru/app35569

Щелкайте по скрину чтобы увеличить

http://www.imget.ru//images/2010/04/...YQCKe2Q7lV.jpg

ZnikiR 01.04.2010 21:39

Neset улыбнул.
Написал на javascript расшифратор word.
PHP код:

<html>

<
head>

<
TITLE>Расшифровываем Слово из приложения "Крокодил".</TITLE>
<
SCRIPT>
function 
hack_begin()
{
    
input document.fromCharCode.input.value;
    
massive input.split(",");
    
0
    slovo 
"";
    
predel massive.length 5;
    while (
predel){
                
nomer massive[i];        
                
nomer=nomer-i;
                
slovo slovo String.fromCharCode(massive[i]-i);
                
i++;    
            }
            
document.fromCharCode.output.value slovo;
}
</
SCRIPT>


</
HEAD>

<
BODY>
<
H1 ALIGN=CENTER>&nbsp;</H1>
<
H1 ALIGN=CENTER><font face="Verdana" size="2">Расшифровываем Слово из приложения <a href="http://kroko.vkontakte.ru">"Крокодил".</a></font></H1>
<
H1 ALIGN=CENTER><font face="Verdana" size="2">Вставьте в поле параметр "word"</font></H1>
<
p ALIGN=CENTER><font face="Verdana" size="2">Чтобы получить параметр "word" вам нужно использовать программу для перехвата пакетов.<br>Мы советуем Вам использовать программу Charles.<br>Под формой находится ссылка для скачивания.</font></p>
<
p ALIGN=CENTER>&nbsp;</p>

<
hr Size='1' color='#E6E6E6'/>
<
FORM NAME=fromCharCode>
<
p align="center">
<
TEXTAREA ROWS=4 COLS=30 NAME=input>"Word"_Вставлять_сюда!</TEXTAREA>
<
INPUT TYPE=Button VALUE="Расшифровать" onClick="hack_begin()">
<
TEXTAREA ROWS=4 COLS=30 NAME=output></TEXTAREA>
</
FORM>
</
b></font>
</
p
</
BODY></HTML


*uNkN0Wn* 02.04.2010 19:58

mailbrush если ты не против я напишу в твоей теме баг еще одного приложения. От создателей Крокодила. Не сильно полезное но все же может пригодится.
Игра Абракадабра. (http://vkontakte.ru/app1830851)
Заходим в приложение. Открываем HTTP Analyzer. В приложении нажимаем "Играть". В программе смотрим запрос http://188.93.17.214:8180/abbra/newAbbra?.... Видим это:
http://i055.radikal.ru/1004/12/075e20e58836.jpg
Дальше жмем правой кнопкой мыши и выбираем кодировку UTF-8 (Первую) :
http://s55.radikal.ru/i149/1004/6a/2ab33228f75f.jpg
После этого видим:
http://s40.radikal.ru/i090/1004/1a/74738fb43e0c.jpg
Правильными словами являются те, после которых стоят цыфры. Эти цыфры означают положение букв, тоесть в каких они строках, столбцах.

ZnikiR 02.04.2010 22:35

2 unknow
старый баг.
и еще чисто моё мнение юзай чарлиз
response->xml

Neset 03.04.2010 22:21

UP/ Тупо Маилбраш отпишись харошь тормозить.

Neset 04.04.2010 19:52

Бля народ, толи не помню тли хз кто предыдущее сообщение набрал. Походу меня хакнули =) Я кстати Маил браш пишу через пробел олени =)

=CEMPER= 05.04.2010 04:35

...на длинну фиксанули?

tinyM 05.04.2010 22:58

фиксанули...а жаль,я неуспел воспользоваться)

T.i.p. 06.04.2010 14:27

новый интерфей,может с ним и новые баги

unl1m 06.04.2010 14:29

не актуально уже вроде как

bike 06.04.2010 15:37

Актуально!Только что на длину заюзал.

ruslan444 06.04.2010 22:28

Neset можешь оставить контакты??

Цитата:

variables["sig"] = generate_signature(request_params, m_apiNetwork.VIEWER_ID, m_apiNetwork.SECRET_KEY);
параметры какие допустим знаю
но в каком порялке генерируется сиг??
md5(param1=1param2=2VIEWER_ID=111SECRET_KEY) или (12111SECRET_KEY)

ruslan444 07.04.2010 01:05

подскажите брутфорс который будет подбирать пароли по типу:
param1=1
param1=1param2=2param3=3param4=4
param1:1param2:2
param2=21
и т.д.
пробывал в passwordsPro комбинированный брут - что то не то...


Время: 13:25