Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Une protection de code révolutionnaire?!?

7 réponses
Avatar
vclassine
Un peu long, mais pour ceux qui s'intérresse à la protection du code
source, ça mérite une lecture attentive...

En faisant des recherches sur l'obfuscation, et la protection de
code source java en général, je suis tombé sur le site de JEncoder
(http://www.new-era-soft.com).

J'ai été intéressé et intrigué par leur solution pour le moins
originale. Je leur ai demandé plus d'info en vue d'en savoir plus et
de vous en faire profiter. Sur ma demande il m'ont fournit un texte
assez technique (et surtout pas trop marketing) exposant le principe
général, les conditions de mise en œuvre de leur solution.

J'ai traduit ce texte pour ceux qui sont vraiment allergique à
l'anglais. Vous avez ma traduction puis la VO, plus bas.

La solution semble réellement séduisante, bien plus que
l'obfuscation. J'attend maintenant votre avis sur cette technique.

PS : Ça ressemble à de la pub, mais mon but c'est simplement de
discuter avec vous de quelque chose qui semble très intéressant.
Après, selon vos avis, cette information se transformera en
avertissement ou en bon tuyau.

****************************************************************
****************************************************************
Avertissement: il s'agit de ma traduction. L'original est en bas de
mon post.

D'ailleurs si il y a des erreurs grossières ne vous gênez pas pour
"patcher"…

Date: 22 Juillet 2003

Sujet: Spec Technique de JEncoder 3.70

Présenté par New Era Soft (http://www.new-era-soft.com)

1) Jencoder est un outils conçu pour protéger les applications Java
de la décompilation (Reverse-Engineering)

2) L'idée de base utilisée par JEncoder est la suivante:

a. Prendre une application java normale et crypter ses classes en
utilisant un mot de passe (fournit par le propriétaire de
l'application) comme clé privé de l'algorithme de cryptage.

b. Sauver les classes cryptée dans un fichier jar.

c. Créer, en plus de la classe cryptée, une librairie dynamique
native (DLL sous Windows) contenant les informations permettant de
décrypter les classes cryptées. (Cette librairie est distribuée comme
partie intégrante de l'application cryptée).

d. A l'exécution, décrypter les classes cryptées et les charger en
mémoire.

3) La version actuelle de JEncoder peut seulement crypter les
applications (java). Dans un future proche, JEncoder sera capable de
crypter aussi les Applets et les Servlets.

Dans la mesure où un accès a une librairie native est nécessaire
pour utiliser les classes cryptées, quand les applets seront
supportées, un certificat sera nécessaire pour utiliser les applets
cryptées. (Un certificat est une confirmation que l'utilisateur doit
accepter pour autoriser un processus à s'exécuter via un navigateur
internet. Dans le cas présent, il devra accepter d'utiliser la
librairie native de JEncoder).

4) La version actuelle de JEncoder ne peut crypter les applications
que pour les systèmes d'exploitation Windows et Solaris. Dans le
futur, New Era Soft à l'intention de supporter d'autres systèmes
d'exploitations (comme Linux, Web Logic, IBM, Mac Os X, etc.).

5) JEncoder s'exécute sous Windows, et il nécessite un JDK 1.3 ou
plus pour s'exécuter.

JEncoder nécessite aussi les droits d'Administrateur pour
s'installer et s'exécuter sur votre ordinateur.

Ces contraintes ne s'appliques pas aux application cryptées (celle
qui ont été crypté par JEncoder), leurs contraintes sont les mêmes
qu'avant cryptage. La seule contrainte supplémentaire est qu'il faut
un JDK1.2 ou plus (JDK 0 ou 1 ne fonctionneront pas avec les
applications cryptées par JEncoder).

6) Bien qu'on pense généralement que quelque soit ce qui entre dans
la machine virtuelle Java cela peut être lu par n'importe qui, et bien
que les applications cryptées par JEncoder utilise une machine
virtuelle standard, il n'est pas possible de récupérer le byte-code
des classes cryptées par JEncoder.

Les ingénieurs de New Era Soft on trouvé une technique spéciale et
originale qui protège contre la récupération du byte-code chargé.

