Вопрос

Я создаю приложение на какао и хотел посмотреть, легко ли доступны некоторые строки в нем, поэтому я запустил на нем OTX и, к сожалению, весь мой код был найден.Есть ли метод, который я могу использовать, чтобы сделать мой код более «безопасным» или хотя бы зашифровать/скрыть строки?Причина, по которой я хочу зашифровать строку, заключается в том, что это пароль для сервера.Мне не нужно, чтобы он был действительно безопасным, я просто не хочу, чтобы пароль было так легко найти.

Спасибо за любую помощь

Это было полезно?

Решение

1.Избегайте ObjC в безопасном коде.

Поскольку система классов ObjC во многом зависит от отражения во время выполнения, вместе с исполняемым файлом необходимо включить весь интерфейс.Это позволяет использовать такие инструменты, как class-dump чтобы легко восстановить исходный @interface двоичного файла.

Поэтому функции безопасного кода следует писать как функцию C, а не как метод ObjC.

2.Использовать strip.

По умолчанию компилятор сохраняет все частные символы (что делает трассировку стека более читабельной).Вы можете использовать strip удалить все эти символы.

3.Обфускация.

Вышеупомянутые шаги могут только скрыть логику кода.Но если пароль представляет собой постоянную строку, он сразу виден с помощью strings полезность.Вы можете запутать это, создав пароль во время выполнения (например.сохраните в файле пароль, закодированный в ROT-13.)

4.Или просто измените дизайн.

Независимо от того, насколько хороша ваша система защиты, поскольку хакер имеет полный контроль над своей машиной, при наличии достаточного количества времени он всегда побеждает.Лучше пересмотреть свой дизайн, например, почему пароль должен идти вместе с исполняемым файлом?Или зачем вообще нужен глобальный пароль?

Другие советы

Вам следует никогда поместите пароль в исполняемый файл.

Это все равно, что записать пароль на стикер рядом с монитором.Если ваше приложение окажется у злонамеренного хакера, он в конечном итоге сможет извлечь пароль независимо от того, какой язык или API вы используете для его написания.

Например, если я знаю, что ваше приложение подключается к серверу, защищенному паролем, но приложение никогда не запрашивает пароль, то я знаю, что вы допустили ошибку, включив пароль.Чтобы найти пароль, мне нужно лишь следить за работой программы и видеть, какие участки кода активны в момент ее подключения к серверу.Это подскажет мне, на чем сосредоточить поиск пароля, независимо от размера вашего приложения.Тогда это только вопрос времени, когда я найду пароль.Шифрование пароля бесполезно, потому что алгоритм шифрования также должен быть в приложении, и я тоже могу его разгадать.

Помните, что есть много людей, которые могут разгадать ваш код, используя только необработанный машинный код.Для этих людей не имеет значения, какой язык или API вы используете, потому что в конечном итоге все они преобразуются в машинный код.Эти люди — устрашающие опытные боги программирования, и они смеются над простыми смертными, такими как вы или я.К сожалению, некоторые из них злые.

Я упоминал, что вам следует никогда поместить пароль в исполняемый файл?Если я этого не сделал, позвольте мне повторить, что вам следует никогда поместите пароль в исполняемый файл.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top