Модераторы: javastic, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Просьба помочь c функцией декомпилированного .apk, Имитация https запросов 
:(
    Опции темы
Winsock
  Дата 10.12.2015, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 30.11.2011

Репутация: нет
Всего: нет



Здравствуйте, уважаемые форумчане!
Модератор, если разместил тему не в нужном разделе - заранее прошу прощения и прошу переместить куда следует.

Только вникаю в тему программирования на java.

Стоит задача имитировать https запросы приложения Android.

Столкнулся с функцией кодирования строк (насколько я понял):

Код

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.util.Base64;
import android.util.Log;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.GregorianCalendar;
import java.util.Iterator;
import java.util.UUID;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import org.json.JSONException;
import org.json.JSONObject;

private String base64encryptedConfirmationHash(long time, String tag) {
        String sSecret = this.mInfo.optString("identity_secret");
        if (sSecret == null) {
            return "";
        }
        byte[] secretBytes = Base64.decode(sSecret.getBytes(), 0);
        int dataLen = 8;
        if (tag != null) {
            if (tag.length() > 32) {
                dataLen = 8 + 32;
            } else {
                dataLen = 8 + tag.length();
            }
        }
        byte[] dataBytes = new byte[dataLen];
        int i = 8;
        while (true) {
            int i2 = i - 1;
            if (i <= 0) {
                break;
            }
            dataBytes[i2] = (byte) ((int) time);
            time >>>= 8;
            i = i2;
        }
        if (tag != null) {
            System.arraycopy(tag.getBytes(), 0, dataBytes, 8, dataLen - 8);
        }
        SecretKeySpec signKey = new SecretKeySpec(secretBytes, "HmacSHA1");
        try {
            Mac mac = Mac.getInstance("HmacSHA1");
            mac.init(signKey);
            return percentEncodeUrlUnsafeChars(Base64.encodeToString(mac.doFinal(dataBytes), 2));
        } catch (NoSuchAlgorithmException e) {
            return null;
        } catch (InvalidKeyException e2) {
            return null;
        }
    }

    public String getTaggedConfirmationUrlParams(String tag) {
        if (base64encryptedConfirmationHash(TimeCorrector.getInstance().currentTimeSeconds(), tag) == null) {
            return "";
        }
        return String.format("p=%s&a=%s&k=%s&t=%d&m=android&tag=%s", new Object[]{getUniqueIdForPhone(), getId(), base64encryptedConfirmationHash(TimeCorrector.getInstance().currentTimeSeconds(), tag), Long.valueOf(TimeCorrector.getInstance().currentTimeSeconds()), tag});
    }


Входящими параметрами функции являются unix время и tag, который мне пока не известен.

Результатом функции является : LYBIvTb2vdxjsMZvTD%2bpcxPN6%2f8%3d (url decode: LYBIvTb2vdxjsMZvTD+pcxPN6/8=)

В итоге запрос имеет вид:
?op=allow&p=android:af740075-ecf8-485c-bffd-d4c1343203db&a=76261198246295941&k=LYBIvTb2vdxjsMZvTD%2bpcxPN6%2f8%3d&t=1449703601&m=android&tag=allow&cid=8984774&ck=980894818334077389



В подобных запросах меняются следующие параметры: cid=8984774&ck=980894818334077389

Просьба помочь в понимании процесса кодирования и расшифровки ключа для возможности имитировать запрос.

PM MAIL   Вверх
Winsock
Дата 11.12.2015, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 30.11.2011

Репутация: нет
Всего: нет



Мдаа...

Неужели  настолько сложная функция, что никто не в состоянии помочь?

На сколько я вижу - это должно быть элементарно для носителя языка.

Ну что же, что поделать, буду на других форумах спрашивать, спасибо!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

  • Прежде чем задать вопрос прочтите это!
  • Литература по Java находится здесь.
  • Литературу по Java обсуждаем здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда

  • FAQ раздела лежит здесь!
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java ME (J2ME) | Следующая тема »


 




[ Время генерации скрипта: 0.1131 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.