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

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

Например, в коде C# обычный символ точки с запятой (;) заменяется на греческий вопросительный знак (?). Подло, зато эффективно.

Кроме точки с запятой, в Unicode есть несколько других символов, которые одинаково выглядят в разных алфавитах. Они называются омоглифами.

Mimic использует это, он заменяет распространённые символы ASCII на омоглифы из других алфавитов.

Например, код начинает выдавать такую ошибку.



Кажется, с чего бы это?

Или можно поменять символы по полной программе.



По мнению автора, скрипт вызывает следующие чувства:

  • веселье
  • расстройство
  • любопытство
  • убийственную ярость

С программой можно поиграться на своём собственном исходном коде — просто проверить, сможете ли вы найти все ошибки.

Проделать это с чужими исходниками без ведома автора опасно. «Вас могут уволить, а потом убить», — предупреждает автор.

Вообще, такие фокусы подходят для разного рода мошенничеств: указания липовых URL и поисковых запросов, обмана клиентов в чёрном SEO, атак XSS и т.д.

Комментарии (29)


  1. KvanTTT
    25.10.2015 21:36
    +6

    Pусскoязычногo прогрaммиста будeт обмaнуть всe же нe так легkо (нaвернякa мнoгиe стaлкивались с тeм, что клaвиша русскoй «с» совпадаeт c английской «c»).


    1. Mad__Max
      26.10.2015 05:19
      +6

      У вас ус отклеился Mimic в комментарии основательно похозяйничал.


      1. KvanTTT
        26.10.2015 13:50
        +4

        Это вы по «k» догадались и решили проверить остальной текст? :)


        1. Mad__Max
          26.10.2015 18:57
          +1

          Да, на «k» mimic спалился(хотя предполагаю это специально сделано в качестве подсказки, т.к. заменена только одна буква) — английская и русская визуально слегка отличаются.
          Решил проверить — есть ли еще подмены? И оказалось что почти половина букв в комментарии заменена на омоглифы.


          1. KvanTTT
            26.10.2015 19:11

            Да, специально. Правда mimic не использовал, все сделал вручную.


            1. monah_tuk
              27.10.2015 12:08

              Почти как:
              — капс отпусти
              — А Я ЕГО НЕ НАЖИМАЛ! С ШИФТОМ — ТАК ЯРОСТИ БОЛЬШЕ!

              ярости больше :)


  1. FoxF
    25.10.2015 22:39

    Mimic умеет работать с системой контроля версий (например git)? Иначе как-то скучно получается.


    1. Lamaster
      26.10.2015 00:47

      Тоже подумал, что самым подлым будет, если скрипты на pull / push будут работать. Это самое скрытное и незаметное место.


  1. VampiRUS
    26.10.2015 02:58

    Может для sublime есть плагин, который подсвечивает разным цветом кириллицу и латинские символы?


    1. cyberXndr
      26.10.2015 09:52

      ctrl+F [a-zA-Z]


      1. darkfrei
        26.10.2015 11:13

        А спецсимволы чтобы отличать '' от " и подобное?


      1. VampiRUS
        26.10.2015 16:15

        Так мне не искать, а заметить случайную опечатку.



  1. Zibx
    26.10.2015 03:48
    +17

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


  1. 6opoDuJIo
    26.10.2015 09:11

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

    — Чуть более весёлым был момент, из-за которого текстовый файл (C# исходник) гит воспринимал как бинарный — в конце одной из строк оказался нулевой байт.


  1. Foror
    26.10.2015 09:37
    +2

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


    1. darkfrei
      26.10.2015 11:20

      Как задать условие? Если (спецсимвол № 24423) немного похож на (символ N), то меняем одно на другое?


      1. Foror
        26.10.2015 11:41
        +2

        Все проще. Ищем символы, которые выходят за диапозон ASCII, затем смотрим предварительно составленный словарь перекодировки ";" => ";". Для этого также можно пройтись по тексту и найти все странные символы, после чего составить словарь. Если в коде есть русский или любой другой язык, то диапозн этих символов также исключаем, как и ASCII.


        1. ValdikSS
          27.10.2015 21:30

          В каких-то случаях достаточно выполнить декомпозицию по NFKC Unicode.


        1. Zibx
          28.10.2015 03:54

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


    1. Siper
      26.10.2015 18:54

      Менеджеры тоже не пропадут — распечатать, отсканировать, распознать


      1. darkfrei
        27.10.2015 00:04

        Распознавание различает I и l? Двойной апостроф и прямые кавычки?


        1. Sadler
          27.10.2015 10:47

          Да, в отдельных случаях I и l различает по словарю.


  1. EminH
    26.10.2015 12:06

    Идеально для защиты скаченных курсовых от автоплагиатдетекторов :)


    1. PEgorov
      26.10.2015 12:57

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


  1. Psionic
    26.10.2015 12:30
    +4

    Многолетний трюк по обходу фильтров матершины нашел практическое применение?


  1. xilix
    26.10.2015 13:00
    +1

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


    1. monah_tuk
      27.10.2015 12:11
      +1

      Да тогда проще уж скринами его отправлять


  1. NetBUG
    28.10.2015 02:27

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