Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр
Поднимайтесь как можно выше по дереву, собирайте цветы и дарите их близким.
Вас ждут уникальные награды и 22 выгодных промокода!

Пикаджамп

Аркады, Казуальные, На ловкость

Играть

Топ прошлой недели

  • Rahlkan Rahlkan 1 пост
  • Tannhauser9 Tannhauser9 4 поста
  • alex.carrier alex.carrier 5 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
0 просмотренных постов скрыто
3
glab.16
4 года назад
Web-технологии

GH-database⁠⁠

GH-database Nodejs, Npm, База данных, Storage spaces, Файл, Javascript, Json, Сервер, Разработчики, Devtools, Web, Backend, Длиннопост

Около 3 месяцев назад я уже писал статью про это приложение, тогда это были еще первые наброски без четкой структуры и с крайне ограниченным функционалом. У приложения было всего 7 методов. Что ж в сегодняшнем релизе их уже 28.

С тех пор функционал сильно расширился, теперь в приложении есть методы для работы с файлами и папками, что собственно говоря было и тогда, но появилась возможность использования его как полноценной базы данных, создание коллекций и реализации CRUD. А также были добавлены методы для хранение файлов без обработки, что то вроде storage.

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

Теперь более детально.

За основу приложения был взят npm модуль fs. Так что если приложение вернуло вам ошибку, то то что было в блоке error нужно гуглить в контексте модуля fs, а не Gh-database или ghc-db.

Приложение написано на nodejs, то бишь это обычный сервер к которому можно обращаться посредством POST запросов. Подробнее о них можно почитать в документации: https://github.com/GreenHouseControllers/GH-database

Для удобной работой с приложением был написан npm модуль - ghc-db. Думаю не стоит останавливаться на том что такое npm модули, как их устанавливать и так далие.

Прежде чем работать с приложением нужно сделать коннект с ним. Для этого есть метод connect, в него вы должны передать токен. Токен вы задаете в файле config в файлах Gh-database. Подробнее об этом читайте в документации.

Для работы с файлами есть:

createDir/removeDir - для создания/удаления папок и createFile/removeFile - соответственно для файлов.

readFile/writeFile - для чтения/записи файлов.

rename - для переименования файлов и папок.

Для работы с файлами имеющими расширение .json, есть отдельный набор методов

readJson/writeJson - для чтения записи файлов.

getElement - возвращает ответ по ключу.

pushElement/deleteElement - для добавления и удаления элемента в массиве.

Немного о функционале базы данных

Для создание и удаления коллекций используются методы createCollection и removeCollection соответственно.

Имеются методы для CRUD, по аналогии с MongoDB, но метод read возвращает всю коллекцию. Для получения одного объекта по параметрам есть метод get.

Так же вы можете переименовывать коллекцию с помощью метода renameCollection

Функционал файлового хранилища реализован в трех методах:

upload - для загрузки файлов

remove - для удаления файлов

download - для скачивания файлов

Обращение к файлам происходит по тому имени с которым он был загружен.

Для того чтобы получить токен, можно воспользоваться методом login. Но чтобы создать пользователя нужно использовать метод register, для которого уже нужен токен.

Также среди методов админа есть метод getErrorLog, который возвращает полный массив объектов с ошибками в формате json.

Данная версия еще все же сырая. Но я рад буду если вы заинтересуетесь данным приложением. Жду конструктивной критики, предложений, переделок, багов.

Будем рады если вы напишите простые примеры с использованием приложения и модуля ghc-db. Присылайте их в комментариях к статье и в телеграм, Вы можете перейти в группу в телеграмме где можете высказать свое мнение, предложить собственные идеи, поделится чем то новым. Сообщения касательно Gh-database присылайте с #ghDb в начале сообщения.

Ссылка на группу: https://t.me/joinchat/LvAn_FR2r9crJGKqP_aYYA

