User1 Sun, Jun 27, 2021 5:13 PM
Так как никто до сих пор не купил у меня рекламы, я просто прорекламирую мой канал @ch4nnel1 в райтапах от этого же канала.
Original write-up: https://hackmd.io/@osogi/onnx_re
Сам таск (https://ctf.bi.zone/challenges/7)
Скачиваем прикрепленный файл, это 7z архив со следующими файлами
Установив все необходимое с помощью команды python3.7 -m pip install -r requirements.txt
, изучим питон код
Из кода видим, что нам нужно ввести какие-то 32 символа, которые после обработки нейронкой преобразуются в массив на 30 интов, и получившийся массив должен совпасть с данным нам.
Введем в код новую функцию run_model_test
, кторая пока только выводит массив полученный от нейронки, и поставим ее на запуск сразу после загрузки модели
Чуть потыкавшись и поигравшись с результирующим массивом
Доработаем нашу функцию run_model_test
так, чтобы мы могли нагляднее увидеть зависимоть выхлопа ии от предоставленных данных. Для этого посчитаем результат ии от неких 32 байт, после будем менять по 1 байту и сравнивать новый результат с изначальным.
После запуска этого кода, уже можно понять что data[i]
влияет на out[i-2:i+1]
Сделав еще один запуск, но в этот раз с "0" вместо "1" и "1" вместо "2" (1 и 10 строчка функции run_model_test
), получим такой же результат как и от предыдущей версии скрипта => нейросетка просто делает out[i]=data[i]*x+data[i+1]*y+data[i+2]*z+b
, где x
, y
, z
, b
- некие коэфиценты. x
, y
и z
мы уже выясняли с помощью предыдущего скрипта. Осталось выяснить только b
, сделаь это несложно, все что нужно это дать на вход data=b"\x00"*32
. Сделав это, получим что все b
равны 0.
Все что осталось сделать это решить систему линейных уравнений, я это сделал доработав скрипт с помощью z3.
Ну вот и флаг
Так же в чате ctfzone при обсуждение этого таска всплывали такие ссылки https://github.com/onnx/onnx-mlir/ и https://netron.app/, говорят они как раз могут помочь при реверсе нейронок. Первую ссыль я особо не тыкал, но открыв сетку во второй я запутался, испугался и закрыл.
Так же я наверное буду переходить с https://telegra.ph на https://hackmd.io, так как в первом нельзя простым способом красиво вставить код, + markdown -> можно безпроблемотично переносить на другие сайты и тд.