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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите разобраться с кодом, ПАЖАААЛИСТА!!! Мне нужно понять алгоритм... 
:(
    Опции темы
maxistent
  Дата 13.9.2012, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте. Помогите пожалуйста разобраться, что конкретно делает нижеприведенный код с входными данными, и что получается на выходе? Предположительно он должен преобразовывать текст (и/или другие данные) в некую нечитаемую форму, но как он это делает - не могу понять :( Мне нужно понять именно алгоритм, чтобы реализовать обратную схему для получения исходных данных. Хоть я "программизмом" и занимаюсь уже достаточно давно, но в JAVA не разбираюсь, особенно в этом коде. Похоже, что тут все умышленно запутанно... Помогите, кто чем может  smile 

Код

public final class o extends p
{
  public o()
  {
    super(new byte[0]);
  }

  public o(byte[] paramArrayOfByte)
  {
    super(paramArrayOfByte);
  }

  private static String a(byte[] paramArrayOfByte)
  {
    StringBuilder localStringBuilder = new StringBuilder();
    byte[] arrayOfByte = new byte[3];
    int i = paramArrayOfByte.length / 3;
    int j = paramArrayOfByte.length % 3;
    for (int k = 0; ; k++)
    {
      if (k >= i)
      {
        if (j > 0)
        {
          System.arraycopy(paramArrayOfByte, k * 3, arrayOfByte, 0, j);
          localStringBuilder.append(a(arrayOfByte, j));
        }
        return localStringBuilder.toString();
      }
      System.arraycopy(paramArrayOfByte, k * 3, arrayOfByte, 0, 3);
      localStringBuilder.append(a(arrayOfByte, 3));
    }
  }

  private static char[] a(byte[] paramArrayOfByte, int paramInt)
  {
    int i = 61;
    int j = 0;
    Object localObject;
    if ((paramInt <= 0) || (paramInt > 3))
    {
      localObject = null;
      return localObject;
    }
    short[] arrayOfShort = new short[paramInt];
    char[] arrayOfChar = new char[4];
    int k = 0;
    label33: int n;
    label81: int i2;
    if (k >= paramInt)
    {
      arrayOfChar[j] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(arrayOfShort[0] >> 2);
      int m = (0x3 & arrayOfShort[0]) << 4;
      if (paramInt <= 1)
        break label205;
      n = (0xF0 & arrayOfShort[1]) >> 4;
      arrayOfChar[1] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(n | m);
      if (paramInt <= 1)
        break label211;
      i2 = (0xF & arrayOfShort[1]) << 2;
      if (paramInt > 2)
        j = (0xC0 & arrayOfShort[2]) >> 6;
    }
    label205: label211: for (int i1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(j | i2); ; i1 = i)
    {
      arrayOfChar[2] = i1;
      if (paramInt > 2)
        i = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(0x3F & arrayOfShort[2]);
      arrayOfChar[3] = i;
      localObject = arrayOfChar;
      break;
      arrayOfShort[k] = paramArrayOfByte[k];
      arrayOfShort[k] = (short)(0xFF & arrayOfShort[k]);
      k++;
      break label33;
      n = 0;
      break label81;
    }
  }

  private static byte[] b(byte[] paramArrayOfByte)
  {
    for (int i = paramArrayOfByte.length; ; i--)
      if (paramArrayOfByte[(i - 1)] >= 0)
      {
        if ((i >= 2) && (i <= 4))
          break;
        Object[] arrayOfObject = new Object[1];
        arrayOfObject[0] = Integer.valueOf(i);
        throw new IllegalArgumentException(String.format("Illegal incoming data length (length = %1$d)", arrayOfObject));
      }
    byte[] arrayOfByte = new byte[1 + (2 * (i / 4) + i % 4 / 3)];
    arrayOfByte[0] = (byte)(paramArrayOfByte[0] << 2 | paramArrayOfByte[1] >> 4);
    if (paramArrayOfByte[2] >= 0)
      arrayOfByte[1] = (byte)((0xF & paramArrayOfByte[1]) << 4 | paramArrayOfByte[2] >> 2);
    if (paramArrayOfByte[3] >= 0)
      arrayOfByte[2] = (byte)((0x3 & paramArrayOfByte[2]) << 6 | paramArrayOfByte[3]);
    return arrayOfByte;
  }

  public final XmlSerializer a(XmlSerializer paramXmlSerializer)
  {
    try
    {
      XmlSerializer localXmlSerializer = paramXmlSerializer.startTag("", "value").startTag("", "base64").text(a((byte[])this.a)).endTag("", "base64").endTag("", "value");
      return localXmlSerializer;
    }
    catch (Exception localException)
    {
      throw new j(localException.getMessage());
    }
  }

  public final void a(String paramString)
  {
    int i = paramString.length();
    byte[] arrayOfByte1;
    byte[] arrayOfByte2;
    int m;
    int n;
    if (paramString.charAt(i - 1) != '=')
    {
      int j = 3 * (i / 4);
      int k = i % 4;
      if ((k > 0) && (k != 1))
        j += 1 + k / 3;
      arrayOfByte1 = new byte[j];
      arrayOfByte2 = new byte[4];
      Arrays.fill(arrayOfByte2, (byte)-1);
      m = 0;
      n = 0;
    }
    while (true)
    {
      if (m >= i)
      {
        if ((arrayOfByte2[0] >= 0) && (arrayOfByte2[1] >= 0))
        {
          byte[] arrayOfByte3 = b(arrayOfByte2);
          System.arraycopy(arrayOfByte3, 0, arrayOfByte1, n * 3, arrayOfByte3.length);
        }
        this.a = arrayOfByte1;
        return;
        i--;
        break;
      }
      int i1 = paramString.charAt(m);
      if ((i1 >= 43) && (i1 <= 122))
      {
        int i2 = "}$$$~stuvwxyz{|$$$$$$$?@ABCDEFGHIJKLMNOPQRSTUVWX$$$$$$YZ[\\]^_`abcdefghijklmnopqr".charAt(i1 + -43);
        if (i2 != 36)
        {
          arrayOfByte2[(m % 4)] = (byte)(i2 + -63);
          if (arrayOfByte2[3] >= 0)
          {
            System.arraycopy(b(arrayOfByte2), 0, arrayOfByte1, n * 3, 3);
            Arrays.fill(arrayOfByte2, (byte)-1);
            n++;
          }
        }
      }
      m++;
    }
  }

  public final String toString()
  {
    return a((byte[])this.a);
  }
}

PM MAIL   Вверх
jk1
Дата 14.9.2012, 08:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

 paramXmlSerializer.startTag("", "value").startTag("", "base64").text(a((byte[])this.a)).endTag("", "base64").endTag("", "value")


Вот это вот ни на какие мысли не наводит?
Попробуйте декодировать как Base64.


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
maxistent
Дата 14.9.2012, 09:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(jk1 @ 14.9.2012,  08:26)
Цитата

 paramXmlSerializer.startTag("", "value").startTag("", "base64").text(a((byte[])this.a)).endTag("", "base64").endTag("", "value")


Вот это вот ни на какие мысли не наводит?
Попробуйте декодировать как Base64.

base64 тут ни при чем - он используется лишь в заголовке. а вот дальше... в исходных данных байты меняются каким-то непонятным образом. вот каким именно - это мне и нужно понять. 
PM MAIL   Вверх
aleksandy
Дата 15.9.2012, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(maxistent @  13.9.2012,  20:36 Найти цитируемый пост)
Похоже, что тут все умышленно запутанно... 

Это обыкновенный декомпилированный обфусцированный класс. Откуда он, может можно найти нормальные исходники?
PM   Вверх
maxistent
Дата 17.9.2012, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Увы, если бы были нормальные исходники, то проблем было бы намного меньше. А вместе с ними и вопросов... ))
PM MAIL   Вверх
maxistent
Дата 24.9.2012, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Товарисчи, ну неужель это столь сложная задача, что никто справиться не в силах? или это вопрос лени? )) Прошу хоть кого-нибудь еще откликнуться, очень надо =( или, быть может, вопрос в оплате? Если так, то не стесняйтесь - озвучьте сроки выполнения "работы" и сумму к оплате ))) В разумных пределах, конечно... 
PM MAIL   Вверх
maxistent
Дата 24.9.2012, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Если поможет, то постараюсь раскрыть суть:
Сама программа собирает показания датчиков и некоторую другую текстовую информацию, затем компонует это все в формат XML, затем в GZip, и отправляет на сервер. пока работали с предыдущей версией - проблем не было. Теперь версия изменилась, старой версии в наличии нет, а работать надо. До разработчика не можем достучаться - затерялся... Вот и пытаемся выкрутиться. Проблема в том, что программа где-то между XML и GZIP, либо перед непосредственной отправкой на сервер эти данные еще как-то преобразует в непонятную форму. На сервер приходит некий заголовок в формате BASE64, но после декодирования получается набор непонятных байтов. Затем идет набор из N-количества байт, причем, тут тоже есть непонятность: анализ этих байтов показал, что первые ~200-300 байт - это РОВНО 400 БАЙТ исходных данных, упакованных в GZip, но при распаковке это опять же непонятный набор байт. А после этого "архива" снова идет набор байтов, проанализировать которые уже не удается вообще. Вот, примерно так получается. В приведенном коде методы выполняют над исходными данными какую-то магию - вот и надо понять, что там конкретно происходит.

Это сообщение отредактировал(а) maxistent - 24.9.2012, 18:39
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




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


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

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