7) Dans la mesure où les classes d'une application cryptée doivent
être décryptées durant l'exécution (avant la "résolution" de la
classe), il faut plus de temps pour les charger que dans l'application
originale.

Le délai supplémentaire est pour chaque classe (utilisées par
l'application, évidemment), mais seulement une fois (puisque chaque
classe n'est chargée qu'une fois en mémoire).

Le code de description des classes étant natif, et le délai
supplémentaire ne s'applique qu'une fois, le coût est négligeable.

New Era Soft a effectué des tests sur de nombreuses applications
pour tester ce point, et ils ont constaté que le temps de chargement
d'une application cryptée est presque le même que le temps de
chargement de la même application non cryptée.

En fait, comme le temps de chargement des applications est affectée
par d'autres choses (comme l'état des autres processus sur la machine
durant le chargement), il est presque impossible d'attribuer la perte
de temps au chargement au fait que l'application est cryptée.

*******************************************************************
*******************************************************************
Date: July 22, 2003.

Subject: JEncoder 3.70 – Technical spec.

Presented by New Era Soft (http://www.new-era-soft.com)

1) JEncoder is a tool designed to protect Java against
Reverse-Engineering (decompilation).

2) The basic idea used by JEncoder is this:

a. Take a regular java application and encrypt its classes using a
password (supplied by the owner of the application) as a private key
for the encryption algorithm.

b. Write the encrypted classes into a jar file.

c. Along with the encrypted classes create a native dynamic library
containing the information of how to decrypt the encrypted classes.
(This library will be distributed as a part of the encrypted
application).

d. In runtime, decrypt the encrypted classes and load them into
memory.

3) The current version of JEncoder can encrypt only java
applications. In the near future, JEncoder will be able to encrypt
also Java Servlets and Applets.
Since a native is needed for using enrypted classes, when applets will
be supported, a certificate will be needed for using encrypted
applets. (A certificate is a confirmation that the user must accept
for allowing a process to continuing through a web-browser. In our
case the user will have to accept using JEncoder's native library).

4) The current version of JEncoder can encrypt applications only for
Windows and Solaris Operating Systems. In the future, New Era Soft
intends to enable other Operating Systems (such as Linux, Web logic,
IBM, Mac Os X, etc.).

5) JEncoder is running on Windows OS, and needs JDK1.3 or higher to
run.
JEncoder also needs Administrative rights to be installed and run on
your computer.
These requirements do not apply on the encrypted applications (that
were encrypted by JEncoder), and their requirements depend on the
original requirements of the application. The only additional
requirement, is JDK1.2 or higher (JDK 0 or 1 will not work with
JEncoder's encrypted applications).

6) Despite the fact that it is considered to be thought that
whatever enters the Java Virtual Machine can be seen by anyone, and
despite the fact that applications that were encrypted by JEncoder use
a standard Java Virtual Machine, it is still not possible to retrieve
the bytecode of classes that were encrypted by JEncoder.

New Era Soft engineers have found a special and unique technique
that prevents getting the bytecode of classes that were loaded.

7) Since the classes of an encrypted application need to be decrypted
during runtime prior to the class resolving process, it takes more
time to load them than in the original application.

The delay is for each class (that is actually used by the
application), but only once (since each class is loaded once into
memory).
Since the code that decrypts the classes is written in native code,
and the delay is only once for each class, the overhead is redundant.

New Era Soft has performed tests on several applications to test
this issue, and found that the loading time of an encrypted
application is pratically the same as the loading time of the same
application when it is not encrypt.

As a matter of fact, since the loading time of applications is
affected by other things (such as the state of other processes on the
machine at the time of loading), it is almost impossible to attribute
the time delay of the loading to the fact that the application was
encrypted.

7 réponses

