Pull to refresh
12
0.1
Сергей Игушкин @h0tkey

Kotlin/Java Developer

Send message

Игра в безопасность Android-приложений

Level of difficultyMedium
Reading time20 min
Views7.9K

Давайте в общих чертах рассмотрим вопросы взлома и защиты Android-приложений. 

В рамках статьи нас интересуют сами процессы взлома и защиты, а не конкретные методики работы с конкретными инструментами. Поэтому разберёмся с этими процессами и постараемся сделать выводы. Чтобы читать было интереснее, я решил попеременно ставить себя и на место нападающего, и на место защищающего приложение человека. Что-то вроде шахмат: сначала ход делает нападающий, а затем защищающийся. Пока кто-то не победит. Пройдём путь, постепенно наращивая сложность, от простого вроде HTTPS — к более сложному, вроде обфускации и деобфускации, изменению поведения. И под конец перейдём к C++ и просмотру его Assembler кода.

Читать далее
Total votes 24: ↑24 and ↓0+24
Comments9

Парадокс Соломона. Легко давать советы другим, но не себе

Reading time5 min
Views16K

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

Почему, например, даже образованные разумные люди нередко поддаются на классические схемы очередных мошенников, верят заманчивым рекламным обещаниям, участвуют в сомнительных конкурсах или, скажем, выкатывают непротестированную сборку прямо в прод?

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

Читать далее
Total votes 35: ↑28 and ↓7+35
Comments24

Миф о незаменимом разработчике

Reading time6 min
Views37K

Давным-давно, в далекой-далекой галактике, жил да был старший разработчик, который считал себя незаменимым. А работал он в одной и той же компании со дня ее основания. Он разработал архитектуру главного веб-приложения и с нуля создал всю корпоративную инфраструктуру. При нём сменилось пять CTO, компания мигрировала с AWS на Azure и обратно. Он исправил бесчисленное количество багов и привел в компанию порядка 10 новых разработчиков. Работал он днями и ночами, чтобы система, не дай Бог, не вышла из строя. А еще он никогда не уходил в отпуск.

И вот однажды наш разработчик заболел. Да еще как! Ему пришлось взять отпуск на целый месяц, к тому же руководство запретило ему любое общение с компанией и коллегами. Сидя в заслуженном отпуске, разработчик продолжал тревожиться о судьбе компании, и когда пришло время вернуться в офис, он ожидал, что там воцарился хаос, всё сломалось, сгорело и вообще — без него не работает. И наш разработчик был крайне поражен, когда узнал, что всё в порядке и работает не хуже, чем раньше. А кое-где даже стало чуть-чуть получше. Он-то думал, что за долгие годы стал незаменим. Но оказалось, что мнимая незаменимость — всего лишь плод его воображения. Легенда, миф. Бабушкина сказка...

Читать далее
Total votes 55: ↑46 and ↓9+47
Comments143

Астероидная опасность

Reading time10 min
Views17K
Несколько раз в год мы узнаем из СМИ пугающие новости — астероид со страшным номером вот-вот сблизится с Землей на опасное расстояние. Обещанный день наступает, катастрофы не происходит, про пролет в лучшем случае рассказывают на профильных астрономических сайтах, а мейнстримные СМИ про него уже давно забыли, и в особенно веселых случаях успели за прошедшее время выпустить еще несколько аналогичных кликбейтных пугалок. С 2015 года человечество отмечает 30 июня как “День астероида”, целью которого является в том числе и просвещение в вопросах астероидной опасности, чем мы с вами в этом материале и займемся.


Падение Челябинского метеорита
Читать дальше →
Total votes 50: ↑48 and ↓2+62
Comments145

О квадратных уравнениях в правильном порядке

Reading time4 min
Views46K

Как вам преподавали квадратные уравнения в школе? Это был 7-8 класс, примерно. Вероятнее всего, вам рассказали что есть формулы корней через дискриминант, что направление ветвей зависит от старшего коэффициента. Через пару занятий дали теорему Виета. Счастливчикам еще рассказали про метод переброски. И на этом решили отпустить.

Читать далее
Total votes 82: ↑78 and ↓4+95
Comments88

Лучший способ выбора случайной точки в круге

Reading time10 min
Views23K
image

Допустим, вам нужно найти случайную точку с равномерным распределением в круге. Как же это сделать лучше всего? Когда я впервые начал изучать эту задачу, я работал над программным проектом, требовавшим случайного распределения значений в круге, но довольно быстро я спустился в неожиданно глубокую кроличью нору, заполненную любопытной математикой, поэтому решил объединить все свои находки в одну статью.
Читать дальше →
Total votes 73: ↑73 and ↓0+73
Comments41

Иммутабельная архитектура

Reading time6 min
Views10K

Эта статья является переводом материала «Immutable architecture».

В этом посте автор оригинала хотел бы показать общий подход к внедрению иммутабельности в кодовую базу на архитектурном уровне.

Прежде всего, термин «Иммутабельность», применяемый к структуре данных, такой как класс, означает, что объекты этого класса не могут изменяться в течение их жизненного цикла. Существует несколько типов иммутабельности со своими нюансами, но это не являются для нас существенным. По большей части мы можем сказать, что класс является либо изменяемым, что означает, что его экземпляры могут изменяться тем или иным образом, либо иммутабельным (неизменяемым), что означает, что как только мы создадим экземпляр этого класса, мы не сможем изменить его позже.

Читать далее
Total votes 14: ↑11 and ↓3+10
Comments13

«Однорукий интерфейс»: баг или фича, позволяющая Делимобилю отнимать деньги у пользователей?

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

Также в статье пойдет речь о таких абстракциях, как пользователь — это заказчик, договор — это техническое задание, приложение — это сотрудник компании, а баг-репорт — это исковое заявление.



В конце девяностых, начале нулевых мы повсеместно сталкивались с понятием «однорукий бандит». Так назвали популярные игровые автоматы — яркие, красивые, простые и удобные конструкции, заманивающие граждан. Потянув одной рукой рычаг такого автомата, можно было остаться без денег.

Как говорится, времена меняются. Бандиты существует теперь в специализированных игровых зонах. А на смену им приходят интерфейсы, у которых вместо одного рычага одна кнопка, и с которыми мы также взаимодействуем одной рукой, только уже через смартфон.
Читать дальше →
Total votes 173: ↑162 and ↓11+207
Comments448

Flutter и десктоп разработка

Reading time5 min
Views11K
Идея писать мультиплатформенные приложения уже далеко не нова. Flutter так же предоставляет возможность это делать. В этой статье я постараюсь описать два подхода запуска мобильного приложения на десктопе, которые я сам использую для разработки мобильных приложений. Я перестал запускать эмулятор и симулятор во многом потому, что появилась возможность обойтись без них. Тем, кому интересна идея, добро пожаловать под кат.
Читать дальше →
Total votes 13: ↑11 and ↓2+12
Comments12

Леммы о разрастании для регулярных и контекстно-свободных языков

Reading time12 min
Views12K

Две леммы о разрастании — утверждения, использующиеся для доказательства ограниченности важных классов формальных языков: регулярных и контекстно-свободных. Важность этих классов для программистов понять легко: регулярные выражения (один из видов описания регулярных языков) в работе используются достаточно часто, а уж языки программирования, синтаксис которых описывается контекстно-свободными грамматиками, и подавно.


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


План такой: разбираемся, что такое регулярные языки и какова связь между регулярными выражениями и конечными автоматами, формулируем и доказываем лемму о разрастании для регулярных языков, используем её для доказательства нерегулярности нескольких языков. Затем похожий трюк проделываем с контекстно-свободными языками, по пути выясняя, как они связаны с регулярными языками и как обходить обнаруженные ограничения при помощи грамматик общего вида. Поехали!




