Balsamiq + dnSpy = ♥
2020-05-29 01:04 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Когда-то была такая программа для прототипирования интерфейсов: Balsamiq Mockups. Она была реализована на базе платформы Adobe AIR (для тех кто в танке, кратко суть: Adobe Flash для обычных приложений, вне браузера), по всей видимости разработчики хотели таким способом избежать сложности поддержки своей софтины для трёх платформ (Windows, Mac и Linux).
В те времена у Balsamiq Mockups был совершенно примитивный механизм защиты от пиратства: валидатор регистрационных ключей на базе асимметричной криптографии. Онлайн-активации не было. Традиционный для таких случаев подход (кряк, который заменяет открытый ключ + кейген на базе нового закрытого ключа) был не нужен. Всё было гораздо проще: прямо в программу был встроен блэклист утёкших в паблик регистрационных ключей (в кодировке base64). А далее просто берём готовый ключ из блэклиста, у которого в конце есть хотя-бы один символ паддинга ("="), и меняем последний символ перед "=" на такой, который сохраняет результат base64-декодирования; ну и разумеется, спокойно проходим активацию. It was like taking candy from a baby. В каком-то смысле, это была самовзламывающаяся программа.
Затем Adobe внезапно прекратила поддержку своей платформы AIR и ребятам из Balsamiq таки пришлось переписать свой продукт с нуля на native API для двух платформ: Windows и Mac. (Поддержка Linux по ходу где-то потерялась.) Теперь он называется Balsamiq Wireframes for Desktop. Не понимаю, почему, но почему-то в случае с Windows они решили, что нативной платформой является .NET. На сей раз с активацией всё по-взрослому: никаких вшитых в программу блэклистов, вместо этого есть обязательная онлайн-активация с привязкой к железу (хотя обещают, что лицензия привязана к юзеру, а не к железу — в общем, врут, гады; может, так пасут утечки, не знаю). С другой стороны, это же дотнет, а значит, в нашем распоряжении есть такой замечательный инструмент как dnSpy.
Прогресс в декомпиляторостроении для дотнетовской платформы, достигнутый в последние годы, меня просто поражает. Если вдруг вы не знали, dnSpy берёт дотнетовские сборки заданного процесса (туеву хучу DLLек, сотню или около того, размером в четвертьгига например) и просто, чёрт возьми, показывает их исходные коды! Можно открывать каждый namespace, каждый класс, каждое поле и каждый метод, читать код, ставить точки останова, step in и step over, изучать состояние локальных переменных, короче говоря, хозяйничать как будто это ваш исходный код! Разумеется, при таких раскладах, отучение нового Бальзамика от жадности заняло два дня, один из которых я потратил на изучение с нуля дотнетовского ассемблера и безрезультатные ковыряния в IDA.
Ну, я-то, бывалый C++ник, всегда подозревал, что Microsoft разработала платформу .NET с настолько богатыми метаданными, чтобы иметь возможность подглядывать в чужие исходники. Но чтобы так нагло? Просто полностью декомпилировать чужой код до последнего байта? (Единственное, что не учли в Microsoft'е, так это возможность разработки другими людьми таких же мощных инструментов для декомпиляции на дотнетовской платформе, хе-хе. И кстати, свою любимую винду они на дотнете переписывать не спешат. Ах, как жаль. Какая досада...)
В те времена у Balsamiq Mockups был совершенно примитивный механизм защиты от пиратства: валидатор регистрационных ключей на базе асимметричной криптографии. Онлайн-активации не было. Традиционный для таких случаев подход (кряк, который заменяет открытый ключ + кейген на базе нового закрытого ключа) был не нужен. Всё было гораздо проще: прямо в программу был встроен блэклист утёкших в паблик регистрационных ключей (в кодировке base64). А далее просто берём готовый ключ из блэклиста, у которого в конце есть хотя-бы один символ паддинга ("="), и меняем последний символ перед "=" на такой, который сохраняет результат base64-декодирования; ну и разумеется, спокойно проходим активацию. It was like taking candy from a baby. В каком-то смысле, это была самовзламывающаяся программа.
Затем Adobe внезапно прекратила поддержку своей платформы AIR и ребятам из Balsamiq таки пришлось переписать свой продукт с нуля на native API для двух платформ: Windows и Mac. (Поддержка Linux по ходу где-то потерялась.) Теперь он называется Balsamiq Wireframes for Desktop. Не понимаю, почему, но почему-то в случае с Windows они решили, что нативной платформой является .NET. На сей раз с активацией всё по-взрослому: никаких вшитых в программу блэклистов, вместо этого есть обязательная онлайн-активация с привязкой к железу (хотя обещают, что лицензия привязана к юзеру, а не к железу — в общем, врут, гады; может, так пасут утечки, не знаю). С другой стороны, это же дотнет, а значит, в нашем распоряжении есть такой замечательный инструмент как dnSpy.
Прогресс в декомпиляторостроении для дотнетовской платформы, достигнутый в последние годы, меня просто поражает. Если вдруг вы не знали, dnSpy берёт дотнетовские сборки заданного процесса (туеву хучу DLLек, сотню или около того, размером в четвертьгига например) и просто, чёрт возьми, показывает их исходные коды! Можно открывать каждый namespace, каждый класс, каждое поле и каждый метод, читать код, ставить точки останова, step in и step over, изучать состояние локальных переменных, короче говоря, хозяйничать как будто это ваш исходный код! Разумеется, при таких раскладах, отучение нового Бальзамика от жадности заняло два дня, один из которых я потратил на изучение с нуля дотнетовского ассемблера и безрезультатные ковыряния в IDA.
Ну, я-то, бывалый C++ник, всегда подозревал, что Microsoft разработала платформу .NET с настолько богатыми метаданными, чтобы иметь возможность подглядывать в чужие исходники. Но чтобы так нагло? Просто полностью декомпилировать чужой код до последнего байта? (Единственное, что не учли в Microsoft'е, так это возможность разработки другими людьми таких же мощных инструментов для декомпиляции на дотнетовской платформе, хе-хе. И кстати, свою любимую винду они на дотнете переписывать не спешат. Ах, как жаль. Какая досада...)