Лучшие приемы против дизассемблера, в частности, для наборов команд с переменной длиной слова, содержатся в ассемблере / машинном коде, а не в C. Например,
CLC
BCC over
.byte 0x09
over:
дизассемблер должен решить проблему, связанную с назначением ветвивторой байт в многобайтовой инструкции.Однако у симулятора набора команд проблем не будет.Ответвление на вычисленные адреса, которое вы можете вызывать из C, также делает разборку трудной или невозможной.У симулятора набора инструкций с этим проблем не будет.Использование симулятора для сортировки филиалов для вас может помочь процессу разборки.Скомпилированный код относительно чистый и легкий для дизассемблера.Поэтому я думаю, что требуется некоторая сборка.
Я думаю, что это было в начале «Языка ассемблера» Майкла Абраша, где он показал простой трюк против дизассемблера и отладчика.У 8088/6 была очередь предварительной выборки, у вас была инструкция, которая изменила следующую инструкцию или пару вперед.Если пошагово, то вы выполнили модифицированную инструкцию, если симулятор набора команд не полностью имитировал оборудование, вы выполнили измененную инструкцию.На реальном оборудовании, работающем нормально, настоящая инструкция уже будет в очереди, и измененное расположение в памяти не повредит, если вы не выполняете эту строку инструкций снова.Возможно, вы все еще можете использовать такой трюк сегодня, когда конвейерные процессоры получают следующую инструкцию.Или, если вы знаете, что аппаратное обеспечение имеет отдельный кеш инструкций и данных, вы можете изменить количество байтов вперед, если вы правильно выровняете этот код в строке кеша, модифицированный байт будет записан не в кеш инструкций, а в кеш данных, иИмитатор набора команд, который не имел надлежащих имитаторов кэша, не сможет работать должным образом.Я думаю, что только программные решения не помогут вам продвинуться далеко вперед.
Выше уже устарели и хорошо известны, я не знаю достаточно о текущих инструментах, чтобы знать, работают ли они уже с такими вещами.Самомодифицирующийся код может / отключит отладчик, но человек может / сузит проблему, а затем увидит самоизменяющийся код и обойдет его.
Раньше хакеры бралиоколо 18 месяцев, чтобы что-то придумать, например, DVD.Сейчас они составляют в среднем от 2 дней до 2 недель (если мотивированы) (синий луч, iphones и т. Д.).Это значит для меня, что если я потрачу на безопасность более нескольких дней, я, скорее всего, потрачу впустую свое время.Единственная реальная защита, которую вы получите, - это аппаратное обеспечение (например, ваши инструкции зашифрованы, и только ядро процессора, находящееся внутри чипа, дешифрует непосредственно перед выполнением, так что оно не может раскрыть расшифрованные инструкции).Это может купить вам месяцы вместо дней.
Также прочитайте книгу Кевина Митника «Искусство обмана».Такой человек может взять трубку и попросить вас или коллегу передать секреты системы, думая, что это менеджер, другой сотрудник или инженер по аппаратному обеспечению в другой части компании.И ваша безопасность взорвана.Безопасность - это не только управление технологиями, но и управление людьми.