2010-08-05 10 views
8

Estoy escribiendo una forma de verificar si el número de serie de un cliente coincide con mi número codificado. ¿Hay alguna manera de hacer esto tan difícil de leer como sea posible en caso de que un indeseable tenga en sus manos el código?Hacer una línea de código difícil de leer

Estoy trabajando en java.

Por ejemplo (pseudo código)

si (x! = Y) saltar de código y devolver el error

Cheers, disculpas si esto es un poco de una extraña uno

+0

Parece que solo haría más curiosa a la persona interesada .. – Radu

+0

http://en.wikipedia.org/wiki/Obfuscation#.22Eschew_obfuscation.22 – skaffman

+0

http: // en.wikipedia.org/wiki/Kerckhoffs%27_principle – pmu

Respuesta

19

La seguridad a través de la oscuridad siempre es una mala idea. No necesita evitarlo, pero no debe confiar únicamente en él.

Encripte sus publicaciones seriadas con una clave que escriba al inicio del servicio, o simplemente especifique las publicaciones seriadas como hexadecimales o base64, no como ASCII.

6

Hacer el el código parece complejo para evitar ser pirateado ¡nunca ayuda!

0

¿Enreda la estructura de control del código publicado?

por ejemplo alimentar los números en un punto al azar en el código bajo una variable diferente y en algún punto al azar hacerlos iguales x e y?

http://en.wikipedia.org/wiki/Spaghetti_code

0

En lugar de tratar de hacer que el código sea complejo, puede implementar otros métodos que no expondrán su número de serie codificado.

Intente almacenar el número codificado en alguna ubicación permanente como matriz de bytes cifrada. De esa forma no es legible. Para comparar, cifra el código de serie del cliente con el mismo algoritmo y compáralo.

7

La forma normal de hacer esto sería usar un hash.

  1. Crea un hash de tu código de serie.
  2. Para validar la serie del cliente, hash que utiliza la misma función.
  3. Si los valores hash coinciden, la serie fue correcta, aunque el número de serie no figuraba en el código.

Por definición, a partir del hash es casi imposible deducir el código original.

1

Puede probar SHA1 o alguna otra encriptación unidireccional (MD5 no es tan seguro pero es bastante bueno). No haga esto:

if (userPassword equals myHardCodedpassword) 

hacer esto:

if (ENCRYPTED(userPassword) equals myhardcodedEncryptedpassword) 

Así que el código de lector sólo puede ver un valor cifrado (y muy muy muy difícil de descifrar).

+0

De todos modos, podría querer confundir el lugar donde se realiza la comparación para evitar que algún hacker malintencionado reemplace el bytecode por la evaluación opuesta 'equals' en lugar de' notequals' ;-) (de todos modos eso es más más difícil). – helios

Cuestiones relacionadas