(может быть интересно в основном программистам)
Вот очень странный и невероятно крутой хак: trapcc - вычисление без единой инструкции CPU.
Авторы продемонстрировали, что механизм трансляции адресов на архитектуре x86 обладает полнотой Тьюринга, т.е. с его помощью можно реализовать любой алгоритм. С помощью хитрой настройки различных контрольных таблиц, которыми пользуется процессор, они вводят процессор в состояние, в котором он не может выполнить ни одной инструкции, т.к. непрерывно происходят исключения, но разные исключения в зависимости от приготовленных данных - и таким образом процессор вычисляет!
Известно, что одной инструкции условного перехода по вычитанию (вычисли a = a-b, и если это меньше или равно нуля, перейди в c) достаточно для Тьюринг-полноты. В этом хаке такая инструкция симулируется с помощью последовательности page faults (от невозможности загрузить данные), которая заканчивается double fault (когда указатель на стек уменьшается ниже нуля).
Несколько более подробное объяснение - в этом комментарии.
Любопытно, что ни один существующий эмулятор x86 не мог правильно запустить этот хак, потому что он опирается на слишком извращенную конфигурацию контрольных таблиц, и на тонкие нюансы поведения процессора в этой извращенной конфигурации. В итоге они смогли подстроиться под эмулятор Bochs.
Как ни странно, у всего этого даже есть практические применения, правда, в области, которая ничего хорошего и полезного миру не приносит - обнаружение того, что программа бежит под отладчиком или в виртуальной машине. Ну а так - это просто неимоверно круто и красиво.
Вот очень странный и невероятно крутой хак: trapcc - вычисление без единой инструкции CPU.
Авторы продемонстрировали, что механизм трансляции адресов на архитектуре x86 обладает полнотой Тьюринга, т.е. с его помощью можно реализовать любой алгоритм. С помощью хитрой настройки различных контрольных таблиц, которыми пользуется процессор, они вводят процессор в состояние, в котором он не может выполнить ни одной инструкции, т.к. непрерывно происходят исключения, но разные исключения в зависимости от приготовленных данных - и таким образом процессор вычисляет!
Известно, что одной инструкции условного перехода по вычитанию (вычисли a = a-b, и если это меньше или равно нуля, перейди в c) достаточно для Тьюринг-полноты. В этом хаке такая инструкция симулируется с помощью последовательности page faults (от невозможности загрузить данные), которая заканчивается double fault (когда указатель на стек уменьшается ниже нуля).
Несколько более подробное объяснение - в этом комментарии.
Любопытно, что ни один существующий эмулятор x86 не мог правильно запустить этот хак, потому что он опирается на слишком извращенную конфигурацию контрольных таблиц, и на тонкие нюансы поведения процессора в этой извращенной конфигурации. В итоге они смогли подстроиться под эмулятор Bochs.
Как ни странно, у всего этого даже есть практические применения, правда, в области, которая ничего хорошего и полезного миру не приносит - обнаружение того, что программа бежит под отладчиком или в виртуальной машине. Ну а так - это просто неимоверно круто и красиво.
no subject
Date: 2013-02-23 01:55 pm (UTC)no subject
Date: 2013-02-23 01:57 pm (UTC)no subject
Date: 2013-02-23 02:10 pm (UTC)no subject
Date: 2013-02-23 06:56 pm (UTC)pure awesome
Date: 2013-02-23 03:22 pm (UTC)no subject
Date: 2013-02-23 04:55 pm (UTC)no subject
Date: 2013-02-23 05:12 pm (UTC)Текущего календарного года или за предыдущие 365 дней?
no subject
Date: 2013-02-23 05:53 pm (UTC)Отличная оговорка!
no subject
Date: 2013-02-23 06:28 pm (UTC)Программа, которая хочет знать, не смотрят ли на нее дебаггером, не имеет в виду ничего хорошего.
no subject
Date: 2013-02-23 07:03 pm (UTC)Где-то попадались похожие рассуждения про технологию оптической невидимости. Что, мол, это всё очень интересно, но никакой практической пользы она не принесет, только для шпионажа и войны.
no subject
Date: 2013-02-23 07:18 pm (UTC)Уж коли хак описан, уточнят эмуляцию MMU.
no subject
Date: 2013-02-23 08:53 pm (UTC)no subject
Date: 2013-02-23 10:48 pm (UTC)where it thinks the stack is (address in TSS) (цитата из их слайдов)
no subject
Date: 2013-02-23 11:58 pm (UTC)no subject
Date: 2013-02-24 06:10 am (UTC)no subject
Date: 2013-02-24 04:04 pm (UTC)программа выполняется (https://encrypted.google.com/#hl=ru&q=%22%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0+%D0%B2%D1%8B%D0%BF%D0%BE%D0%BB%D0%BD%D1%8F%D0%B5%D1%82%D1%81%D1%8F%22+OR+%22%D0%B2%D1%8B%D0%BF%D0%BE%D0%BB%D0%BD%D1%8F%D0%B5%D1%82%D1%81%D1%8F+%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%22&oq=%22%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0+%D0%B2%D1%8B%D0%BF%D0%BE%D0%BB%D0%BD%D1%8F%D0%B5%D1%82%D1%81%D1%8F%22+OR+%22%D0%B2%D1%8B%D0%BF%D0%BE%D0%BB%D0%BD%D1%8F%D0%B5%D1%82%D1%81%D1%8F+%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%22)
no subject
Date: 2013-02-25 10:07 am (UTC)Алсо, статистика не очень интересная, потому что к компьютерным программам тут добавляются всякие правительственные программы, и отсеять их довольно трудно.
no subject
Date: 2013-03-02 07:57 pm (UTC)