Как я могу скрыть солевой код во Flash или Java? - PullRequest
0 голосов
/ 08 апреля 2011

Мне нужно иметь возможность передавать данные из приложения браузера Flash в файл PHP на веб-сервере, одновременно обеспечивая защиту и проверку данных, и в то же время пытаясь предотвратить несанкционированное создание сообщения. (Я хочу убедиться, что сообщение приходит из приложения, а не от пользователя, отправляющего сообщение другим способом).

В приложении C ++ я бы солил данные и отправлял хэш данных вместе с ним, а затем проверял хеш по данным для обеспечения целостности и источника.

Однако во Flash (и Java) приложения можно декомпилировать, чтобы их можно было просмотреть в исходном коде. Поэтому, если бы я использовал этот метод, кто-то мог бы (относительно) легко найти соль, а затем создать собственное «правильное» сообщение для отправки за пределы приложения.

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

Или есть еще один метод, который можно было бы полностью использовать для передачи данных и проверки источника и контента на стороне PHP?

Ответы [ 3 ]

1 голос
/ 08 апреля 2011

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

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

EDIT

Как уже отмечали другие, нет 100% безопасности, все можно взломать, суть в том, чтобы сделать это не слишком легко, предотвратить случайных хакеров, вот и все. Поэтому, как сказал Джим, «обфускатор» может быть лучшим компромиссом.

1 голос
/ 08 апреля 2011

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

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

EDIT: Как все остальные говорят. Стандартный обфускатор - это, вероятно, лучший путь, и вы могли бы сначала заставить клиента перепрыгнуть через несколько дополнительных обручей.

EDIT2: Оказывается, я не правильно понял Томаша. Если пользователь сам имеет ключ для аутентификации на сервере, чтобы получить хеш, это действительно подтвердит, что сообщение было отправлено от пользователя, но все же не из приложения. Если это вопрос избежания мошенничества, то хакер, вероятно, уже является клиентом (покупая продукт или создавая аккаунт). Если вы хотите аутентифицировать пользователя, то это совсем другое дело, и это вполне возможно. (конечно, со своими проблемами)

1 голос
/ 08 апреля 2011

Нет действительно безопасного способа защиты программ, которые запускаются на клиенте. (Кстати, C ++ также можно декомпилировать.) У пользователей всегда будет возможность запустить взломанные клиенты, и любой ключ шифрования должен присутствовать в коде в той или иной форме. Вы можете сделать это более сложным для случайных хакеров, но это все. Все, что вы реализуете, будет означать другую форму запутывания; Вы можете также посмотреть на готовые обфускаторы.

...