Pull to refresh

Comments 53

Хех. Припоминаю ситуацию, когда работал реверс-инженером в фирме по локализации. Исходников проекта не было.
И вот, уже пора сдавать проект. И менеджер заказчика решил выпендриться и в списке багов написал баг, который изначально в игре присутствует и к локализации никакого отношения не имеет.
Ну чтож. Вызов приняли. Выковыряли скрипты, аккуратно разобрались в логике работы и исправили баг. Было весело. :)
P.S. Не знаю зачем я это всё написал. :(
Я понимаю, в таких темах к терминологии придираться не comme il faut, но как обьяснить происхождение термина «бряк», от оригинала как по произношению так и по написанию он довольно далек. Тем паче, что вполне можно найти аналог и из незаимствованных слов
UFO just landed and posted this here
бряк — наше все, сколько себя помню бряк именовали именно бряком и никак иначе
Ни разу не встречал такого написания или не помню просто. Даже гугл плохо помнит: по «ставим брык» нашел 1 (один) результат, а по «ставим бряк» — 4 570
Ну это понятно, что есть «нотариально заверенный перевод», но изначально здесь речь зашла о том «откуда есть пошел бряк» и вообще вокруг него. Бряк устоявшееся сленговое понятие, значение которого понятно всем, кто в теме. Точки останова — уровень книг и MSDN. Бряк — разговорный стиль скорее.

Ну с бряком-то вроде разобрались, а вот «булевая» vs «булевская» вопрос не раскрыт ;)
А может быть, «булева»? По аналогии с алгеброй, функцией и т.п.
Да может и так, я исследования не проводил, а субъективно эти три написания встречаются примерно одинаково.
Булева — это типичное сокращенное прилагательное от «булевая», так же, как «красна» от «красная», «симпатична» от «симпатичная», и т.п.
Тем не менее, математики говорят именно «булева алгебра», а не «булевая алгебра». И это вполне естественно: поскольку Джордж Буль, в честь которого она названа — имя собственное, то «булева» — никакое не прилагательное, а притяжательное местоимение: «принадлежащая Булю». И, соответственно", никакого слова «булевая» в русском языке нет.
А вот слово «булевская» вполне возможно — есть же слова «петровский», «екатерининский», «андреевский»…
Вот чем мне нравится язык SmallTalk что никакой реверс — инженеринг в его случае не поможет. Соответственно невозможно создать ни кряк, ни взломщик. Правда багу при отсутствии исходников то же невозможно исправить. А недавно так нужно было…
Ну естественно «настоящие хакеры» испугались упоминания языка программу на котором нельзя сломать, и быстренько заминусовали. Теперь уже дело чести написать пост об этом незаслуженно неизвестном в России языке программировании, который с моей точки зрения является наиболее удобным и гибким воплощением ООП.
А вот напишите. Мне интересно. У компилятора что, какие-то особенные волшебные опкоды получаются, которые ни один дебаггер не знает?

P.S.: не голосовал.
Как раз сейчас этим и занимаюсь. В основном проекте нарисовался небольшой перерыв — появилась возможность. К понедельнику думаю сделаю.
По Вашему вопросу. Декомпилировать получится только виртуальную машину, соответственно изменить исходный код получится только её. Исходный код программы находится в отдельном образе — хранилище классов, и он представляет собой бинарник, структуру которого я думаю знают только в Sincome. И вот его уже никакой декомпиляцией не измениш.
По вашей логике, любой язык который использует ВМ невозможно исследовать. А при этом, люди Another World разобрали, а там как раз была ВМ и так же не было исходных кодов.
Возможно, но честно говоря я не слышал о такой возможности. Я работаю со Smalltalk — ом уже почти 10 лет, но ни разу не слышал о возможности дебажить упакованный образ. Там в принципе даже не команды ассемблера, а байт- код, инструментов для просмотра которого насколько я знаю не существует.
Ну вот мы и пришли к правильной формулировке вашего комментария — «Я не слышал о такой возможности»
Вы несколько наивно пишете о том, что как будто нельзя разобрать формат бинарного файла.

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

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

P. S. я абсолютно не знаком с данной средой.
UFO just landed and posted this here
Я вам даже подскажу кто знает структуру того тайного бинарника с исходным кодом. Это сама ВМ.
Не думаю что в Sincome не озаботились возможностью разборки своей BM. Ребята работают в основном с банковской сферой, так что там думаю все серьёзно. Но хотя можете при желании попробовать.
Ну это вполне объясняет отсутвие широкой информации о данной ВМ. Такие вещи обычно в общий доступ не идут.
Я как раз сейчас пишу пост об этом языке, и там расскажу его историю. Вообще то этот язык как бы не старше большинства из существующих. Первая реализация — 71 год.
Пишите конечно. Но наличие GNU Smalltalk подразумеват наличие исходных кодов. Так что мы приходим к тому, что скорее всего отсутствует спецификация конкретно ВМ Sincome.
UFO just landed and posted this here
«security through obscurity» что-ли?
UFO just landed and posted this here
>Ну естественно «настоящие хакеры» испугались упоминания языка программу на котором нельзя сломать…

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

PS Интересно, насколько сложно ломать LISP и прочую функциональщину, человеку с функциональными языками незнакомому.
Да элементарно. LISP, в общем-то, штука очевидная. Алсо, товарищ totuin, взломать можно все, кроме шифра Вернама, было бы желание. Единственная сложность с VM — под них приходится писать все инструменты самому.
А что, для JAVA машин нет декомпилятора?
Не могли бы вы объяснить, почему реверс-инженеринг не поможет?

(не обновил комментарии, когда писал свой; с удовольствием почитаю пост на эту тему)
Чуть выше написал. Пока писал — появился Ваш коментарий
Боюсь, Вы просто не знакомы с темой защиты кода от реверсинга.
Язык высокого уровня тут вообще ни при чем, «вообще» — от слова «совсем».
Хакеры работают с машинным кодом.
Хоть Вы там вложенный интерпретатор Smalltalk'а на Smalltalk'е сто раз подряд реализуйте — это только несколько затруднит процесс разбора (придется написать кучу скриптов и их отладить на кошках).

1) Не первый десяток лет для защиты бинарников их код транслируют из машинного кода целевой архитекутры в машинные коды специальных обфусцированных VM. Самый известный пример: VMProtect (с 2000 года по наши дни).

2) Референсная реализация VM любого интерпретируемого языка заведомо проще, чем такие специализированные VM более-менее современных «пакеров»/«протекторов». Машина SmallTalk — детский лепет по сравнению с тем же VMProtect (у которого в последних версиях набор инструкций уникален для каждого бинарника, например).

3) Но и их, при всей их сложности, успешно исследуют и далее ломают с самого начала; ломали, ломают и ломать будут. Некоторый код в любом случае выполняется целевым железом, значит, его можно на уровне железа сдампить и вручную выполнить, а значит, и понять. Увидели там виртуальную машину? ОК, пошагово разобрали ее, ее архитектуру, набор инструкций и т.д. То, что долго делать руками, давно и успешно автоматизируется.

4) Единственный относительно надежный способ защиты кода от исследования — особая целевая архитектура с шифрованием «на кристалле».
Это реальная железная машина, напрямую выполняющая зашифрованный машинный код, ключи расшифрования для которого не покидают ее защищенную память. В идеале, ключи уникальны для каждого процессора и для каждого бинарника.
О защите кода начали задумываться еще в семидесятые-восьмидесятые, основные идеи можно найти в статьях того времени, да и этот вывод там тоже есть:
Best R. M. Preventing software piracy with crypto-microprocessors //Proceedings of IEEE Spring COMPCON. – 1980. – Т. 80. – С. 466-469.

На практике нечто отдаленно похожее сейчас массово (~миллиард штук) реализовано в банковских чиповых картах стандарта EMV. На карту от банка-эмитента может прийти зашифрованный issuer script, который содержит, на самом деле, не машинный код, а простенькие аппликационные команды вида «разблокировать оффлайн PIN» или «установить тег X в значение Y», но ключ шифрования, которым закрыты эти команды, знает только карта и банк.
Пост автора вызывает уважение. А вы автора Говорилки вы просили открыть исходный код программы?
На странице программы даже указаны его фамилия, имя и почтовый адрес (Anton Ryazanov, vecs@mail.ru). Ну то есть если автор поддерживает программу, то он должен был сам исправить баг, а если не поддерживает, то почему не открыть исходный код под одной из свободных лицензий?
Всё жду когда кто-нибудь исправит баг проводника, когда при копировании и вставке файлов диалог замены появляется не поверх всех окон, а где-то там позади. Даже в последнем на данный момент билде windows 10 он есть. Ну а что, звукозапись же фиксили.
Опять же повторюсь — удивительный мир хакеров. Заставить комп под виндой говорить человечьим голосом с помощью спич апи — задача на десяток строк кода на любом языке, какой есть. Во всяких скриптовых языках — на две строки. Что может сподвигнуть вместо этого пользоваться чужой неподдерживаемой прогой с багами? Загадка.
Без этой программы невозможно представить некоторые видео :)
Интересно, познавательно и легко написано.
Всегда хотел также легко писать ASM, и знать адреса, смещения, IAT и фокусы отладки (хотя прошел Рикардо до 40 главы, забывается когда не используешь повседневно). Но выбрал C#, а там свои чудеса.

Жду пост о «SmallTalk», интересно.
(хотя прошел Рикардо до 40 главы


Что имеется в виду?
А, ясно. Спасибо большое.
Не вижу причин делать бесплатную программу closed-source, кроме как из-за стыда показать свой код.
Судя по сайту, эту программу написали лет семь-десять назад, когда о Open Source еще не все знали.
Основная причина — что для этого надо как-то изучить экосистему Open Source — что, куда выкладывать, как, в каком формате, какие там обычаи и т.п. Изучить это один раз, чтобы выложить одну программу, а через 10 лет изучать снова — смысла не видно. А чтобы жить в этой среде, нужны дополнительные ресурсы. Которые можно было бы пустить на что-нибудь другое.
Порог вхождения не может быть нулевым.
Хотелось бы статью о том как расшифровывают форматы файлов без исходных кодов.
После этой статьи я ещё больше полюбил OpenSource и Free Software…
Sign up to leave a comment.

Articles