• Telegram сам добавляет чужие контакты? Это норма



      Пользуюсь Telegram не первый год. Всё хорошо, но вот какое-то время назад начала смущать одна странная деталь: время от времени Telegram самостоятельно добавлял в мои контакты неизвестных людей, сопровождая это уведомлением, что они зарегистрировались в Telegram. Вообще Telegram не должен показывать номера телефонов людей, которых нет в вашей телефонной книге, но для таких самопроизвольно появляющихся контактов я видел и номер телефона. Всё выглядело так, будто это контакты из моей телефонной книги. Но их там не было. Тогда я решил, что Telegram автоматически добавляет в мои контакты тех людей, которые добавили мой номер телефона в свою телефонную книгу. Поскольку мой номер телефона несколько лет назад был указан на одном небольшом сайте, я решил, что кто-то из немногочисленных посетителей зачем-то добавил меня в свои телефонные книги, и это какое-то время выглядело правдоподобно.
      Читать дальше →
    • Методы модификации машинного кода: «селекция» vs. «генная инженерия»



        Про мифы касательно ГМО здесь уже писали. В дополнение к этому я хотел бы поделиться отличной аналогией с разбором реальных примеров из области реверс-инжиниринга и модификации машинного кода, что будет понятно и близко именно программистам.

        «Мутации» машинного кода


        В качестве примера возьмём приставку NES (известную у нас как Dendy), в которой используется процессор 6502. Система команд у него очень проста — опкод представлен всегда одним байтом, и каждый из 256 хоть что-то, да делает. Никаких «защит» от дурака не предусмотрено, и почти любой случайный набор байт будет выполняться без сопротивления со стороны процессора. Таким образом, мы можем взять ROM какой-нибудь игры, исправить в нём случайные биты (будем называть это «мутациями») — и после запуска наблюдать забавные глюки в разных неожиданных местах, но при этом в целом игра скорее всего будет работоспособной. Похоже, что на YouTube имеется целый жанр подобного видео. Полученный таким образом машинный код наверняка не очень корректен, но в большинстве случаев процессор сможет его выполнить и что-то сделать.

        Как оказалось, такую методику используют не только для веселья (а играть в знакомые игры с неожиданными глюками весьма забавно), но и для полученя вполне себе конкретных модификаций: делают большое количество «мутантов» и ищут тот, в котором проявился нужный эффект. Точь-в-точь как в современных методах селекции, когда зародыши организмов подвергаются воздействию мутагенов (что приводит к случайным изменениям в генетическом коде), а потом из того что смогло вырасти отбираются те, у которых есть нужный признак. Полученные таким образом организмы получают в довесок массу других нежелательных мутаций. Избавляются от них путем постепенного скрещивания c нормальным видом, добиваясь получения более-менее вменяемого организма с нужным признаком и минимумом других мутаций, которые оказались заметны. То же самое можно сделать и с машинным кодом.
        Читать дальше →
        • +23
        • 12,6k
        • 7
      • Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте

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

          Разработка Need For Speed III Modern Patch

          Вообще я достаточно редко играю в компьютерные игры. Бывало, не играл по несколько лет подряд. Но иногда во мне просыпается маленький реверс-инженер, который мотивирует меня забраться в машинный код какой-нибудь любимой игрушки из прошлого. В последний год я занимался доработкой Need For Speed III: Hot Pursuit (1998 года). Это моя любимая игра в жанре, но теперь я, к своему сожалению, знаю о том, насколько отвратительно она написана. Большое количество маленьких багов в самых неожиданных местах — прямое следствие низкого качества кода.
          Читать дальше →
        • Need For Speed III Modern Patch: более 100 изменений без исходных кодов

            imageКогда я впервые увидел Need For Speed III, от изумления я даже присел. Диск шёл в подарок к видеокарте моего первого компьютера, и это была первая трёхмерная игра в моей жизни. До этого момента я совершенно не подозревал, что графика в играх может быть настолько потрясающей. Это был далёкий 2000 год. Не счесть количество часов, потраченных на игру в сплитскрине за одной клавиатурой с моим двоюродным братом… Музыке — отдельное слово. Мне она настолько нравилась, что я даже записывал её на кассету, а с кассеты потом обратно на компьютер, при помощи стандартной «Звукозаписи». Это единственное что я тогда смог придумать. Слушал я эти записи по кругу по много часов подряд. MP3? Что это за странные буквы? Только WAV, только хардкор!

            И вот, годы спустя, мне захотелось сыграть в эту игру. Но она не заработала на современном железе. Пришлось разбираться. В процессе захотелось ещё и поддержку широкоформатных разрешений… и понеслась! Немного увлёкся этим делом, и в результате получился внушительный патч. Более 8000 строк на ассемблере, исписано 18 листов А4, огромный список изменений…
            Читать дальше →
          • Сборка ICO файла с иконками в формате PNG при помощи FASM

            • Tutorial
            Иногда я пишу небольшие программы на C++, и часто выходит так, что иконка программы «весит» больше, чем собственно сама программа. Так же вышло и при написании Sound Keeper: программа — 14КБ, иконка 16×16 + 32×32 + 48×48 пикселей — 15КБ. Какое расточительство! К счастью оказалось, что Windows (начиная с Vista) поддерживает PNG внутри ICO. Это как раз то, что нужно! Но почему-то не нашлось программы, которая бы позволила самому оптимизировать файлы PNG и собрать из них файл ICO. Поскольку у файлов ICO очень простой формат, соберём его при помощи FASM. Это нестандартное использование «плоского» ассемблера показывает, что его можно применять в самых неожиданных ситуациях, и это работает!
            Читать дальше →
          • Sound Keeper — предотвращает «засыпание» цифровых аудио-выходов SPDIF или HDMI

              Если вы когда-нибудь пользовались цифровыми аудио-выходами (SPDIF или HDMI), наверняка вы сталкивались с проблемой, когда во время тишины акустика «засыпала», после чего начало следующего звука обрезалось из-за того, что акустике нужно время на «пробуждение» и инициализацию после сна. Это сильно раздражает. Если у вас никогда не было такой проблемы — значит вам повезло с драйвером. Если же проблема имеет место — она решается непрерывным воспроизведением абсолютной тишины. Костыль, но это единственный доступный способ заставить драйвер не выключать цифровой аудио-выход.

              Ранее для этих целей существовала одна программа с названием SPDIF Keep Alive. Но на мой взгляд она слишком тяжёлая для решения такой простой задачи: требует наличия фреймворка .NET, расходует слишком много памяти и процессорного времени. Поэтому я написал на C++ новую программу для решения проблемы.

              Читать дальше →
            • Advanced Locationbar для Firefox

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

                Locationbar² отлично демонстрирует это. Данное расширение добавляет в стандартную адресную строку возможность простым кликом по нужному сегменту URL подняться на несколько уровней вверх по структуре сайта, причём это «волшебное» поведение активируется только в том случае, если вести курсором мыши слева-направо от иконки типа соединения (можно рассматривать это как жест) или при нажатии Ctrl/Alt/Shift. Однако, кроме этого полезного изменения, как оказалось, Locationbar² ломает работоспособность доменов IDN — они отображаются в закодированном виде, а субдомен и вовсе целиком отбрасывается. Расширение не дорабатывается с 2011 года, со временем в нём возникли небольшие конфликты с новыми версиями Firefox, а автор расширения не выходит на связь.

                Пришло время сделать форк: встречайте Advanced Locationbar!
                Читать дальше →
              • В Miranda NG 0.95 появилась поддержка полноценных мета-контактов в ядре. Что дальше?

                  Прошло уже почти 2 года, как основные разработчики Miranda IM перешли в форк Miranda NG. С тех пор Miranda IM практически не развивается, а вот Miranda NG медленно, но верно идёт вперёд. В начале 2014 года вышла версия 0.94 с поддержкой шифрования в ядре, а совсем недавно вышел релиз 0.95, где была реализована полноценная поддержка мета-контактов взамен костылю, который годами использовался ранее. Теперь у каждого контакта своя история, а у мета-контакта — общая история без дублирования записей в базе.
                  Читать дальше →
                • Как воплотить в жизнь мечту детства и запрограммировать что-нибудь для Dendy

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

                    Прошли годы. С некоторой периодичностью погружался в эму-тему, изучая всё новое на тематических сайтах, но я не решался окунуться в изучение ассемблера 6502 и архитектуры NES. Внутренний конфликт рационального и иррационального. Я долго убеждал себя, что мне не нужно тратить на это время, но… сорвался. Глядя на то, какие интересные вещи делают энтузиасты эму-сцены, я взялся за свою давнюю идею со светлой мыслью: «Я тоже смогу!». Две недели пролетели незаметно, я еле смог остановить себя. И да, теперь я знаком с ассемблером без команд умножения, о чём раньше только слышал в песне о программистской молодости.



                    Очень вероятно, что сейчас вы вспомнили свой первый картридж для Dendy и меню с романтическим сюжетом и приятной музыкой. На таких картриджах никогда не было «серьёзных» игр, и не глядя на громкие надписи типа 9999-in-1, их обычно было что-то около пяти. Но это меню… Разве это не шедевр китайской мысли? :) Мне с детства нравилась эта мелодия (Unchained Melody), а фоновые изображения сейчас навевают кучу ностальгических воспоминаний. Поэтому я взял IDA и дизассемблировал меню 300-in-1, вырезал всё лишнее, исправил ошибки, добавил фейдинг да немного приятных мелочей — и получилась демка Unchained Nostalgia (для запуска нужен эмулятор, например, Nestopia), есть запись на YouTube.

                    Хотите также окунуться в олдскульное программирование? Делюсь самым полезным и интересным, что я нашёл по теме.
                    Читать дальше →
                  • Pure URL — автоматическое удаление utm_source и прочего мусора из URL

                      В то время, когда веб-разработчики тратят время на реализацию понятных человеку URL, ребята из Google Analytics придумали коварный план по уничтожению красивых URL в сети. То тут, то там мы попадаем на ссылки, щедро разбавленные параметрами вида utm_*, которые Google Analytics использует для сбора различной статистики о пользователях. Сколько можно это терпеть?

                      Вот такая драма

                      Это была последняя капля. Встречайте Pure URL! Расширение работает под Firefox 19+, Chrome 18+ и Opera 16+. Оно обрабатывает запросы ещё до их отсылки на сервер, на лету удаляя весь мусор из адресов. Даже если вы откроете ссылку со шпионскими параметрами в вашем IM, Pure URL любезно сделает так, что сервер даже не догадается об их существовании. Из длинной и ужасной ссылки на картинке получится лаконичное http://bigpicture.ru/?p=431513 — с таким URL значительно приятнее иметь дело.
                      Читать дальше →
                    • В официальном издании Age of Empires Collector's Edition на DVD используются крэки из сети

                        imageПервые части игры Age of Empires уже давно стали своего рода классикой. У этой игры до сих пор есть немало поклонников. В 2007 году вышло официальное коллекционное издание игры, которое включает первую и вторую части с дополнениями. Причём во всех странах, кроме США, оно вышло на одном DVD вместо четырёх CD. Тогда я уже немного занимался реверс-инжинирингом этой игры и знал, что оригинальные версии исполняемых файлов не захотят работать с одним общим диском, поскольку в код каждой части и их дополнений зашита проверка метки соответствующего диска. Очевидно, что у одного DVD не может быть сразу четыре разных метки, и после покупки русского DVD издания я ожидал увидеть перекомпилированные разработчиками версии файлов с изменённым кодом проверки наличия диска или вовсе без него. Но всё оказалось намного интереснее.
                        Читать дальше →
                      • Уведомление о том, что браузер устарел

                          ТизерОни уходят. Ещё вчера мы были вынуждены прикручивать очередной костыль для IE6/IE7, а сейчас в этом уже нет необходимости. В СНГ у IE6 сегодня всего 0.5% трафика, у IE7 — 1.8%. Они действительно уходят. Думаю, большинство верстальщиков давно уже не добивается попиксельного соответствия макету, а кто-то даже не проверяет на работоспособность сайтов в столь старых браузерах. В таком случае не будет лишним предупредить пользователя, что сайт может работать неправильно, и предложить обновиться. Предлагаю готовый комплект из панельки предупреждения и страницы с предложением выбрать новый браузер.
                          Читать дальше →
                        • phpBBex — добавляем автозагрузку классов и обработчики AJAX запросов

                            phpBBex logophpBBex — это расширенная версия phpBB 3, которая была анонсирована ранее на Хабре. Проект постепенно развивается, появляются новые полезные возможности. Сегодня у нас появился официальный форум и вышла новая версия нашего форка.

                            Как известно, код phpBB 3 был заложен в далёком 2002 году. Здесь всё по-старому. Нет никаких сложных абстракций, код простой и линейный. Для небольших проектов это не проблема. Но движок оброс функциональностью, и огромную массу кода сейчас не всегда просто изменить для достижения необходимого результата. Игнорирование современных паттернов мешает дальнейшему развитию. Понятно, что разработчикам phpBB важно следить за совместимостью кода со старыми модами, поэтому никаких серьёзных архитектурных улучшений ожидать не приходится. Выходом из ситуации должен быть phpBB 4 на основе Symfony 2, но за его разработку ещё не взялись. Очевидно, переписать такого монстра не так просто, так что в ближайшее время чуда не будет.

                            Поскольку в phpBBex планируется множество изменений, связанных с переводом интерфейса на AJAX, логичным было бы реализовать удобный механизм для добавления новых обработчиков AJAX запросов. Стандартным способом для phpBB сегодня является создание php файла в корне со своей логикой для каждой модификации. Это не дело. Мы попробовали добавить нечто вроде контроллеров. Обработчики сгруппированы в «классы-контроллеры», имеется единая точка входа, которая создаёт экземпляр необходимого «контроллера» и вызывает соответствующий обработчик. На основе этого мы создали систему анонимной оценки комментариев (почти как на Хабре).
                            Читать дальше →
                          • Создание прокси-dll для запуска DirectDraw игр в окне

                              В продолжение темы расширения функциональности готовых программ хотелось бы рассказать об ещё одном способе изменения логики работы уже скомпилированной программы, который не требует делать изменений в самом исполняемом файле. Это может пригодиться при распространении вашей модификации в США, где прямое вмешательство в исполняемый файл строго осуждается. Речь пойдёт о создании крошечной прокси-dll (всего ≈4 килобайта) для подмены используемой приложением библиотеки на примере ddraw.dll.
                              Читать дальше →
                            • Простой индикатор раскладки клавиатуры в курсоре на С++

                                Тема отображения текущей раскладки беспокоила хабрасообщество уже не раз. Я опробовал множество существующих решений, но по разным причинам они меня не устроили. Чтобы подобрать для себя наиболее удобный вариант отображения текущей раскладки, я написал небольшое приложение на C++, которое при нажатии на левый Shift отображает язык в системном курсоре редактирования текста. Менее 100 строк кода и около 4 килобайт в скомпилированном виде — на основе этого вы можете достаточно просто реализовать свой взгляд на то, как на самом деле должна выглядеть индикация текущей раскладки.
                                Читать дальше →
                              • Hosts Commander — консольный редактор hosts для Windows и Linux

                                  Hosts Commander призван максимально облегчить работу с файлом hosts из консоли. Если вам время от времени приходится забираться в этот файл (что характерно для веб-разработчика), и вы любите консоль — Hosts Commander может прийтись вам по душе.
                                  Год назад на Хабрахабре была анонсирована первая версия программы, которая работала только под Windows. Но с тех пор многое изменилось и стало лучше. Это отличный пример, как из простой идеи может вырасти нечто большее.
                                  Читать дальше →
                                • phpBBex — расширенная версия phpBB 3

                                    phpBBex logophpBB 3 — популярный бесплатный форум. Первая версия вышла в свет в 2000 году, и с тех пор вокруг этого движка сформировалось огромное сообщество. Не глядя на серьёзные архитектурные недостатки третьей ветки, которые остались в наследие от предыдущих версий, данный движок по праву считается одним из самых мощных решений среди бесплатных форумов. Огромное количество модов, написанных сообществом, только способствуют этому.
                                    Как правило, мало кого устраивает стандартная функциональность phpBB 3, и каждый владелец форума устанавливает несколько модов, либо использует готовые сборки, которые включают наиболее популярные модификации. Однако, не все моды реализованы достаточно хорошо. Что-то было написано для старых версий форума, и не было обновлено, из-за чего в новых версиях форума возникают какие-то проблемы.
                                    Несколько лет назад для форума родного города я создал форк с именем phpBBex, где постарался сделать phpBB 3 таким, каким вижу его я. Большинство проделанных изменений не существует в виде модов. Практически все установленные моды были сильно переработаны: исправлены ошибки, код адаптирован под последние версии phpBB. Недавно проект был переведён на Mercurial, в результате чего поддержка форка значительно упростилась. Надеюсь, что кто-то найдёт этот проект полезным.
                                    Читать дальше →
                                  • Smarty vs. Twig: производительность

                                      Smarty — один из самых старых шаблонизаторов для PHP. Если вы программируете на PHP — скорее всего, вам приходилось работать с ним. В 2010 году вышла третья версия этого шаблонизатора. Smarty 3 был написан с чистого листа, с активным использованием PHP5. Вместе с этим Smarty получил обновлённый синтаксис и современные возможности, включая наследование, песочницу и др.
                                      Twig — молодой шаблонизатор от разработчиков Symfony. Авторы позиционируют его как быстрый и функциональный шаблонизатор. По возможностям он во многом похож на Smarty 3. Twig отличает несколько другой синтаксис, а так же заявленная высокая производительность. Проверим?
                                      Читать дальше →
                                    • Hosts Commander — модификация hosts из командной строки

                                        Я хотел бы посвятить немного времени файлу hosts. Года два назад, когда я в очередной раз забирался в глубину системных директорий, чтобы подправить всего одну строчку в этом файле, мне подумалось, как было бы классно работать с hosts из командной строки. Тогда идея отправилась в дневничок, и долгое время оставалась нетронутой. Пару дней назад я реализовал почти все идеи, которые пришли в голову по этому поводу. Результатом делюсь с хабрасообществом. Буду рад, если кому-нибудь пригодится.

                                        Что получилось?


                                        А получилась небольшая программа hosts.exe, которую кратко можно охарактеризовать так:
                                        • Операции добавления, удаления и отключения хостов
                                        • Поддерживает операции над хостами по маске
                                        • Простые выборки из hosts по атрибутам и маске
                                        • Создание резервных копий hosts и откат последней операции
                                        • Поддержка IDN (можно создавать русскоязычные домены)
                                        • Поддержка IPv6 адресов
                                        • Поддержка алиасов (несколько доменных имён в строке)
                                        • Сохраняет исходное оформление и кодировку файла hosts
                                        • Большое количество алиасов для каждой команды (кому как удобнее)
                                        Читать дальше →
                                      • Доля Internet Explorer 6 упала ниже Opera Mini. А вы еще не тестируете в ней свои сайты?

                                          Сегодня доля Internet Explorer 6 составляет примерно 7-8% и продолжает падать. Однако популярность этого браузера все еще достаточно велика, чтобы лишать его пользователей возможности пользоваться вашими сайтами. Большинство разработчиков все еще проверяет каждую функцию на совместимость с этим браузером, кто-то даже бьется над попиксельным соответствием верстки с макетом. Но почему-то многие забывают про другой набирающий популярность браузер. Речь идет об Opera Mini. С развитием мобильных технологий люди все чаще выходят в интернет со своего мобильного. Если верить liveinternet.ru, Opera Mini используется для серфинга уже чаще, чем пресловутый IE6! Может быть займемся тестированием наших сайтов в самом популярном мобильном браузере? Тем более, что для этого не нужен мобильный телефон.