Donnez vie à vos documents numériques !
 

Protection PDF

abracadabraPDF Forums PDF – Général Protection PDF

  • Ce sujet est vide.
  • Créateur
    Sujet
  • #46339
    micka92
    Membre

    Bonsoir,

    J’ai pour habitude de protéger mes PDF avec des mots de passe complexes. Pour autant, je m’en suis déjà vu certains déverrouiller. Apparemment, les personnes en question auraient simplement utilisé certains sites Internet permettant le déverrouillage. Savez-vous comment il serait possible de mieux les protéger ?

Affichage de 10 réponses de 1 à 10 (sur un total de 10)
  • Auteur
    Réponses
  • #67644
    Merlin
    Maître des clés

    Bonsoir

    Les “restrictions d’utilisations” d’Adobe ne sont pas des protections, la longueur du mot de passe n’y change rien, c’est trop facile à contourner ou à faire sauter : https://smallpdf.com/fr/unlock-pdf
    Seul le mot de passe à l’ouverture est une vraie protection.

    Pour la dernière question il faudrait savoir ce que tu veux protéger (scripts ?, images ?…) et contre qui.

    #67645
    micka92
    Membre

    Bonsoir Merlin,

    Je veux principalement protéger mes scripts. En effet, dans le cadre de mon travail, je me suis fait voler un long travail de plusieurs mois par des entreprises concurrentes. A l’avenir, j’aimerais pouvoir protéger, si possible, mes scripts. Qu’on me vole le modèle, tant pis, mais pas l’intelligence mise dans les formulaires.

    #67646
    micka92
    Membre

    Bonjour,

    J’ai fait le test et effectivement, n’importe quel mot de passe de restrictions d’utilisateurs se fait sauter, même très complexes. C’est dingue ! Le mot de passe d’ouverture du fichier le protège bien contre ces sites, mais ce n’est pas possible dans mon cas. Les formulaires sont renseignés plusieurs fois par jour, transmis à des clients, collègues etc, et il n’est donc pas concevable d’y mettre un mot de passe d’ouverture.  :oh:

    #67647
    bebarth
    Maître des clés

    bonjour,
    Je me permets de répondre avant Merlin qui ne manquera pas de compléter ou rectifier mes dires en cas de nécessité, vu que c’est lui qui m’a appris comment faire.
    Attention, avant de commencer, je te conseille fortement de travailler sur une copie car après c’est assez difficile de récupérer les scripts originaux.

    • Tu peux dans un premier temps compresser ou minifier ton script.
      https://jscompress.com/ compresse le script, c’est à dire qu’il retire tous les caractères inutiles qui le sont pour une bonne lecture de la programmation (retours ligne, espaces, tabulations…).
      https://javascript-minifier.com/ fait la même chose, et “complique” en même temps le script. D’après ce que j’ai pu remarquer, “true” devient “!0” (qui signifie “n’est pas faux”), il change l’ordre des égalités, la syntaxe if else… tu regarderas si tu veux !
      Après cette étape, le script devient déjà beaucoup plus illisible donc difficile à comprendre pour un non initié. Même pour quelqu’un qui s’y connait, il y a un peu de boulot pour remettre ça “lisible”. Il existe des sites qui font ce travaille (https://unminify.com/ par exemple) mais il y a encore un peu de boulot derrière pour remettre le script comme tu l’avais écrit.
    • [/list]

    • Tu peux ensuite obfusquer ton script :
      https://javascriptobfuscator.com/Javascript-Obfuscator.aspx
      Après cette étape le script devient complètement illisible (et le sera même pour toi…). Attention donc !
      Le soucis avec l’obfuscation (je viens de l’apprendre récemment) est que les antivirus bloquent les formulaires avec ces scripts. Ça devient donc compliquer à utiliser lorsque le formulaire doit être renvoyé à une société dont le système antivirus est réglé de la sorte…
    • [/list]La première étape protège déjà pas mal le script contre les vulgaires copier/coller. Je te conseille même de ne pas minifier absolument tous les scripts de tous les champs, mais uniquement ceux qui en valent le coup (les scripts de document et les principaux scripts sur les boutons ou les champs qui contiennent des fonctions ou des script un peu compliqués).
      De toute façon, si tu tombes sur un feru de programmation ou d’informatique, aucun cryptage ne lui résistera.
      A moins que tu ais découvert le script du siècle, il y a peu de personnes qui passeront des heures à déchiffrer ton script (je dis “ton”, mais c’est idem pour les miens). S’ils ne comprennent pas, ils essaieront d’en trouver un autre plus compréhensible.
      @+
      :bonjour:

    #67648
    bebarth
    Maître des clés

    …on va prendre en exemple un de mes scripts que j’ai donné récemment pour calculer l’âge.
    A l’origine, ça donne ça :

    Code:
    var chaine=this.getField(“Naissance”).valueAsString;
    if (chaine!=””) {
        var dateNaissance=chaine.split(“u002F”);
        var jourNaissance=Number(dateNaissance[0]);
        var moisNaissance=Number(dateNaissance[1]);
        var anneeNaissance=Number(dateNaissance[2]);
        var aujourdhui=new Date();
        var cetteAnnee=aujourdhui.getFullYear();
        var ceMois=aujourdhui.getMonth()+1;
        var ceJour=aujourdhui.getDate();
        var age=cetteAnnee-anneeNaissance;
        var t=this.templates;
        if (age>0) {
            if (age>1) {
                var ans=” ans”;
            } else {
                var ans=” an”
            }
            if (ceMois        if (ceMois==moisNaissance) {
                if (ceJour        }
            this.getField(“Age”).value=age+ans;
        } else {
            this.getField(“Age”).value=(ceMois-moisNaissance)+” mois”;
        }
        if (age>0 && age<18) {
            for (var i=0; i            if (t.name==”mineur”) t.hidden=false;
                else  t.hidden=true;
            }
        } else if (age>0) {
            for (var i=0; i            if (t.name==”majeur”) t.hidden=false;
                else  t.hidden=true;
            }
        }   
    } else {
        this.getField(“Age”).value=””;
        for (var i=0; i}

    Une fois minifié :

    Code:
    var chaine=this.getField(“Naissance”).valueAsString;if(“”!=chaine){var dateNaissance=chaine.split(“/”),jourNaissance=Number(dateNaissance[0]),moisNaissance=Number(dateNaissance[1]),anneeNaissance=Number(dateNaissance[2]),aujourdhui=new Date,cetteAnnee=aujourdhui.getFullYear(),ceMois=aujourdhui.getMonth()+1,ceJour=aujourdhui.getDate(),age=cetteAnnee-anneeNaissance,t=this.templates;if(age>0){if(age>1)var ans=” ans”;else ans=” an”;if(ceMois0&&age<18)for(var i=0;i0)for(i=0;i

    Et une fois obfusqué :

    Code:
    var _0x80a1=[“x76x61x6Cx75x65x41x73x53x74x72x69x6Ex67″,”x4Ex61x69x73x73x61x6Ex63x65″,”x67x65x74x46x69x65x6Cx64″,””,”x2F”,”x73x70x6Cx69x74″,”x67x65x74x46x75x6Cx6Cx59x65x61x72″,”x67x65x74x4Dx6Fx6Ex74x68″,”x67x65x74x44x61x74x65″,”x74x65x6Dx70x6Cx61x74x65x73″,”x20x61x6Ex73″,”x20x61x6E”,”x76x61x6Cx75x65″,”x41x67x65″,”x20x6Dx6Fx69x73″,”x6Cx65x6Ex67x74x68″,”x6Dx69x6Ex65x75x72″,”x6Ex61x6Dx65″,”x68x69x64x64x65x6E”,”x6Dx61x6Ax65x75x72″];var chaine=this[_0x80a1[2]](_0x80a1[1])[_0x80a1[0]];if(_0x80a1[3]!= chaine){var dateNaissance=chaine[_0x80a1[5]](_0x80a1[4]),jourNaissance=Number(dateNaissance[0]),moisNaissance=Number(dateNaissance[1]),anneeNaissance=Number(dateNaissance[2]),aujourdhui= new Date,cetteAnnee=aujourdhui[_0x80a1[6]](),ceMois=aujourdhui[_0x80a1[7]]()+ 1,ceJour=aujourdhui[_0x80a1[8]](),age=cetteAnnee- anneeNaissance,t=this[_0x80a1[9]];if(age> 0){if(age> 1){var ans=_0x80a1[10]}else {ans= _0x80a1[11]};if(ceMois< moisNaissance){age= age- 1};if(ceMois== moisNaissance&& ceJour< jourNaissance){age= age- 1};this[_0x80a1[2]](_0x80a1[13])[_0x80a1[12]]= age+ ans}else {this[_0x80a1[2]](_0x80a1[13])[_0x80a1[12]]= ceMois- moisNaissance+ _0x80a1[14]};if(age> 0&& age< 18){for(var i=0;i< t[_0x80a1[15]];i++){_0x80a1[16]== t[i][_0x80a1[17]]?t[i][_0x80a1[18]]=  !1:t[i][_0x80a1[18]]=  !0}}else {if(age> 0){for(i= 0;i< t[_0x80a1[15]];i++){_0x80a1[19]== t[i][_0x80a1[17]]?t[i][_0x80a1[18]]=  !1:t[i][_0x80a1[18]]=  !0}}}}else {this[_0x80a1[2]](_0x80a1[13])[_0x80a1[12]]= _0x80a1[3];for(i= 0;i< t[_0x80a1[15]];i++){t[i][_0x80a1[18]]=  !0}}// JavaScript Document

    Le script original n’est pas très compliqué, donc une fois minifier il est encore assez compréhensible, mais lorsque le script l’est un peu plus, ça le devient également pour le déchiffrer rien que minifié.
    Quant au script obfusqué, si tu sais le lire, chapeau !
    @+
    :bonjour:

    #67649
    micka92
    Membre

    Bonjour bebarth et merci pour tout. C’est très intéressant. Cela me permettra effectivement de brouiller les pistes pour des novices, même si bien souvent le “vol” de mes documents se fait simplement pour modifier le logo et le nom de l’entreprise, tout en gardant l’intelligence que j’y ai mise.

    #67650
    bebarth
    Maître des clés

    Ce qu’il est également possible de faire, c’est de personnaliser avec un logo tes boites de dialogue ou tes messages d’alerte (si tu en as).
    C’est déjà un peu plus compliquer à modifier pour un novice…
    @+
    :bonjour:

    #67651
    Merlin
    Maître des clés

    Pas mieux.  :Smiley03:

    J’ajouterai juste que :
    – l’obfuscation plombe aussi les téléchargements, c’est pour ça qu’il n’y a plus de documents obfusqués téléchargeables sur le site abracadabraPDF (enfin je crois) ;-)
    -il ne faut pas hésitez à noyer les scripts utilisés dans un flots de scripts ou de données inutiles. L’idée c’est de faire en sorte qu’il soit plus simple et plus rentable de développer le script soi-même que de débrouiller un écheveaux de scripts inconnus.

    #67652
    micka92
    Membre

    Merci à vous pour votre aide.  :bonjour: C’est vraiment “surprenant” que l’on ne puisse pas mieux protéger nos “créations”. Alors oui, le mot de passe d’ouverture permet de mieux bloquer le piratage, mais ce n’est pas concevable pour les supports que je crée de demander un mot de passe à chaque ouverture. Il y a trop d’interlocuteurs différents.

    #67653
    Merlin
    Maître des clés

    Et en plus dans ton cas ça ne servirait à rien, parce-que le mot de passe à l’ouverture permet aussi de déverrouiller les restrictions d’utilisation.
    :mur:  :oh:

    Concernant les scripts c’est normal : s’ils sont chiffrés (obfusqués) un anti-virus ne peut pas savoir si c’est du code malicieux ou non, donc ça clignote tout de suite en rouge.

Affichage de 10 réponses de 1 à 10 (sur un total de 10)
  • Vous devez être connecté pour répondre à ce sujet.