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

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

 eXeL@B —› Крэки, обсуждения —› Взлом Instagram ключа для подписи (для iphone)
Посл.ответ Сообщение

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

Создано: 8 марта 2016 20:27 New!
Цитата · Личное сообщение · #1

Доброго дня. Пытаюсь взломать ключ для подписания запросов инстаграма (для iphone)

Где шифруется:

Code:
  1. LABEL_18:
  2.   v41 = v22;
  3.   objc_release(v55);
  4.   objc_msgSend(v8, "setObject:forKey:", v22, CFSTR("_csrftoken"));
  5.   v42 = objc_msgSend(&OBJC_CLASS___NSJSONSerialization, "stringWithJSONObject:", v8);
  6.   v43 = (void *)objc_retainAutoreleasedReturnValue(v42);
  7.   v44 = v43;
  8.   v45 = objc_msgSend(v43, "HMACWithSecret:", CFSTR("4749bda4fc1f49372dae3d79db339ce4959cfbbe"));
  9.   v46 = objc_retainAutoreleasedReturnValue(v45);
  10.   v47 = v46;
  11.   v48 = objc_msgSend(&OBJC_CLASS___NSString, "stringWithFormat:", CFSTR("%@.%@"), v46, v44);
  12.   v49 = objc_retainAutoreleasedReturnValue(v48);
  13.   v50 = objc_msgSend(&OBJC_CLASS___NSMutableDictionary, "dictionaryWithCapacity:", 2);
  14.   v51 = (void *)objc_retainAutoreleasedReturnValue(v50);
  15.   objc_msgSend(v51, "setValue:forKey:", v49, CFSTR("signed_body"));
  16.   objc_msgSend(v51, "setValue:forKey:", CFSTR("5"), CFSTR("ig_sig_key_version"));



Чем шифруется:

Code:
  1. id __cdecl -[NSString(HMAC) HMACWithSecret:](struct NSString *self, SEL a2, id a3)
  2. {
  3.   struct NSString *v3; // r5@1
  4.   int v4; // r0@1
  5.   int v5; // r1@1
  6.   void *v6; // r8@1
  7.   int v7; // r1@1
  8.   void *v8; // r0@1
  9.   const char *v9; // r0@1
  10.   const char *v14; // r5@1
  11.   int v16; // r4@1
  12.   size_t v19; // r0@1
  13.   size_t v20; // r0@1
  14.   char *v21; // r6@1
  15.   int v22; // ST04_4@2
  16.   void *v23; // r0@3
  17.   int v24; // r5@3
  18.   char v26; // [sp+8h] [bp-240h]@1
  19.   char v27; // [sp+188h] [bp-C0h]@1
  20.   int v28; // [sp+1A8h] [bp-A0h]@1
  21.   int v29; // [sp+1B8h] [bp-90h]@1
  22.   char v30; // [sp+1C8h] [bp-80h]@1
  23.   char v31; // [sp+1CBh] [bp-7Dh]@1
  24.   char v32[32]; // [sp+20Ch] [bp-3Ch]@1
  25.   int v33; // [sp+22Ch] [bp-1Ch]@1
  26.  
  27.   v3 = self;
  28.   v33 = __stack_chk_guard;
  29.   v4 = objc_retain(a3);
  30.   v6 = (void *)objc_retainAutorelease(v4, v5);
  31.   objc_msgSend(v6, "UTF8String");
  32.   v8 = (void *)objc_retainAutorelease(v3, v7);
  33.   v9 = (const char *)objc_msgSend(v8, "UTF8String");
  34.   __asm { VMOV.I32        Q8, #0 }
  35.   v14 = v9;
  36.   _R0 = &v29;
  37.   v16 = 0;
  38.   __asm { VST1.32         {D16-D17}, [R0] }
  39.   _R0 = &v28;
  40.   __asm { VST1.32         {D16-D17}, [R0] }
  41.   _R0 = &v27;
  42.   __asm
  43.   {
  44.     VST1.32         {D16-D17}, [R0]!
  45.     VST1.32         {D16-D17}, [R0]
  46.   }
  47.   v30 = 0;
  48.   sub_61C450((int)&v27);
  49.   v19 = strlen(&v27);
  50.   CCHmacInit(&v26, 2, &v27, v19);
  51.   v20 = strlen(v14);
  52.   CCHmacUpdate(&v26, v14, v20);
  53.   CCHmacFinal(&v26, v32);
  54.   v21 = &v31;
  55.   do
  56.   {
  57.     v22 = (unsigned __int8)v32[v16];
  58.     __snprintf_chk(v21, 3, 0, -1);
  59.     ++v16;
  60.     v21 += 2;
  61.   }
  62.   while ( v16 != 32 );
  63.   v23 = objc_msgSend(&OBJC_CLASS___NSString, "stringWithUTF8String:", &v31);
  64.   v24 = objc_retainAutoreleasedReturnValue(v23);
  65.   objc_release(v6);
  66.   if ( __stack_chk_guard != v33 )
  67.     __stack_chk_fail(__stack_chk_guard - v33, __stack_chk_guard);
  68.   return (id)j__objc_autoreleaseReturnValue(v24);
  69. }



Судя по
Code:
  1. CCHmacInit(&v26, 2, &v27, v19);

Шифруется kCCHmacAlgSHA256

Ключ шифрования я думал берется из этой строки
Code:
  1.  v45 = objc_msgSend(v43, "HMACWithSecret:", CFSTR("4749bda4fc1f49372dae3d79db339ce4959cfbbe"));


Беру проверочную строку
Code:
  1. {"_uuid":"0CB069DD-173E-419C-92D7-88A93C4A8FD0","password":"ocalofef","username":"mary_henderson353","device_id":"0CB069DD-173E-419C-92D7-88A93C4A8FD0","_csrftoken":"353cab5ef717502f6edd97e6b3ffddcb","login_attempt_count":0}


Пытаюсь повторить своими данными: bf0e4c1cab71540a70ab83520fd61bcfa922609542d9b8149271f00e5418aba5
Подпись от инстаграмма: 3b11237123e319d0e153548c2a337605ea4f7c5969d8fe621adb647adc7be690

Не совпадает. Что упускаю из вида?

Ранг: 60.6 (постоянный)
Статус: Участник

Создано: 8 марта 2016 21:01 New!
Цитата · Личное сообщение · #2

Посмотри алгоритмы генерации подписи
https://github.com/mgp25/Instagram-API

поищи ключ похожий на андроидовский, вероятно размер одинаковый

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

Создано: 8 марта 2016 22:01 New!
Цитата · Личное сообщение · #3

Есть подозрение, что 4749bda4fc1f49372dae3d79db339ce4959cfbbe это не ключ для шифрования подписи. Эта строка, используется для получения настоящего ключа из версии. Т.е. этим ключем, шифруется версия инсты и затем получившимся ключем шифруется запрос.

Подозрение то есть, но проверить пока не получается его

Ранг: 30.2 (посетитель)
Статус: Участник

Создано: 9 марта 2016 05:31 New!
Цитата · Личное сообщение · #4

Стоит сперва курнуть чутка доков.
https://www.instagram.com/developer/secure-api-requests/

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

Создано: 9 марта 2016 07:14 New!
Цитата · Личное сообщение · #5

Ну вообще разговор был об апи, используемом в приложениях, а не о публичном апи

Ранг: 30.2 (посетитель)
Статус: Участник

Создано: 9 марта 2016 10:26 New!
Цитата · Личное сообщение · #6

varenik пишет:
Доброго дня. Пытаюсь получить ключ для подписания запросов инстаграма (для iphone)


На основе чего и как он формируется описано в доках. Зачем вы мучатесь не понятно.

Ранг: 42.9 (посетитель)
Статус: Участник

Создано: 9 марта 2016 11:47 New!
Цитата · Личное сообщение · #7

тебе сначало нужно сформировать access_token через client / client_secret, и потом только отправить запросы к АПИ.

из доков:

"Pay attention to send an access_token of the same app (client) of the client_secret you are using to create sig parameter and X-Insta-Forwarded-For header. If those information do not match, you will receive this response:

{“code”: 403,
“error_type”: “OAuthForbiddenException”,
“error_message”: “Invalid header: Signature did not match”}"

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

Создано: 9 марта 2016 12:03 New!
Цитата · Личное сообщение · #8

Блин, это работает только для публичного апи. То которое официально дано инстаграмом.
Меня же интересует именно апи мобильных приложений, оно другое и по нем информации официальной нет

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

Создано: 9 марта 2016 18:06 · Поправил: 9 марта 2016 18:06 VodoleY New!
Цитата · Личное сообщение · #9

varenik подозреваю что мобильное АПИ платное?

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

Создано: 9 марта 2016 18:12 · Поправил: 9 марта 2016 18:35 SaNX New!
Цитата · Личное сообщение · #10

VodoleY
платные решения есть по извлечению ключа из бинарников ) да и сами применения я вижу только в коммерческих проектах. там вообще все как на ладони в плане извлечения ключа. а ТСу хватило умения кусков кода надергать, типа остальное доделают за него ))))

2ТС: в курсе, что у функций есть параметры? Как насчет того, чтоб посмотреть какие параметры передаются в функу и откуда они беруццо? Если уж и это не поможет тебе - то яхз, остается только сорцы выкладывать.


Ранг: 44.5 (посетитель)
Статус: Участник

Создано: 9 марта 2016 21:51 New!
Цитата · Личное сообщение · #11

типичные писатели ботов на питоне, бгг

Ранг: 30.2 (посетитель)
Статус: Участник

Создано: 10 марта 2016 04:41 New!
Цитата · Личное сообщение · #12

VodoleY пишет:
подозреваю что мобильное АПИ платное?


Да бесплатное там API, зачем ТС ключи от офф клиента не совсем понятно, ну разве что мимикрировать под него для спаминга.

Максиму что там может быть это порезанный функционал как например в api Tumblr там при помощи апи нельзя искать explicit контент в тоже время офф клиент вполне себе позволяет.
 eXeL@B —› Крэки, обсуждения —› Взлом Instagram ключа для подписи (для iphone)

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