Avatar
Eric Delcamp
A vue de nez, c'est pas tres seduisant. Non pas seulement leur methode, mais
tout le process.
Que devient l'evolution de Java ? A chaque changement minimum de la JVM, ils
vont devoir verifier que leur systeme marche. Et tout d'un coup, ton appli
Java n'est plus portable, ni optimisable par un JIT. Ca fait beaucoup
d'inconvenient pour pas grand chose.
Je concois que certains programmeurs veulent proteger leur code source, mais
choisir Java implique aussi cette lisibilité.
Par contre, le point 6 de leur argumentation est faux. Personne ne pourra te
proteger une JVM "patchée" qui recrache les opcodes. C'est le fonctionnement
meme de Java qui veut ca.
Avatar
vclassine
"Eric Delcamp" wrote in message news:<bfkl5n$p8p$...
A vue de nez, c'est pas tres seduisant. Non pas seulement leur methode, mais
tout le process.
Que devient l'evolution de Java ? A chaque changement minimum de la JVM, ils
vont devoir verifier que leur systeme marche.
Pour l'affirmer il faudrait savoir sur quoi ils se basent, que ce

genre de système ne passe pas la transition Java --> Java 2 me semble
normal. Par contre si il ne passait pas du de JSE 1.4.1 au JSE 1.4.2
ça serait un problème, mais pour le dire il faudrait faire des tests.
A l'occasion il faudrait que je télécharge leur version d'eval avec
tous les JDK...

Et tout d'un coup, ton appli
Java n'est plus portable
Plus portable en version livrable, personnellement je ne livre pas via

Java Web Start, mais via des WindowsInstaller, des RPM... Donc je
livre une version par OS, en plus j'ai déjà une lib native dans mon
programme. Et le fait de faire un cryptage avant compil de l'instal ne
me gène pas...
, ni optimisable par un JIT.
De quoi tu déduis ça???


Ca fait beaucoup
d'inconvenient pour pas grand chose.
C'est ton point de vue, ça dépends bcp de ton activitée...


Je concois que certains programmeurs veulent proteger leur code source, mais
choisir Java implique aussi cette lisibilité.
Si tu peux avoir le beurre et l'argent du beurre honnêtement, tu

jettes l'argent parce que ça n'était pas prévu au départ???

Par contre, le point 6 de leur argumentation est faux. Personne ne pourra te
proteger une JVM "patchée" qui recrache les opcodes. C'est le fonctionnement
meme de Java qui veut ca.
ça c'est intéressant... Effectivement il semble logique qu'une JVM

dédiée à cette usage puisse le faire. Je leur poserait la question sur
leurs méthode de protection (si il en éxiste une)...

Avatar
Armel HERVE
In article ,
says...
Armel HERVE <armel.herve@ n e t c o u r r i e r .com> wrote in message ne ws:...
In article ,
says...

PS : a ressemble de la pub, mais mon but c'est simplement de
discuter avec vous de quelque chose qui semble tr s int ressant.
Apr s, selon vos avis, cette information se transformera en
avertissement ou en bon tuyau.


En effet, c'est de la pub. Ce m me message (mais en anglais cette fois)

a t post sur tous les forum java auquels je suis abonn ... Avec

exactement la m me structure: j'ai trouv un truc, ca a l'air g nial
(ou
r voulitonnaire), alors dites moi ce que vous en pensez, parce que moi
je ne peux pas le faire...


Je ne l'ai jamais vu avant sur ce forum.
Je t'assure que c'est réellement une initiative personnelle, New Era
Soft ne m'a rien demandé. Je leur ai demandé qq explications
supplémentaire après un passage sur le site, ils me les ont fournit.
Comme je trouvait ça intérressant j'ai demandé un document plus
technique et surtout moins marketing que le texte de leur site, pour
moi et pour le poster. En effet j'avais déjà posé une question sur
JEncoder, regardes dans les archives, et comme personne n'avais
vraiment de réponse ou d'infos technique, ça c'était vite arrêt é. A
partir de là j'ai penser qu'avec plus d'info on aurait de meilleurs
remarques (d'ailleurs c'est déjà le cas).

Il est certain que les arcanes de la VM m'échappe et donc je souhaite
soumettre les infos à des gens plus renseignés. Je ne vois pas ce que
ça choquant...

Et si cette solutions est pourrie, ça sera écrit noir sur blanc pour
ceux qui feront des recherches dessus. Si elle est bonne, certains
seront content d'en avoir eu vent.

PS: Je te mail ce message avec en PJ toutes ma communication avec New
Era Soft...

Voici ce que l'on trouve sur d'autres forum java...


Subject: New technique to protect Java (NOT obfuscation) ?
From: Koleho
Newsgroups: comp.lang.java.programmer, comp.lang.java.developer

Hello,

This company (http://www.new-era-soft.com) claims they have a new
method to protect Java against de-compilation, and it is NOT
obfuscation.

Has anyone tried their product yet ?

What do you think about it ?

What tests can I do to check if it is really good ?

Thanks.



Avatar
vclassine
Voici ce que l'on trouve sur d'autres forum java...

Subject: New technique to protect Java (NOT obfuscation) ?
From: Koleho
Newsgroups: comp.lang.java.programmer, comp.lang.java.developer

Hello,

This company (http://www.new-era-soft.com) claims they have a new
method to protect Java against de-compilation, and it is NOT
obfuscation.

Has anyone tried their product yet ?

What do you think about it ?

What tests can I do to check if it is really good ?

Thanks.


Et alors?

Autant mon message était assez documenté et enthousiaste, donc plus
ambigue. Autant celui là est vraiment très intérogatif. Si tu
considère que ce genre de message est nécessairement de la pub c'est
que tu es un peu parano...

Avatar
Armel HERVE
In article ,
says...
Voici ce que l'on trouve sur d'autres forum java...

Subject: New technique to protect Java (NOT obfuscation) ?
From: Koleho
Newsgroups: comp.lang.java.programmer, comp.lang.java.developer

Hello,

This company (http://www.new-era-soft.com) claims they have a new
method to protect Java against de-compilation, and it is NOT
obfuscation.

Has anyone tried their product yet ?

What do you think about it ?

What tests can I do to check if it is really good ?

Thanks.


Et alors?

Autant mon message était assez documenté et enthousiaste, donc plus
ambigue. Autant celui là est vraiment très intérogatif. Si tu
considère que ce genre de message est nécessairement de la pub c'est
que tu es un peu parano...

Je trouve surprenant que ce genre de messages soit posté sur tous les

forum java à quelques jours d'intervalle!
La méthode est un peu grosse, n'est-ce pas !


Avatar
Cedric
"Vincent" wrote in message

Snif, Snif, tant pis je ne peu toutjours pas protèger mon code
correctement :-(


Sauf compilation native, mais bon...


En effet, de part le fonctionnement du ClassLoader, il sera toujours
possible ( pour qui sera au moins aussi malin que les createurs de JEncoder)
de recuperer le byte-code decode, puis donc de le decompiler.
J'ai deja entendu pas mal de fois de JEncoder. A mon avis, les mecs de New
Era ont trouve un truc suffisament peu connu pour creer leur produit, et
s'en servent pour faire un peu d'argent ( je ne pense pas que beaucoup vont
acheter, mais il y en aura ), et de plus en plus de gens vont chercher a
'craquer' leur produit. C'est peut-etre un produit pour se demarquer du
marche, et trouver des clients qui leur demanderait de developper pour eux.

Cedric

Avatar
Christophe M.
Vincent wrote:
Fabrice..Bacchella wrote in message news:...

a. Take a regular java application and encrypt its classes using a
password (supplied by the owner of the application) as a private key
for the encryption algorithm.


Une clé privée s'utilise dans le cas d'un chiffrement assymétrique. Ça
commence mal avec le vocabulaire.

De toute façon, le principe est pourrie d'entrée de jeux.
L'utilisateurs doit disposer de la clé et de la librairie de
déchiffrement.

Il possède donc l'algo & la clé, c'est à dire tout ce qu'il faut pour
déchiffrer les classes. Le seul espoir d'une tel principe, c'est qu'il
reste suffisament confidentiel pour que personne suffisament compétent
dans le désassemblage de code ne s'attaque au problème. Il suffit
d'une seul fois pour que tout le principe s'ecroule, même en changeant
la clé : elle sera toujours au même endroit.



Snif, Snif, tant pis je ne peu toutjours pas protèger mon code correctement :-(

Sauf compilation native, mais bon...


Faut vraiment qu'il soit super protégé ton code ?
Parce que bon, même en natif, y tjrs moyen de décompiler en assembleur
X86 et de voir ce que ça fait.

Bon évidemment l'assembleur x86 est un rien plus compliqué que
l'assembleur Java, mais pour des personnes assez motivée...