Пролог
Поскольку мой засланный казачок на складчине уже заблокирован и опасаться его разоблачения незачем, я, как и обещал не раз, поделюсь с сообществом этой, как мне кажется, занимательной историей о человеческой глупости и жадности, а также о том, к чему это все может привести и как с этим бороться. Прошу простить за некоторую избыточность изложения – мне хотелось сделать текст понятным не только для разработчиков, но и для всех пользователей OpenCart, и – особенно – для посетителей ресурсов, аналогичных тому, о котором дальше пойдет речь.
Изучение вражеской территории
Начать стоит с декабря позапрошлого года, когда в какой-то из одиноких зимних вечеров я обратил внимание на статистику переходов на демку своего шаблона Moneymaker 2. По ней было видно, что среди источников реферального трафика в топ-3 входил один сомнительный интернет-ресурс, появившийся не так давно, однако уже успевшей к тому времени обрести популярность среди других варезников (ресурсов, занимающихся распространением ворованных программных продуктов).
Отчасти эта популярность стала следствием деятельности главного героя этой истории – Робина Гуда, который, правда, делился с бедными не тем, что грабил у богатых, а вообще всем, что просто плохо лежало и каким-то образом попадало ему в руки (и порой даже покупалось им лично). Монетизация ресурса, где наш Робин Гуд неустанно трудится и по сей день, выстроена по классической для таких товарищей схеме – для затравки там бесплатно выкладываются старые модули и шаблоны, загруженные неизвестно где и содержащие неизвестно что.
Поскольку квалификация и умственные способности как администрации ресурса, так и ее представителей не очень высокие (в чем вы убедитесь дальше), ни о какой актуализации или проверке дополнений на предмет вредоносного кода речь не идет. А вот чтобы получить доступ к более свежим дополнениям, пользователям предлагается повысить статус своего аккаунта за относительно небольшую сумму. Помимо этого, какой-то заработок идет со складчин – это когда 15 «бизнесменов» скидываются по 50 рублей, чтобы купить один модуль на всех. После завершения подобных складчин к ним предоставляется доступ для всех, кто готов оплатить повышение статуса своего аккаунта.
Думаю, вам очевидна паразитическая суть деятельности таких ресурсов – они не производят, не разрабатывают и не улучшают абсолютно ничего, их главная задача – личное обогащение за счет воровства чужих разработок, их взлома и последующей перепродажи. Стоит ли акцентировать внимание на том, что все это несет угрозу не только и не столько разработчикам, сколько самим пользователям? Ведь обокрав и выложив в открытый доступ труд разработчика, воришки не просто лишают его заработка (который для многих является и вовсе единственным источником дохода), они делают намного более вредные вещи – убивают всякую мотивацию поддерживать и развивать свой продукт, в результате чего часть разработчиков просто снимает с продажи свои дополнения и переходит на разработку индивидуальных решений под конкретного заказчика, а другая часть идет в сторону усложнения жизни ворам, шифруя код своих дополнений и встраивая сложные механизмы защиты.
Как результат, усложняется жизнь и легальных пользователей, вынужденных ставить ионкуб, следить за совместимостью дополнений, обращаться за доработками исключительно к автору (ведь исходный код оказывается закрыт). Как видите, в долгосрочной перспективе действия воришек приносят пользу исключительно им самим, ведь в проигрыше остаются абсолютно все остальные – от самих разработчиков до простых пользователей. Именно по этой причине (а не ради денег или еще чего-то) мне захотелось хотя бы немного проучить тех, кто обворовывает меня и моих коллег, бессовестно зарабатывая на нашем труде.
Внедрение шпиона и подготовка ловушки
На вышеупомянутый ресурс был заслан пользователь, смешавшийся с другими любителями халявы, после чего я начал получать информацию об их действиях. Параллельно с этим, я решил изменить принцип распространения шаблона, который раньше с каждым обновлением выкладывался в разделе дополнений. Чтобы словить воришек, а заодно и структурировать пользовательские данные, я просил каждого покупателя своего шаблона перед выходом очередного крупного обновления оставить мне свою почту, домен и используемую версию опенкарта, после чего на указанную почту отправлялись сами обновления под конкретную версию движка (т.к. версии шаблона под разные движки существенно отличаются).
Задумка была следующей – воришка должен будет запросить обновление шаблона сразу под все версии OpenCart, чтобы потом всех их выложить на своем ресурсе. Очевидно, ему было бы недостаточно шаблона только под одну из версий движка, ведь его товарищи, использующие самые разные версии, останутся недовольны при таком раскладе. Поэтому я в преддверии обновления просто ждал, когда кто-то из покупателей шаблона запросит сразу все версии, после чего планировал отправить подозрительному человеку архив с небольшими изменениями. Затем, с помощью моего засланного казачка, я бы смог сравнить выложенный среди воришек шаблон с оригинальным, и, в случае совпадения внесенных мною изменений, вычислить по ним и наказать того пользователя, кому отправлялся измененный архив. К сожалению, мне не удалось сразу осуществить свой тщательно подготовленный план, поскольку я изначально переоценил сообразительность воришек.
Переоценка противника
Обнаружить распространителя удалось благодаря его собственной глупости (помните, я выше писал об умственных способностях представителей ресурса?). В начале февраля один из свежих покупателей шаблона поинтересовался у меня в ЛС, почему я спрашиваю о конкретной версии движка и почему не отправляю сразу все версии шаблона, благодаря чему привлек мое внимание. После получения ответа о том, что это делается в рамках борьбы с распространением вареза, озадаченный товарищ указал одну из версий и тестовый домен с адресом в зоне .tk, чем еще больше убедил меня в том, что я почти наверняка нашел того, кого искал. Для тех, кто не в курсе – доменная зона .tk (острова Токелау) является бесплатной, и эту зону часто используют для временных «одноразовых» доменов. Взвесив все за и против, я решил рискнуть и отправить этому господину намеренно сломанный шаблон, чтобы проверить, не всплывет ли отправленный архив с шаблоном у воришек – в случае, если бы этого не произошло, пользователю, разумеется, был бы отправлен исправленный архив с моими извинениями. В «доработанном» архиве было много ноу-хау, с которыми обычные пользователи шаблона пока что не имели удовольствия ознакомиться – например:
Сумма в корзине выводилась с произвольным набором цифр вместо стоимости товаров, добавленных в корзину
В почтовых адресах всех покупателей, которые вводили их при оформлении покупок, дописывались произвольные буквы и подменялись введенные
Во вводимых номерах телефонов все цифры 7 менялись на 1, а цифры 6 на 9
При выполнении некоторых операций (например, открытии всплывающих окон быстрого заказа) часть ссылок на странице лишалась своих адресов, а некоторые элементы становились полностью прозрачными
Также были внесены изменения, делающие работу стикеров и другой функциональности абсолютно непредсказуемой, в итоге шаблон выглядел вполне рабочим на первый взгляд, но в реальном магазине им пользоваться было бы невозможно. Вдоволь повеселившись в процессе подготовки этой версии шаблона, я отправил ее вышеупомянутому подозрительному покупателю.
Уже через 2 дня после отправки появилась информация о том, что свежую версию шаблона выложили на складчине у воришек. Но, как оказалось, мне даже не было нужды проверять, соответствует ли выложенная версия той самой отправленной, т.к. наш непуганый Робин Гуд додумался процитировать на своем ресурсе мои же слова из нашей с ним личной переписки с форума (обратите внимание на его стиль общения, в частности на многоточия):
И сравните с этим постом:
Разумеется, версии шаблона тоже оказались одинаковыми – в результате вышеупомянутый господин, предварительно проспонсировавший развитие шаблона и получивший сломанную версию с сюрпризами, отправился в заслуженный бан на форуме, а я испытал приятное чувство сатисфакции от наказания человека, ежедневно обворовывающего меня и моих коллег. Конечно, наш герой сперва очень возмущенно написал мне с вопросами о том, за что его заблокировали и какие доказательства его вины (на самом деле просто хотел узнать, где именно попался), но после того, как я ему показал вышеприведенные скриншоты переписок, он даже извинился (снова эти многоточия):
Но, как оказалось, история нашего с ним общения только начиналась..
Читайте продолжение в следующей части