Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
1 / 1 / 0
Регистрация: 27.02.2013
Сообщений: 13
1

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

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

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

Имеем файл 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 Кб, 11 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.06.2014, 19:56
Ответы с готовыми решениями:

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

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

Outlook 365 требует ввести пароль постоянно
Добрый день , нужна помощь срочно Outlook требует ввести пароль постоянно но не у всех...

Почему WinRar после скачивания архива при попытке его распаковки требует пароль, если его нет?
Почему WinRar после скачивания архива при попытке его распаковки требует пароль, если его нет?

2
349 / 240 / 34
Регистрация: 16.01.2010
Сообщений: 766
18.06.2014, 23:52 2
Ага, простое приложение Красть - нехорошо. Кроме того, не было мысли, а зачем там все остальные "пароли"? Вполне вероятно, что исходный пароль, по какому то алгоритму (известному только разработку) собирается из этих "кусочков".
P.S. Потому как, все разработки знают, что можно довольно легко получить исходный код. Не вчера родились.
1
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
19.06.2014, 00:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.06.2014, 00:15
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru