Главное чтобы к этому времени уже были созданы умные и сбалансированные ИИ. Тогда будет война роботов 🤖 (или, что вероятнее, просто искусственных умов)
Всё ещё не понимаю что ты имеешь против мультиагентности? Выше, например, именовка переменных обсуждалась, её также может осуществлять отдельный специализированный (и обучающийся) агент. В чём тут палки в колёса? В том что вместо решения задачи в лоб «любой ценой» мы создаём более комплексную и продуманную систему?
Можно начать с классики типа линтер, статический анализ кода, также есть и системы проверки корректности именовки переменных. А в более общем случае это тоже должен ИИ проверять (ещё один агент, или же сам постановщик задачи)
"without any external data" — это правда, в ходе обучениия на вход был передан единственный пример — Hello world. Всё. Про то что никаких данных — тут согласен, базовая модель уже имела данные на входе, иначе бы она не появилась. Т.е. это скорее механизм дообучения, но в классических механиках обучения ведь точно так же: одни модели учат другие, следующего поколения.
Что касается мощности самого подхода self-play, я думаю самый наглядный пример его успехов это AlphaEvolve от DeepMind (ссылка), которая уже сейчас совершает прорывы в математике и науке в целом.
Ты правда считаешь что текущие ИИ умнее человека? И я сейчас не только про количество знаний и некоторые наборы навыков (по такой логике можно сказать что калькулятор умнее ученого, потому что он лучше и быстрее считает).
Про палки в колёса тоже не понял, кто и куда их вставляет.
Да, AZR итеративно генерирует задачи и решает их через код-экзекьютор, это так
Однако:
Не только Qwen - авторы тестировали на 6 разных моделях (от Qwen2.5-3B до Llama-3.1-8B)
Не просто brute-force - используется RL с умной reward функцией r_propose = 1 - r̄_solve, которая заставляет систему генерировать задачи оптимальной сложности (не слишком легкие, не нерешаемые)
Самоорганизующаяся сложность - система автоматически усложняет задачи по мере роста своих способностей
Главное: AZR показал лучшие результаты в мире на бенчмарках по коду и математике, при этом не видев ни одного человеческого примера. Обычные модели тренируются на десятках тысяч размеченных задач от экспертов.
Суть в переходе от "учись на том, что придумали люди" к "сам придумывай себе задачи и учись на них". Это качественно новый подход к обучению ИИ, который ранее применялся по сути только в играх с простой механикой и строгими правилами
Все дело в том, что в WPF используется множество механизмов неявного связывания по имени. Наш обфускатор распознает и корректно обрабатывает многие из этих случаев, но во-первых, разумеется, мы могли что-то и упустить, а во-вторых местами неявное связывание слишком уж неявное чтобы его выявить и обработать :) Особенно в этом плане опасны случаи генерации WPF содержимого непосредственно из кода приложения.
Чтобы выявить проблемную область, мы рекомендуем перенаправить поток ошибок в текстовый файл (по типу: you.exe 2> log.err), а затем скормить его стек трейс декодеру. Он подскажет с чем связана ошибка, дальше как правило достаточно добавить атрибут ObfuscationAttribute.
Как альтернативный вариант: если Вы дадите нам пример незащищенной сборки в которой проявляется ошибка, мы сможем диагностировать проблему и помочь Вам исправить её.
Кстати, я думаю, что генерация мусора вообще не обязательна. В не выполняемых ветках предиката можно просто вставить переход на непредсказуемый участок пользовательского кода (точнее передвинуть этот участок под предикат, чтобы скрытно было). Это также убережёт от раздувания екзешника. В текущей реализации мы так и делаем: выглядит очень ествественно как на уровне IL так и в декомпилированном виде.
Неразрешимость будет даже тогда, когда память потенциально бесконечна. Если генерировать ту самую динамическую структуру в памяти, то, из-за того, что эмуляция локальны, в каждом конкретном участке кода нельзя будет предугадать реальный объём занимаемый структурой. Естественно структура должна быть скрытной, чтобы не было априори известно, что в реальности не так много памяти она занимает.
Если встроить длинную арифметику и Диофантовы уравнения, то так же будет неразрешимость, так как параметры уравнения берутся из случайных даже потенциально сколь угодно больших участков в памяти, например. Но тут нет скрытности и хакер просто вырежет все неявные предикаты.
Я уверен, что подавляющее большинство случайных предикатов решается на ура.
Если сделать генератор, который создаёт предикаты и отсеивает те, которые решились на ура, то уже большинство предикатов не будут так просты.
Возможно я не совсем правильно понял Ваш вариант с хэшом. Как мне кажется эмулятор как раз сделан для того, чтобы проэмулировать вычисление sha1 и понять, что значение всегда такое-то. В этом предложении отсутствует элемент псевдослучайности входных параметров без которого задача решается эмуляцией.
Не забывайте что программа, кроме обеспечения непосредственно защиты, должна еще продолжать полноценно работать. Приложение сплошь покрытое предикатами по 20..50 операций умножения\деления\возведения в степень каждый, вряд ли будет приемлемо в использовании.
На самом деле, очень перспективной на будущее, видится реализация Opaque Predicates на базе указателей. В статье говориться о том, что эта задача, как и проблема останова, в общем случае, является неразрешимой. А неразрешимая задача всегда лучше NP полной :) Думаю что в ближайшее время мы продолжим наши исследования в этом направлении.
Не забывайте что программа, кроме непосредственно обеспечения самой защиты, должна еще продолжать работать :) Приложение, которое сплошь покрыто предикатами по 20..50 операций умножения\деления\возведения в степень каждый, вряд ли будет приемлемо в использовании.
На самом деле, очень перспективной на будущее, видится реализация Opaque Predicates на базе указателей. В статье упоминается, что эта задача считается неразрешимой, что еще лучше NP полноты :) Думаю в ближайшее время мы продолжим наши исследования в этом направлении.
Главное чтобы к этому времени уже были созданы умные и сбалансированные ИИ. Тогда будет война роботов 🤖 (или, что вероятнее, просто искусственных умов)
Чуть позже ;)
Думаю сделать отдельный пост про AlphaEvolve
Всё ещё не понимаю что ты имеешь против мультиагентности? Выше, например, именовка переменных обсуждалась, её также может осуществлять отдельный специализированный (и обучающийся) агент. В чём тут палки в колёса? В том что вместо решения задачи в лоб «любой ценой» мы создаём более комплексную и продуманную систему?
Можно начать с классики типа линтер, статический анализ кода, также есть и системы проверки корректности именовки переменных. А в более общем случае это тоже должен ИИ проверять (ещё один агент, или же сам постановщик задачи)
Матричное умножение — первое улучшение алгоритма Штрассена за 56 лет: новый метод умножения матриц 4×4 за 48 операций вместо 49
Математические открытия — решил задачу "поцелуев сфер" в 11 измерениях, над которой математики бились веками
Производительность — ускорил работу Transformer-модели на 32,5% за счёт оптимизации одного из важнейших алгоритмов трансформеров: FlashAttention
Аппаратный дизайн — оптимизировал схемы TPU на уровне Verilog, изменения войдут в следующее поколение чипов Google
Там много всего ещё, если интересно могу об этом отдельно написать, тема обширная
"without any external data" — это правда, в ходе обучениия на вход был передан единственный пример — Hello world. Всё. Про то что никаких данных — тут согласен, базовая модель уже имела данные на входе, иначе бы она не появилась. Т.е. это скорее механизм дообучения, но в классических механиках обучения ведь точно так же: одни модели учат другие, следующего поколения.
Что касается мощности самого подхода self-play, я думаю самый наглядный пример его успехов это AlphaEvolve от DeepMind (ссылка), которая уже сейчас совершает прорывы в математике и науке в целом.
Ты правда считаешь что текущие ИИ умнее человека? И я сейчас не только про количество знаний и некоторые наборы навыков (по такой логике можно сказать что калькулятор умнее ученого, потому что он лучше и быстрее считает).
Про палки в колёса тоже не понял, кто и куда их вставляет.
Да, AZR также использует обучение с подкреплением (reinforcement learning).
Отчасти да, потому что и сам Python написан людьми, но у меня тут другая ассоциация:
Классический подход: "Вот 100,000 готовых задач с решениями, изучай их"
AZR: "Вот калькулятор. Придумывай задачи себе сам и проверяй"
Да, AZR итеративно генерирует задачи и решает их через код-экзекьютор, это так
Однако:
Не только Qwen - авторы тестировали на 6 разных моделях (от Qwen2.5-3B до Llama-3.1-8B)
Не просто brute-force - используется RL с умной reward функцией r_propose = 1 - r̄_solve, которая заставляет систему генерировать задачи оптимальной сложности (не слишком легкие, не нерешаемые)
Самоорганизующаяся сложность - система автоматически усложняет задачи по мере роста своих способностей
Главное: AZR показал лучшие результаты в мире на бенчмарках по коду и математике, при этом не видев ни одного человеческого примера. Обычные модели тренируются на десятках тысяч размеченных задач от экспертов.
Суть в переходе от "учись на том, что придумали люди" к "сам придумывай себе задачи и учись на них". Это качественно новый подход к обучению ИИ, который ранее применялся по сути только в играх с простой механикой и строгими правилами
Не увидел в статье/комментариях самого главного: сколько в солнечную и в "среднюю" погоду вся конструкция выдает мощности на выходе в ваттах
ESP8266 для таких штук как раз оптимален, т.к. его цена ~3$.
Здесь почти наверняка проблема именно в переименовании.
Да, обязательно напишите что получится. И, в любом случае, мы будем рады помочь Вам советом.
Чтобы выявить проблемную область, мы рекомендуем перенаправить поток ошибок в текстовый файл (по типу: you.exe 2> log.err), а затем скормить его стек трейс декодеру. Он подскажет с чем связана ошибка, дальше как правило достаточно добавить атрибут ObfuscationAttribute.
Как альтернативный вариант: если Вы дадите нам пример незащищенной сборки в которой проявляется ошибка, мы сможем диагностировать проблему и помочь Вам исправить её.
Спасибо за отзыв!
Неразрешимость будет даже тогда, когда память потенциально бесконечна. Если генерировать ту самую динамическую структуру в памяти, то, из-за того, что эмуляция локальны, в каждом конкретном участке кода нельзя будет предугадать реальный объём занимаемый структурой. Естественно структура должна быть скрытной, чтобы не было априори известно, что в реальности не так много памяти она занимает.
Если встроить длинную арифметику и Диофантовы уравнения, то так же будет неразрешимость, так как параметры уравнения берутся из случайных даже потенциально сколь угодно больших участков в памяти, например. Но тут нет скрытности и хакер просто вырежет все неявные предикаты.
Если сделать генератор, который создаёт предикаты и отсеивает те, которые решились на ура, то уже большинство предикатов не будут так просты.
Возможно я не совсем правильно понял Ваш вариант с хэшом. Как мне кажется эмулятор как раз сделан для того, чтобы проэмулировать вычисление sha1 и понять, что значение всегда такое-то. В этом предложении отсутствует элемент псевдослучайности входных параметров без которого задача решается эмуляцией.
На самом деле, очень перспективной на будущее, видится реализация Opaque Predicates на базе указателей. В статье говориться о том, что эта задача, как и проблема останова, в общем случае, является неразрешимой. А неразрешимая задача всегда лучше NP полной :) Думаю что в ближайшее время мы продолжим наши исследования в этом направлении.
На самом деле, очень перспективной на будущее, видится реализация Opaque Predicates на базе указателей. В статье упоминается, что эта задача считается неразрешимой, что еще лучше NP полноты :) Думаю в ближайшее время мы продолжим наши исследования в этом направлении.
Кроме того, предикат еще надо выявить в размазанном коде и, при этом, не зарезать реальные if'ы (даже с 99% вероятностью невыполнимые).