Показать полностью 1
[моё] Nodejs Npm База данных Storage spaces Файл Javascript Json Сервер Разработчики Devtools Web Backend Длиннопост
2
straxila
straxila
4 года назад
IT-юмор

JSON Statham⁠⁠

JSON Statham
Джейсон Стейтем Json Scala Java Юмор Картинка с текстом Мат
5
78
quickwin.ru
quickwin.ru
5 лет назад
MS, Libreoffice & Google docs

Как найти и распарсить JSON на странице сайта в интернете с помощью VBA Excel?⁠⁠

В этом посте я покажу, как с помощью VBA сделать, то, для чего VBA вроде бы как изначально не предназначен – как получить значения нужных переменных из структуры JSON.

Этот пост сделан по мотивам просьбы моего первого и пока единственного подписчика, сделавшего комментарий на предыдущий пост «Макрос получения курсов доллара за период с сайта Банка России»

Как найти и распарсить JSON на странице сайта в интернете с помощью VBA Excel? Vba, Json, Javascript, Парсер, Microsoft Excel, Visual basic, Программирование, Длиннопост

В чем отличие между сервисом ЦБ России и сайтом worldometers.info? В том, что ЦБ предлагает XML сервис для автоматической загрузки информации (см. http://www.cbr.ru/development/SXML/) – ее неудобно смотреть через веб браузер, но удобно получать с помощью паучьих алгоритмов, а worldometers.info предлагает информацию для людей, а не для пауков.

Поэтому создаваемому на VBA паучку придется постараться, чтобы понять разметку «для людей».

Для работы паука необходимо дополнительно подключить три библиотеки:

1. Microsoft XML parser (MSXML) – тот же, что использовался для получения курсов ЦБ с сайта Банка России.

2. Библиотеку для работы с объектной моделью HTML.

3. Библиотеку для использования возможностей JavaScript из VBA.

Как найти и распарсить JSON на странице сайта в интернете с помощью VBA Excel? Vba, Json, Javascript, Парсер, Microsoft Excel, Visual basic, Программирование, Длиннопост

Поехали:

1) Запускаем паучка на сайт: https://www.worldometers.info/coronavirus/coronavirus-cases/

Как найти и распарсить JSON на странице сайта в интернете с помощью VBA Excel? Vba, Json, Javascript, Парсер, Microsoft Excel, Visual basic, Программирование, Длиннопост

Получаем html с сайта:

Как найти и распарсить JSON на странице сайта в интернете с помощью VBA Excel? Vba, Json, Javascript, Парсер, Microsoft Excel, Visual basic, Программирование, Длиннопост

В полученном html паучку нужно найти и распарсить данные о количестве зарегистрированных случаев из формата JSON. Эти данные представлены вторым аргументом в вызове функции Highcharts.chart(chartName, chartData), которая на сайте рисует график.

Как найти и распарсить JSON на странице сайта в интернете с помощью VBA Excel? Vba, Json, Javascript, Парсер, Microsoft Excel, Visual basic, Программирование, Длиннопост

В результате выполнения нижепредставленного кода в переменной strJson должна оказаться структура с данными в JSON формате.

Как найти и распарсить JSON на странице сайта в интернете с помощью VBA Excel? Vba, Json, Javascript, Парсер, Microsoft Excel, Visual basic, Программирование, Длиннопост

Теперь самое интересное – как распарсить эту JSON структуру? Чистый VBA это делать не умеет. Но с JSON прекрасно работает JavaScript. А в VBA есть инструмент для использования возможностей JavaScript для пользователей MS Excel.

Как найти и распарсить JSON на странице сайта в интернете с помощью VBA Excel? Vba, Json, Javascript, Парсер, Microsoft Excel, Visual basic, Программирование, Длиннопост

Мы можем в VBA получить уже распарсенную JSON переменную:

Как найти и распарсить JSON на странице сайта в интернете с помощью VBA Excel? Vba, Json, Javascript, Парсер, Microsoft Excel, Visual basic, Программирование, Длиннопост

Проблема в том, что с объектом objJSON ничего нельзя сделать в рамках VBA – у него нет ни свойств, ни методов. Поэтому создаем эти методы на языке JavaScript. Нам нужно вытащить даты (xAxis) и количество (series->data):

Как найти и распарсить JSON на странице сайта в интернете с помощью VBA Excel? Vba, Json, Javascript, Парсер, Microsoft Excel, Visual basic, Программирование, Длиннопост

Вот что пишем в VBA редакторе:

Как найти и распарсить JSON на странице сайта в интернете с помощью VBA Excel? Vba, Json, Javascript, Парсер, Microsoft Excel, Visual basic, Программирование, Длиннопост

Загоняем данные в привычные VBA массивы:

Как найти и распарсить JSON на странице сайта в интернете с помощью VBA Excel? Vba, Json, Javascript, Парсер, Microsoft Excel, Visual basic, Программирование, Длиннопост

Ну и раскатываем эти массивы по рабочему листу:

Как найти и распарсить JSON на странице сайта в интернете с помощью VBA Excel? Vba, Json, Javascript, Парсер, Microsoft Excel, Visual basic, Программирование, Длиннопост

Вот, что получилось в результате на листе рабочей книги:

Как найти и распарсить JSON на странице сайта в интернете с помощью VBA Excel? Vba, Json, Javascript, Парсер, Microsoft Excel, Visual basic, Программирование, Длиннопост

По этим данным легко построить график, например, такой:

Как найти и распарсить JSON на странице сайта в интернете с помощью VBA Excel? Vba, Json, Javascript, Парсер, Microsoft Excel, Visual basic, Программирование, Длиннопост

Если захотите получить готовый файл Excel с рабочим кодом – дайте знать в комментариях.

Показать полностью 14
[моё] Vba Json Javascript Парсер Microsoft Excel Visual basic Программирование Длиннопост
36
11
gt2000
gt2000
5 лет назад
Лига программистов

JSON убивать!⁠⁠

JSON убивать! Json, Программирование, Web-программирование, Сотрудники
Показать полностью 1
[моё] Json Программирование Web-программирование Сотрудники
8
DELETED
5 лет назад
Программирование на PHP

Php unset не удаляет элемент в массиве⁠⁠

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


Собственно сам код (упрощенный до предела).


<Условие>//верное через отладчик видно, что выполняется

unset($a[i][j]); // опять таки массив и указанный элемент в этом моменте существует.

//Здесь $a[i][j] все ещё продолжает существовать, а ведь не должен.


Не знаю как в других программах, но в режиме отладки phpstorm  $a отображался как массив. Визуально все выглядело правильно, но не работало. Как оказалось проблема с преобразованием из json. Значения в массив попадали вот таким образом.


$a=json_decode($str);


И вроде бы в $str содержался преобразованный массив и даже несколько раз все отработало правильно, а потом алгоритм стал вести себя иначе. 


Как это лечится?


$a=json_decode($str,1); 

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


Также в этой же ситуации возможна вот такая картинка:

$a[1]=>1

$a[1]=>2

То есть индекс одинаков, но значения разные. Логично предположить, что json преобразовался не в массив, а в std класс.  Может кто-то из жителей сообщества объяснит ситуацию конкретнее. Так же если нужно преобразование из std класса в массив, то тоже советую делать это через

json_encode и json_decode($val,1) хотя за потребляемые ресурсы в процессе подобных преобразований не отвечаю, в моем случае операция выполнялась редко и с небольшим объемом.


А теперь немного о проблемах, которые увидела на форумах.


foreach($ar as $val)

unset($val); //с массивом $ar ничего не произойдет, так как удаляются только копии элементов.


правильный вариант


foreach($ar as $key=> $val)

unset($ar[$key]); //после цикла получим пустой массив


Или же еще  $ar у нас двухмерный массив.


foreach($ar[1] as $key=> $val)

unset($ar[1][$key]); 


Значение $ar[1] в массиве будет и оно будет содержать пустой массив, если нам нужно чтоб $ar[1] вообще не было, если он пуст пишем после цикла условие наподобие:


if (empty($ar[1])) unset($ar[1]);


Спасибо за внимание и обратите внимание на комментарии, автор сего поста может ошибаться и возможно, это будет видно в комментариях.

Показать полностью
[моё] PHP Json Решение проблемы Длиннопост Текст
24
5
Olelykoye
Olelykoye
6 лет назад

Онлайн очередь в JSON⁠⁠

Онлайн очередь в JSON Json, Технологии, Казахстан

Сегодня  -  на местном ресурсе. Вот и думаю  - или уровень пользователей повысился, или деньги у программистов закончились. Хотя на самом ресурсе zakon.kz данной новости не нашел. Может и фейк.

Json Технологии Казахстан
3
35
GospodinNub
GospodinNub
7 лет назад
Лига Разработчиков Видеоигр

Туториалы для геймдева #0 StaticData⁠⁠

Привет, Пикабу!

Я тут обещал какое-то время назад серию туториалов для геймдева, ну в общем вот первый пост)

Требования для урока:

1)Мозг

2)Умение читать ОЧЕНЬ ОЧЕНЬ ОЧЕНЬ много текста

3)Умение читать доки

4)c#

5)Json

6)Примеры будут на Unity, т.к. мой проект на нём, но про альтернативу для Unreal расскажу

StaticData. Что это? Зачем оно нужно?

В любом проекте чуть больше "Hello world" появляются объекты которые неплохо бы кастомизировать. Будь то параметры юнитов, оружия, да даже просто ящики разной массы для шутерков.


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

Первым порывом будет написать что-то такое:

\\код не мой, я просто разместил объяву


Код взят из проекта одного из школьников, у которых я веду проекты. По ушам за той код уже отхвачено)



obj1 = new Class();

obj.a = 1;

obj.b = 2;



obj2 = new Class();

obj2.a = obj1.a * 1.05;

obj2.b = obj1.b * 4;


Ну вы поняли...

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


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


Так что такое StaticData? Это эта самая таблица, которая иницалзирует сама себя и хранит все значения которые не зависят от действий игрока. А главное, к ней можно обращаться в любой момент.

Туториалы для геймдева #0 StaticData Gamedev, Мануалы, Tutorialsgamedev, Progrmming, Csharp, Json, Unity, Unreal Engine 4, Длиннопост

Ну а теперь ОДНА ИЗ ВОЗМОЖНЫХ реализаций этого.

Unreal engine - Класс Data Table. Идите гуглите) Таблички можно создавать прямо в редакторе, а можно подгружать из csv. Очень удобно и всё такое. И мануалы простые легко гуглятся.


Unity - Тут я собственно на примере буду рассказывать как оно устроено и работает. На примере своего проекта.

Сначала немного о базовых механиках построения таблиц:


KeyName - наше основное значение. Это id. Уникальная строковая переменая, по которой всегда можно найти в StaticData объект.


Каждый лист таблицы занимает или список классов (строка - экземпляр\шаблон объекта), Либо один цельный объект. Примером второго является например Settings. Не настройки игрока, а базовые параметры игры. Для кода сверху, это были бы масса и радиус земли.


Имена переменных должны совпдать с аналогичными переменными в вашем коде.

Итак, как же у меня в игре устроен ОТРЯД СОЛДАТ, а вот так:

Лист называется SquadArchtype

Туториалы для геймдева #0 StaticData Gamedev, Мануалы, Tutorialsgamedev, Progrmming, Csharp, Json, Unity, Unreal Engine 4, Длиннопост

