Intereting Posts
Предупреждение компилятора для функции, определенной без прототипа в области? … неопределенная ссылка на … collect2: ld возвращен 1 статус выхода Не удается войти во время выполнения Смутно о функции getchar () Выполнение команды sudo в C с системой () Запись файлов в битовой форме в файл в C Динамический массив в C – Является ли мое понимание malloc и realloc правильным? Как функция main () внутри общего объекта (.so) берет на себя компоновщик? Что такое pcap_pkthdr? обнаружение конца заголовка http с помощью \ r \ n \ r \ n Копирование переменных одной внутренней структуры в другую внутреннюю структуру с использованием функции, которая принимает адрес одной внутренней структуры как параметр Файл заголовка не работает, – привязанная к ссылке ссылка на `метод ‘ (n – умножение) vs (n / 2 – умножение + 2 дополнения), что лучше? Запретить пути библиотеки по умолчанию с помощью gcc Выделить пространство для указателя структуры в подфункции

Проверка подписи приложения кодом

У меня приложение подписано. Я создал identity и использовал codesign для подписывания своего приложения в соответствии с Руководством по написанию кода Apple.

Теперь, как проверить подпись из моего приложения?

Мне нужно проверить это на приложениях Cocoa (Objective-C) и приложениях, написанных на C.

Примечание. В настоящее время MacOS X не проверяет подписанный код перед выполнением. Это может быть разным для изолированного кода, и было бы разумно, что иначе кто-то мог бы редактировать права.

Чтобы проверить подпись приложения из самого приложения, вы используете службы подписи кода . В частности, посмотрите на SecCodeCheckValidity . Код для проверки не длинный, но есть немного понимания, поэтому я не буду давать образец кода – вам нужно прочитать и понять документацию.

Проверка подписи позволяет вашему приложению обнаруживать изменения в его коде и ресурсах и сообщать, что оно «повреждено» (может быть, не все изменения вредоносны) и отказаться от запуска. Добавление такого кода, разумеется, не гарантирует, что ваш код не будет поврежден, но, конечно же, он повысит уровень барьера выше преднамеренного ущерба (и если MacOS X начнет выполнять проверку, тогда будет большой выигрыш).

Вы можете использовать NSTask и запустить « codesign --verify » и проверить статус выхода. Если бы программа была изменена, ее можно было бы изменить, чтобы удалить чек, поэтому я не уверен, что вы покупаете.

Если вас не беспокоит направленное вмешательство (например, вид, который может удалить вашу проверку подписи), вы можете использовать опцию «kill», если вы просто выполняете, означает, что подпись действительна (по крайней мере, для всех страниц, которые были выполненных до сих пор … но если страница с нерезидентом была изменена, вы будете убиты, когда она будет прочитана в любом случае).

Возможно, если бы вы могли объяснить немного больше о том, почему вы хотите проверить подпись, может быть сформирован лучший ответ.

Способ аутентификации заказа реализован в iOS, так это то, что при запуске приложения демон launchd дешифрование двоичного файла, используя специальный секретный ключ этого устройства (поэтому вы не можете просто декомпилировать приложения или копировать их с одного устройства на другое ), если дешифрование не удается, приложение не запускается.

Собственные инструменты, которые делают это, недоступны в приложениях из-за изолированной программной среды iOS.

Если вы просто пытаетесь отслеживать, изменил ли кто-либо ваш двоичный файл, вы можете выполнить его hash MD5 или SHA1, сохранить его в NSUserDefaults и сравнить его при каждом запуске приложения. Если хеш изменяется между исполняемыми программами, вы знаете, что он был изменен (возможно, с помощью законного обновления приложения или, возможно, неправомерно).

Вот пример того, как получить hash NSData .

Бинарный файл, который вы ищете, это: AppName.app/AppName