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

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

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

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

Solutions Collecting From Web of "Перехватывать HTTP-запросы, отправленные из приложения Android."

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

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

Есть несколько возможностей с растущими усилиями:

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

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

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

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

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

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

Расширяя WebViewClient , я shouldOverrideUrlLoading метод 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: экспортировано Независимо от того, могут ли компоненты других приложений вызывать службу или взаимодействовать с ней – «true», если они могут, и «false», если нет. Когда значение «false», только компоненты одного приложения или приложений с одним и тем же идентификатором пользователя могут запустить службу или привязать ее к ней.

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

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

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