keyName - ключевое имя отряда (по нему например более глобальный класс Company (армия) тащит свои составляющие. Не буду показывать, чтобы не перегружать вас) Дальше идут типы отряда, 6 юнитов, флаг может ли этот отряд быть использован игроком и сила для расчёта мощи армии противника.


Давайте внимательнее посмотрим на юнитов (лист UnitArchtype)

Туториалы для геймдева #0 StaticData Gamedev, Мануалы, Tutorialsgamedev, Progrmming, Csharp, Json, Unity, Unreal Engine 4, Длиннопост

Всё ещё куча ключевых слов и никаких параметров. Заметьте по ключевым словам можно догадаться о чём тут вообще идёт речь! Тут можно заметить поля правой и левой руки, доспеха и активируемого предмета. baseUnit это класс базовых характеристик (а-ля раса, но не совсем). Взглянем например на оружие. (Weapon)

Туториалы для геймдева #0 StaticData Gamedev, Мануалы, Tutorialsgamedev, Progrmming, Csharp, Json, Unity, Unreal Engine 4, Длиннопост

Ого чиселки! Но урона у оружия нет) Вы же не думали что всё так просто? В моей архтектуре удар оружием не отличается от фаербола. Это всё активные способности, некоторые могут иметь или не иметь урон. Глубже в таблицу уходить не будем, думаю смысл понятен)


НО:


Тут заметим интересную вещь. Изменилсь цвета. Зелёный - вотчина геймдизайнера (в данном случае меня) это баланс. Синяя - вотчина художника. Вот например в sprite записаны имена спрайтов которые подгружаются в соответсвующее оружие. О том как и зачем - в следующих урока, но поверьте, удобно)

Аналогичная архитектура записанная в коде заняла бы сотни строк, а меня баланс стало бы вообще нереально.

Самые внимательные могли заметить, что табличка хранится в гуглдоке. Итак, как же нам её оттуда достать.


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


https://assetstore.unity.com/packages/tools/utilities/google...


Что он делает - выкачивает гуглдок в Json и сохраняет в папке Resurces (для тех кто не шарит, в юнити это такая папка специальная, файлы откуда всегда уодят в билд, даже если на ни нет явных ссылок). Каждый листик сохраняет отдельно. Тут есть свои плюсы и минусы, но в большинстве случаев нам пофигу.

Качаем, ставим, читаем доки по заполнению таблиц, пользуемся.

Туториалы для геймдева #0 StaticData Gamedev, Мануалы, Tutorialsgamedev, Progrmming, Csharp, Json, Unity, Unreal Engine 4, Длиннопост

Прочитали? Ну и славно, едем дальше.

Собственно Static Data.

Есть два варианта - простой и сложный (внезапно)


Сложный - создаём класс с namespace которое всем доступно, инициализируем и тягаем оттуда инфу.


Простой - создаём GameObject на сцене, вешаем на него скрипт StaticData, он при запуске делает тоже самое. Если объекту нужны данные он его пинает и тащит данные.

Чтобы объект загружался из Json, он должен быть серриализуем.

Туториалы для геймдева #0 StaticData Gamedev, Мануалы, Tutorialsgamedev, Progrmming, Csharp, Json, Unity, Unreal Engine 4, Длиннопост

Вот примерно так выглядит класс Weapon (табличка сверху).

Теперь как же его собственно выцепить из таблички? Ну вот примерно так:

Туториалы для геймдева #0 StaticData Gamedev, Мануалы, Tutorialsgamedev, Progrmming, Csharp, Json, Unity, Unreal Engine 4, Длиннопост

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

Json - в данном случае просто строковая переменная.

LoadResourceTextFile - вспомогательная функция для выкачки текста. вот она:

Туториалы для геймдева #0 StaticData Gamedev, Мануалы, Tutorialsgamedev, Progrmming, Csharp, Json, Unity, Unreal Engine 4, Длиннопост

Странное добавление по бокам - Json встроенный в юньку малось туповат, ему надо явно указывать что это список объектов, а не цельный объект.


Weapons - вспомогательный класс для серриализации. Требуется из-за того-же несовершенства Json. Вот он:

Туториалы для геймдева #0 StaticData Gamedev, Мануалы, Tutorialsgamedev, Progrmming, Csharp, Json, Unity, Unreal Engine 4, Длиннопост

weapons - список оружий с которым позже мы будем уже работать. (точнее сам список в Weapons.list, но не суть).

Туториалы для геймдева #0 StaticData Gamedev, Мануалы, Tutorialsgamedev, Progrmming, Csharp, Json, Unity, Unreal Engine 4, Длиннопост

Итак, мы почти у конца! Что же с этим делать? Ну для начала надо бы написать инициализатор который подтащит по ключевым именам (строкам) уже готовые и ранее серрилизованные объекты.

Туториалы для геймдева #0 StaticData Gamedev, Мануалы, Tutorialsgamedev, Progrmming, Csharp, Json, Unity, Unreal Engine 4, Длиннопост

Легчайше!


Ну а вот собственно например инициализатор оружия:

Туториалы для геймдева #0 StaticData Gamedev, Мануалы, Tutorialsgamedev, Progrmming, Csharp, Json, Unity, Unreal Engine 4, Длиннопост

Собсно что тут делать - дело ваше. У меня например только подтаскиваются пассивные и активные убилки из той же самой StaticData.

Итоги:


Мы получили МОЩНЕЙУЮ систему для хранения и доступа к данным. Которую из-за гуглдока также сложно потерять (ну если вы вдруг не умеете пользоваться гитом).


Пусть это не самый эффективный и аккуратный вариант реализации, но даже он сэкономит вам ТОННЫ времени) Удачи,  до встречи в следующем туториале!

P.S. Да, наконец то! Думал у меня пальцы отвалятся пока пишу! Фуууух)

Показать полностью 12
[моё] Gamedev Мануалы Tutorialsgamedev Progrmming Csharp Json Unity Unreal Engine 4 Длиннопост
47
253
ELForcer
ELForcer
7 лет назад
Информационная безопасность IT

Как я провёл аудит Андроид-приложения⁠⁠

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


Я являюсь всего лишь программистом-любителем (знаю по немного C#, Python, Delphi, Visual Basic), никогда не пилил приложение для Андроида (хотя давно уже хочется сделать свой первый "Hello World!", на каком нибудь фреймворке.


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


Скачав приложение, вооружившись сниффером траффика, запускаю приложение. Просит авторизацию по телефону. Вводим левый номер, смотрим сниффер. И что мы видим?
Мы видим отправку HTTP запроса с номером телефона и получаем в ответ.... ОТПРАВЛЕННЫЙ КОД ДЛЯ СМС!!! То есть не "ОК, я отправил СМСку", а сразу код, который должен придти по СМС! Наверно это сделано, что бы не долбали запросом с неверными кодами СМС, а он просто сравнивает в памяти приложения что вводит пользователь и полученный по HTTP-запросу код.
Итак. Первая уязвимость уже найдена. Мы можем авторизоваться под любым номером, даже не имея его.


Я решил проверить вторую уязвимость, которую находил в первом приложении при аудите, а это отправка 100500 СМСок с кодом авторизации.

Для удобства отправки запросов, я решил мучать уже не их приложение, а Python и Grab.

Накидав небольшой скрипт, подставил запросы из сниффера, ввожу номер знакомого и запускаю 6 раз подряд. В ответ получил 6 разных кодов. Спрашиваю знакомого, сколько пришло СМС? В ответ кидает те же самые 6 кодов.

Итак. Сразу 2 уязвимости - СМС-флуд (задолбать конкретный номер) и возможность атакующего обнулить баланс у СМС-провайдера, который отправляет СМС. В среднем 1 СМС стоит 1,5 рубля (уже работал с ними). Неспешная скорость отправки СМС 1-3 СМС в секунду. Это значит за час можно опустошить счет ~5400-16200р. кидая СМС на один и тот же или на разные номера (зависит от настроек скрипта).


Идем дальше. Смотрим какие запросы еще попали в сниффер.

Проверка номера телефона. Отправляется только номер телефона. В ответ получаем его ID, баланс, переписку с фирмой.


Так же получаем еще один HTTP-запрос об истории покупок, где покупал, сколько потратил.


В итоге получаем еще одну уязвимость. Точнее утечку информации.

Можно по номеру телефона узнать кто где когда бывал и и сколько тратил.

Обязательно ли знать номер телефона что бы получить инфу? Нет.
Получаем еще одну утечку. Можно просто перебирать все ID и получить ВСЮ информацию:
телефон, на что тратил, когда тратил, сколько потратил, переписку.

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


Идем дальше. Выполняем просьбу знакомого, а именно узнать почему нельзя выиграть в игре, есть ли там вообще рандом в рулетке?


С помощью другого приложения я сделал Backup программы и получил APK-файл приложения и скачал его на комп.

Дальше я его распаковал его как и ZIP-архив и смотрю структуру файлов.

Целью было найти все возможные HTTP-команды.

Обнаружив в папке assemblies Xamarin библиотеки, я смекнул, что приложение походу писали на .Net framework и решил проверить это. Для этого я вооружился JustDecompile и открываю одну из библиотек. И действительно! Программа смогла её вскрыть. Правда распознала не весь исходный код, как оказалось после, но другой Решейпер распознал примерно так же, так что не его вина.


Запросов не обнаружил, Возможно они остались не в раскодированной части, но обнаружил что названия функций похожи на названия HTTP-запросов. Решил проверить. В Python вбил запрос, получаю ответ. Смотрю справочник в исходниках и действительно, ответ говорит что мы ничего не выиграли.


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


Итог:
1. Возможна авторизация без СМС под любым номером.

2. Можно организовать СМС-флуд, опустошить счет провайдера.

3. Утечка информации (телефоны, заказы (что, где когда, почем, у кого), переписка). Не обязательно знать номер телефона, можно прогнать циклом ID.
4. Сбор номеров телефонов посетителей кафешки из п.3. И использовать в своих целях

5. Возможно искажение информации (например обнуление рейтинга всех заказов так же циклом по ID заказа).


6. И самое интересное: Как мне сказал тот знакомый, что бы получить халявный кофе, достаточно сказать  номер телефона. Можно найти в результатах у кого есть халявный кофе и выпить за него )))

7. Врут с политикой конфиденциальности. Пишут что используют шифрование (при соединении его нет, обычный HTTP без SSL), Защита личных данных (ага, уже мной доказано, что нет).


Найденные уязвимости исправить не сложно.

1. Для начала нужно использовать защищенное соединение на сайте,

2. Не отсылать код СМС в запросе,

3. Вместо ID и телефона в запросах использовать ID-сессии в формате GUID или более длинный (срок жизни на усмотрение разработчика) после подтверждения номера телефона.

4. Запретить флуд СМС на один и тот же номер с таймером 5 минут и с одного и того же IP-адреса.

5. Более сложное: Анализировать резкий всплеск отправки СМС и временно прекращать отправку СМС (скажем минут на 5), если вдруг например в течении 5 секунд отправилось 10 СМС сразу даже если на разные номера и с разных IP.


Я хотел об этом сказать разработчикам, написал им на почту, на PlayMarket), но пока они не ответили (прошло уже больше суток). Надеюсь у них есть программа Bug Bounty, хотя я сомневаюсь.

Показать полностью
[моё] Информационная безопасность Json Обратная связь Приложение на Android Аудит Длиннопост Текст
50
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии