Подтвердить что ты не робот

Перехват HTTP-запросов, отправленных из приложения Android.

У меня есть приложение. Я знаю все URL-адреса, параметры, типы http-запросов и т.д. (Это мое приложение).

Как я могу перехватить все запросы из приложения? Например, я нажал кнопку и мог видеть текст запросов на сервер.

Задача - скрывать запросы от потенциальных хакеров и препятствовать ему выполнять запросы от имени приложения.

4b9b3361

Ответ 1

Насколько я понимаю, ваш вопрос состоит из двух проблем:

Как проверить трафик между вашим сервером и вашим клиентом.

С увеличением усилий есть несколько возможностей:

  • Ведение журнала. Как и ваше приложение, вы можете просто вставлять ведомости ведения журнала, содержащие ваш запрос и параметры, перед вызовом HTTP-запроса.
  • Прослушивание на стороне сервера. Как и ваше приложение, вы также контролируете сервер. С помощью таких инструментов, как tcpdump, вы должны просто сбрасывать трафик и анализировать его позже (например, Wireshark)
  • Прослушивание на стороне клиента. Если вы хотите перехватить трафик или "рядом с" клиентом, вы можете попробовать использовать burpsuite для перехвата трафика с использованием прокси-сервера или непосредственно в вашем WIFI.

Как убедиться, что только ваши клиенты могут делать запросы на сервер. Я бы рекомендовал использовать https с аутентификацией клиента. Вам нужно будет запустить клиент-сертификат с вашим приложением, а затем ваш сервер сможет проверить подлинность вашего клиента. Здесь вы можете найти общее введение для взаимной аутентификации ssl.

Ответ 2

Вы действительно не разъясняете, почему вы делаете это в своем вопросе, но для других: лучшей мотивационной причиной для этого было бы потому, что вы опасались, что ваше приложение было объектом нападения, потому что они как-то принуждали ваше намерение (или другой интерфейс RPC) к неправильной работе.

Лучший способ, который я могу сказать для этого, - представить ограниченный, как возможно, интерфейс к вашему приложению: не разрешайте публичным объектам или интерфейсам RPC манипулировать вашим приложением, чтобы отправлять информацию, которую вы не хотите.

Кроме того, вы можете зарегистрировать (через обертку в приложении на HTTP-объекты, возможно) HTTP-запросы, отправленные на сервер. Вопрос в том, как только вы зарегистрируете информацию на клиентском устройстве, что вы собираетесь с ней делать. Возможность правильно идентифицировать, когда приложение делает что-то "плохое", в значительной степени невозможно, и предполагает определение того, что "плохо", так что это неправильный путь для продолжения.

Итак, даже если вы можете войти в систему, и даже если вы можете использовать HTTPS, я бы сказал, что вам следует исследовать все возможности, которые злоумышленник может использовать для управления вашим приложением, чтобы отправить данные на ваш веб-сервис: начните, где вы на самом деле отправлять данные и работать в обратном направлении через приложение!

Ответ 3

Расширение WebViewClient, я перепробовал метод shouldOverrideUrlLoading следующим образом:

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {

    String mainPage = "https://www.secureSite.com/myData/";

    if (url.startsWith(mainPage)) {
        view.loadUrl(url);
        return false;

    } else {

         //some dialog building code here

         view.stopLoading();
         return false;
    }
} // end-of-method shouldOverrideUrlLoading

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

Но в вашем манифесте Android вы должны установить атрибут android:exported в false, чтобы другие приложения не использовали его.

Цитата из здесь:

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

Значение по умолчанию зависит от того, содержит ли служба фильтры намерений. Отсутствие каких-либо фильтров означает, что его можно вызвать только путем указания его точного имени класса. Это означает, что служба предназначена только для внутреннего использования приложения (так как другие не знают имя класса). Поэтому в этом случае значением по умолчанию является "false". С другой стороны, наличие по меньшей мере одного фильтра подразумевает, что служба предназначена для внешнего использования, поэтому значение по умолчанию "true".

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

Этот атрибут можно использовать и в Activity и Provider. Здесь (активность) и здесь (поставщик) является ссылкой, но это в значительной степени слово в слово так же, как описание Service, просто замените Activity или Provider на Service.