Мне было интересно, есть ли способ надежно зашифровать, зашифровать или скрыть число в m68k (или ассемблере в целом).
I.e: 01=09, 32=1F
Или что-то непоследовательное в этом роде.
Спасибо!
Мне было интересно, есть ли способ надежно зашифровать, зашифровать или скрыть число в m68k (или ассемблере в целом).
I.e: 01=09, 32=1F
Или что-то непоследовательное в этом роде.
Спасибо!
Единственный способ, которым я могу думать, не тратя лишних циклов, - это злоупотреблять тем фактом, что адресная шина 68k является только 24-битной (по крайней мере, на некоторых ранних моделях). Вы можете отступать от случайного 8-битного целого числа после каждого адреса длинного слова, например.
dc.l ($30<<24)|$FF1234.l
jsr ($EA<<24)|DisplayText
lea ($1F<<24)|MainPalette,a2
clr.b ($1F<<24)|$FF890D.l
Это никоим образом не повлияет на 68-битный процессор, так как старшие 8 бит игнорируются, но любой, кто попытается использовать, например, IDA Pro, сойдет с ума, поскольку IDA Pro использует для адресации полные 32 бита! Это означает, что теперь он не может найти данные, на которые ссылаются, подпрограмму или адрес ОЗУ, если старшие 8 бит не равны 0 или 0xFF (для ПЗУ и ОЗУ соответственно). Конечно, для любого достаточно умного это не большая проблема, но это потребует гораздо больше ручной работы.
Другие формы шифрования, которые вы можете попробовать, — это использование полных наборов инструкций Тьюринга, чтобы уменьшить количество используемых инструкций и сделать ход программы более сложным для понимания. Однако, скорее всего, будет использоваться больше процессорного времени и места в ПЗУ, что может быть не идеально. Тем не менее, я сделал кое-что только с перемещением, если хотите см.
Краткий ответ: нет.
Более длинный ответ: на большинстве процессоров нет хорошего способа справиться с этим. ЦП, которые делают это, имеют блок аппаратного шифрования для ввода-вывода, поэтому данные при обращении к ним извне шифруются. На самом деле вы можете выполнять определенные математические операции с зашифрованными данными с помощью определенных типов шифров. Например, вы можете добавить два зашифрованных значения в IDEA и получить зашифрованный вывод, который является этим добавлением, но это не очень полезно.
Самое близкое, что я могу придумать, это установить некоторое значение смещения в несколько из 68k регистров, а затем создать вокруг этого простую сеть Fiestel. Это позволит вам работать с данными. Это будут просто маски ROR и XOR, но это позволит вам вводить и выводить данные, но вам нужно будет тратить циклы, чтобы вы могли расшифровать данные.
Если у вас софт-ядро на ПЛИС, я видел шифрование на уровне регистров с изолированными ключами с использованием PRESENT. ОС BEAR от Dartmouth интегрируется с аппаратным обеспечением, чтобы обеспечить изоляцию на уровне процессов. Это может быть хорошим местом для начала, если вам нужны зацепки. Удачи.