КДПВ иллюстрирует процесс разрастания для КС-грамматик

Читать дальше →
Total votes 33: ↑33 and ↓0+33
Comments11

Как мы взвешивали товары или маленькая ода автоматизации

Reading time3 min
Views11K
Купили невесомый саморез за 0 рублей и теперь думаете, куда прикрутить? Размышляете о теории заговора в лице пиар-службы магазина? Хорошо, если не понимаете, о чём идёт речь. Это значит, что до вас не добрался мем с весами, которым почему-то все родственники считают важным со мной поделиться.

Мем с весами в Леруа Мерлен
Начало и развитие истории, откуда я взял эту картинку.

История с весами мне напомнила случай, который случился на старте карьеры в Леруа три года назад. Я пришёл в эту компанию на позицию бэкенд-разработчика и сразу попал на трёхнедельную интеграцию: предстояло побывать почти на всех ролях в магазине. Через пару недель уже поработал с местным айтишником (привет, Коля!), ночью потаскал коробки на складе и разобрался в устройстве кухонной вытяжки. Как это было, это отдельное приключение, достойное собственного поста. Парой слов: для разработчика это необычный опыт, который даёт прочувствовать боли сотрудников и покупателей на собственной шкуре.
Читать дальше →
Total votes 15: ↑12 and ↓3+15
Comments18

Темы и стили в Android без магии. И как их готовить с SwitchCompat

Reading time6 min
Views16K

В предыдущей статье мы рассмотрели как использовать темы и стили на уровне кода, на примере кастомной view. В этой статье давайте разберем несколько способов стилизации стандартного ui элемента, а в частности SwitchCompat.
Читать дальше →
Total votes 14: ↑14 and ↓0+14
Comments1

EyeWire — продолжаем изучать тайны мозга

Reading time4 min
Views4.2K

Эскиз фрески для города Кембридж, штат Массачусетс. Автор — Даниэла Гамба.

Игра EyeWire, про которую я уже писал здесь статью, продолжает нарабатывать новый материал. Ученые в лаборатории Себастьяна Сеунга не полагаются только на игру и только на усилия добровольцев от науки, чтобы продвигать исследования в области изучения мозга, но она безусловно имеет научную ценность.
Читать дальше →
Total votes 15: ↑14 and ↓1+13
Comments7

О камнях с неба

Reading time15 min
Views52K

В свое время Французская Академия наук, изучив свидетельства о падении камней с неба и сами камни, постановила: камни с неба падать не могут, потому что им там неоткуда взяться и многие музеи, не желая быть осмеянными за суеверия, поспешили избавиться от коллекций небесных камней. Но факты — вещь упрямая, камни с неба не послушались ученых и продолжали падать, и вскоре ученые изменили свое мнение о метеоритах, а они сами стали едва ли не самым желанным объектом для изучения. Ведь это был тогда единственный способ заглянуть за границы земной атмосферы.
Читать дальше →
Total votes 157: ↑157 and ↓0+157
Comments78

Видеореклама: must have успешного бизнеса

Reading time13 min
Views40K
Нельзя забывать: бизнес успешен только тогда, когда его продукт вызывает в покупателях эмоциональный отклик. Но как рассказать о своих услугах максимальному количеству людей за ограниченный промежуток времени? Есть ли способ заставить покупателя «выслушать» вас до конца?

Почему видеоролики нравятся людям и как они помогают бизнесу


Рисованный видеоролик Spotify позволил новому музыкальному сервису обойти iTunes за 5 месяцев после запуска и принести Universal Music рекордную прибыль — более 30 млрд долларов.

Количество пользователей файлового хостинга DropBox за 1 месяц распространения ознакомительного видеоролика увеличилось на 10 %. За первые 5 лет после запуска число пользователей сервиса выросло с 0 до 300 млн, а его стоимость возросла до 400 млрд долларов благодаря короткому эксплейнеру.

СИБУР, крупнейшая нефтехимическая компания России, активно использует анимационную видеорекламу для привлечения новых клиентов. Сложные производственные процессы становятся понятны после просмотра рекламного ролика.
Читать дальше →
Total votes 33: ↑22 and ↓11+11
Comments0

Деревья выражений в enterprise-разработке

Reading time19 min
Views41K
Для большинства разработчиков использование expression tree ограничивается лямбда-выражениями в LINQ. Зачастую мы вообще не придаем значения тому, как технология работает «под капотом».

В этой статье я продемонстрирую вам продвинутые техники работы с деревьями выражений: устранение дублирования кода в LINQ, кодогенерация, метапрограммирование, транспиляция, автоматизация тестирования.

Вы узнаете, как пользоваться expression tree напрямую, какие подводные камни приготовила технология и как их обойти.



Под катом — видео и текстовая расшифровка моего доклада с DotNext 2018 Piter.
Читать дальше →
Total votes 45: ↑45 and ↓0+45
Comments11

Давайте разберём, почему покупатели задают «тупые» вопросы

Reading time4 min
Views71K


— Добрый день! Почём мороженое?
— Вот же ценник!

В этой ситуации покупатель и продавец считают друг друга идиотами. Тем не менее, неправ продавец — его работа как раз в том, чтобы отвечать на любые вопросы и продавать. Иначе вместо него поставили бы автомат по выдаче товара. Покупатель может быть плохо видящим, может просто не заметить ценник, может запутаться, что и где — но чаще ему нужно просто перепроверить информацию. А ему в ответ, по факту, хамят. Результат — нет сделки.

Очень много явно странных вопросов имеют совсем не то значение, которое озвучивается. Это касается и продаж, и обычной жизни. Давайте разберём ещё пару примеров. Начнём с риторических вопросов в духе «А этот пазл точно собирается? Там все детали внутри?».
Читать дальше →
Total votes 182: ↑175 and ↓7+168
Comments386

Position-independent code (PIC) в разделяемых библиотеках на x64

Reading time8 min
Views11K

enter image description here


Привет, я все еще Марко и все еще системный программист в Badoo. На прошлой неделе я опубликовал перевод о PIC в шареных библиотеках, но есть вторая часть – про разделяемые библиотеки на х64, поэтому решил не оставлять дело незаконченным.

Читать дальше →
Total votes 53: ↑51 and ↓2+49
Comments1

Разносим общий функционал приложений и конфигурации Gradle в отдельные модули

Reading time12 min
Views16K
Часто встречается ситуация когда необходимо использовать один и тот же код в разных проектах и при этом поддерживать его актуальность на каждом из них. В этой статье я покажу как можно вынести такой код в отдельные компоненты и использовать их через dependencies внутри build.gradle. Кроме общего кода так же будет рассмотрен пример с вынесением общих настроек build.gradle файла, кочующих из приложения в приложение.

Если у вас возникало отвращение при копировании одного и того же кода по проектам и желание как то это исправить, добро пожаловать под кат.
Читать дальше →
Total votes 16: ↑16 and ↓0+16
Comments7

Пешком по тайлам

Reading time6 min
Views24K


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

Ни один из известных нам сервисов не строил маршрут из точки А до точки Б там, где нет тропинок и тротуаров, зато полно заборов и домов причудливых очертаний.

2ГИС решил эту проблему. Мы научились строить маршруты для пешеходов по растеризованной карте местности. Карта формально представляется графом с вершинами на регулярной решётке в местах, где пешеход может находиться физически.

Принято считать, что такой способ строить маршруты неприемлем, потому что съедает много ресурсов. Под катом — как мы с этим справились.
Читать дальше →
Total votes 65: ↑64 and ↓1+63
Comments26
1

Information

Rating
3,961-st
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity