Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
xdmood
1 / 1 / 0
Регистрация: 27.02.2013
Сообщений: 13
#1

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

18.06.2014, 19:56. Просмотров 1417. Ответов 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.



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

Система требует ввести пароль Админа
Система требует ввести пароль Админа для продолжения выполнения операции, но...

Диск требует ввести пароль (HDD Password)
Приветствую всех. Столкнулся с такой ситуацией - умер HDD на ноуте ASUS Pro64D...

Apple iPhone 4s (8.1.3) требует ввести Apple ID и пароль при включении телефона
В общем попал ко мне айфон 4эс и требовал ввести пароль, а в верхней строчке...

При подключении к базе данных требует логин и пароль, где его найти?
Начал писать приложение на c# с подключением базы данных MS sql. В окне "логин"...

Узнать запущено ли уже приложение, если да то узнать его handle
Если приложение уже запущено нужно поучить его handle и передать в него данные...

2
Vladimirys
312 / 209 / 27
Регистрация: 16.01.2010
Сообщений: 610
18.06.2014, 23:52 #2
Ага, простое приложение Красть - нехорошо. Кроме того, не было мысли, а зачем там все остальные "пароли"? Вполне вероятно, что исходный пароль, по какому то алгоритму (известному только разработку) собирается из этих "кусочков".
P.S. Потому как, все разработки знают, что можно довольно легко получить исходный код. Не вчера родились.
1
xdmood
1 / 1 / 0
Регистрация: 27.02.2013
Сообщений: 13
19.06.2014, 00:15  [ТС] #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
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.06.2014, 00:15

Знаю пароль, но не могу его ввести
Казалось бы, более дебильной ситуации и придумать нельзя, но все же это...

Программа, которая требует у вас пароль, например 111, и если пароль правильный, то печатает сообщение «Молодец!».
Практическая работа Задание 6. С помощью оператора repeat напишите...

Как узнать пароль администратора win 7 не сбрасывая его?
Подскажите плиз. Мне надо именно узнать, а не сбросить. Прогой saminside с...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru