Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
xdmood
1 / 1 / 0
Регистрация: 27.02.2013
Сообщений: 13
#1

Приложение требует ввести пароль, задача его узнать (декомпиляторы, dex) - Android

18.06.2014, 19:56. Просмотров 1227. Ответов 2
Метки нет (Все метки)

Есть приложение, которое требует ввести пароль, задача его узнать.

Имеем файл Test.apk и полученные исходники (jar).
(Все прикреплено ниже)

Приложение простое, при вводе не правильного пароль выводит - incorrect
при правильном - correct

имеем исходники:

Класс реализующий пароль и его проверку
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package com.example.test;
 
import android.util.Base64;
 
public class Password
{
  private static String[] a;
  
  public Password()
  {
    a = new String[32];
    a[0] = "xxaAhdfshfOTnpWQlIqTkw==\n";
    a[1] = "FriejSasdfVnpOTnpWQlIqTcvbcvbkw==\n";
    a[2] = "ijriASDfhruhdsWQlIqvvR==\n";
    a[3] = "akshdfkjasAdhFjhhjLQlIqerw==\n";
    a[31] = a[3];
    a[4] = "ALsdfjsbnvweirfaxIqeew==\n";
    a[5] = "SadfelrkhuAScvbcvbvcDFSADIqTrw==\n";
    a[6] = "fsdfnDFwiNFWEfnndfrerw==\n";
    a[28] = a[0];
    a[7] = "ufaksjdAFdhTnpWsdfqFfX==\n";
    a[8] = "AfjrWfjirfasdftghoWQasdDji==\n";
    a[9] = "ffufjeirAjoaVnasdfhADFhpAFmVnpOTnASDhutjkw==\n";
    a[10] = "RRRuoaVnpaskjdfhamVnpOTsadflIqdFv==\n";
    a[11] = "jkFHWPhrufrpulASFAleuk==\n";
    a[12] = "sdfuoykyLJHHosdfamVnqrtgpOTnpWAFKkhQlhkHJw==\n";
    a[13] = "uoaVnpmVnpOTnpWQlIqTkw==\n";
    a[14] = "xxaAhdkjslkfjdlsjflsFFFjfafshfOTnpWQlIqTkw==\n";
    a[15] = "FriejSasdfVasdfnpOTnplIqTcvbcvbkw==\n";
    a[16] = "ijriASDfhruhdsWQlIqvvR==\n";
    a[17] = "akshdfkjasAdhFjhhjLQlIqerw==\n";
    a[27] = a[13];
    a[18] = "ALsdfjsbnAFSDvweirfaxIqeew==\n";
    a[19] = "SadfelrkhuASwerfSDFewcvbcvbvcDFSADIqTrw==\n";
    a[20] = "fsdfnDFwiNFWEfnndfrerw==\n";
    a[21] = "ufaksjdAFdhasdfaTnpWsdfqFfX==\n";
    a[30] = a[10];
    a[22] = "AfjrWfjirfasdftghoWQasdDji==\n";
    a[23] = "ffufjeirAjoaVnasdfhADFhpAFmVnpOTnASDhutjkw==\n";
    a[24] = "RRRuoaVnpaskjdfhamVnpOTsadflIqdFv==\n";
    a[25] = "jkFHWPhrufrpulASFAleuk==\n";
    a[26] = "sdfuoykyLJHHosdfamVnqrtgpOTnpWAFKkhQlhkHJw==\n";
    a[29] = a[6];
  }
  
  public boolean checkPassword(String paramString)
  {
    byte[] arrayOfByte = paramString.getBytes();
    for (int i = 0;; i++)
    {
      if (i >= arrayOfByte.length)
      {
        boolean bool1 = Base64.encodeToString(arrayOfByte, 0).equals(a[27]);
        boolean bool2 = false;
        if (bool1) {
          bool2 = true;
        }
        return bool2;
      }
      arrayOfByte[i] = ((byte)(0xFF ^ arrayOfByte[i]));
    }
  }
}
Класс MainActivity
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package com.example.test;
 
import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
 
public class MainActivity
  extends Activity
{
  public void checkPassword(View paramView)
  {
    EditText localEditText = (EditText)findViewById(2131230721);
    if (new Password().checkPassword(localEditText.getText().toString()))
    {
      TextView localTextView = new TextView(this);
      localTextView.setTextSize(40.0F);
      localTextView.setText(2131034116);
      setContentView(localTextView);
      return;
    }
    Toast.makeText(getApplicationContext(), 2131034117, 1).show();
  }
  
  protected void onCreate(Bundle paramBundle)
  {
    super.onCreate(paramBundle);
    setContentView(2130903040);
  }
  
  public boolean onCreateOptionsMenu(Menu paramMenu)
  {
    getMenuInflater().inflate(2131165184, paramMenu);
    return true;
  }
}
При просмотре кода, я подумал что пароль у нас должен быть: "uoaVnpmVnpOTnpWQlIqTkw=="

Так как проверяется 27 элемент массива "a[27]", который в свою очередь хранит ссылку на a[13] = "uoaVnpmVnpOTnpWQlIqTkw==\n" , но это не так и на ввод данного пароля приложение выводит -incorrect.



Из этого следует вопрос, что я не понимаю, может кто нибудь объяснит или натолкнет на правильную мысль.
Вложения
Тип файла: zip t.zip (599.3 Кб, 10 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.06.2014, 19:56     Приложение требует ввести пароль, задача его узнать (декомпиляторы, dex)
Посмотрите здесь:

есть спецы? приложение WhatsApp и его бэкап по хрону! Готов заплатить! Android
Android При нажатии на checkBox узнать его статус
Android Пароль на приложение
Android Полная декомпиляция apk. Classes.dex в *.smali или *.java
Android Ошибка импорта - требует экспорт проекта из ADT
Реализация меню требует API level 9, а actionbar-11. Что выбрать? Android
Android Не компилится проект - Unable to execute dex
Как узнать что приложение свернуто? Android
Android Можно ли программно узнать заблокирован ли экран у смартфона\планшета и разблокировать его
Android Приложение создано, ошибок нет, устанавливается но запустить я его не могу - нет иконки. Что я сделал не так?
Ошибки с Android Dex Android
Android Как узнать, что приложение было запущено при помощи NFC метки?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vladimirys
296 / 193 / 21
Регистрация: 16.01.2010
Сообщений: 547
18.06.2014, 23:52     Приложение требует ввести пароль, задача его узнать (декомпиляторы, dex) #2
Ага, простое приложение Красть - нехорошо. Кроме того, не было мысли, а зачем там все остальные "пароли"? Вполне вероятно, что исходный пароль, по какому то алгоритму (известному только разработку) собирается из этих "кусочков".
P.S. Потому как, все разработки знают, что можно довольно легко получить исходный код. Не вчера родились.
xdmood
1 / 1 / 0
Регистрация: 27.02.2013
Сообщений: 13
19.06.2014, 00:15  [ТС]     Приложение требует ввести пароль, задача его узнать (декомпиляторы, dex) #3
Во первых, это не воровства!

Это так сказать задача, на знание андроид. И мне интересно, в чем соль и как происходит защита.
Кроме того что я привел, данный apk ничего не умеет делать и никаких скрытых мотивов по воровству чужого кода нет.

Но спасибо за идею с подбором паролей из разных кусочков.

P.S. Написал тест, и в нем пароли прошли, как приведено выше, а тут ничего не выходит, вот и решил написать, а может кто-то поможет.

Добавлено через 6 минут
Решение задачи:

В класс Password добавил метод getPassword
Java
1
2
3
4
5
6
7
    public String getPassword() {
        byte b] = android.util.Base64.decode(a[0x1b], 0x0);
        for (int i = 0; i < b.length; i++) {
            b[i] = (byte) (b[i] ^ 0xff);
        }
        return new String(b);
    }
В результате пароль - Eyjafjallajokull
Yandex
Объявления
19.06.2014, 00:15     Приложение требует ввести пароль, задача его узнать (декомпиляторы, dex)
Ответ Создать тему
Опции темы

Текущее время: 09:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru