Question

Je suis un programmeur. J'ai environ 5 ans d'expérience de la programmation dans différents types de langues. J'INQUIETER ma vitesse de code, sur l'optimisation de la mémoire qui utilise mon code, et environ un bon style de codage et ainsi de suite. Mais n'a jamais pensé comment sécuriser mon code est. J'ai donc démonté mon code pour voir ce que peut faire un pirate informatique. Serait-il facile à craquer mon code? Et je vis qu'il est! Il est très facile, parce que je stockait

  1. le numéro de série en tant que chaîne
  2. codes de décryptage de cryptage et

Donc, si quelqu'un a la connaissance minimale de l'assembleur, il / elle peut juste dissimulateur simple et après 10-20 minutes de débogage mon code est craqué !!! il pourrait même se faire en ouvrant l'exe avec notepad Je suppose! : -)

Alors que je demande sont les suivants:

  1. Où je stocker ce genre de?
  2. des informations sécurisées
  3. Quelles sont les stratégies communes de fournir un code sécurisé?
Était-ce utile?

La solution

La première chose que vous devez comprendre est que vous ne serez jamais empêcher une fissuration déterminée à partir d'inversion des régimes de protection parce que tout ce que le code peut faire, finira par l'inverseur savoir comment le reproduire. La seule façon que vous pouvez obtenir toute sorte de protection fiable est d'avoir le programme livré soit rien de plus qu'un client muet et ont le poids du logiciel sur un serveur le n'a pas accès inverseur à.

Avec cela de la façon, vous pouvez certainement le faire plus difficile pour un serait de briser vos inverseur de protection. obscurcissement est le genre de première étape pour y parvenir. Je n'ai pas l'expérience en utilisant obfuscators mais je suis sûr que vous pouvez trouver quelques suggestions pour certains sur le SO. Aussi, si vous utilisez une langue de niveau inférieur comme C / C ++, compiler simplement le code avec une optimisation totale et en éliminant tous les symboles de débogage vous obtient une bonne quantité de faux-fuyants.

Je lis cet article il y a quelques années, mais je pense encore techniques de TENEZ aujourd'hui. Il est l'un des développeurs d'un jeu vidéo appelé Spyro parler de l'ensemble des techniques permettant de prévenir le piratage. Ils affirment qu'il a fallu attendre 3 mois après la sortie d'une version craquée est devenu disponible, ce qui est assez impressionnant.

Autres conseils

Si vous êtes préoccupé par le piratage, alors il y a beaucoup de pistes que vous pouvez prendre. Faire la sécurité du code plus serré (obscurcissement, codes de licence, liant le logiciel à un ordinateur particulier, la protection du matériel / dongle, etc) est un, mais il vaut la peine compte tenu du fait que tous logiciel peut être fissurée si quelqu'un peut être pris la peine suffisamment de talent.

Une autre approche consiste à considérer le modèle de prix pour votre logiciel. Si vous chargez 1000 $ une copie, puis il y a une grande incitation pour quelqu'un d'avoir un aller à le fissurer. Si vous chargez seulement 5 $, alors pourquoi devrait-on la peine de le casser?

Alors, ce qui est nécessaire est un équilibre. Même la meilleure protection de base arrêtera les gens ordinaires de faire des copies occasionnelles. Au-delà, des techniques simples (codes d'obscurcissement et de licence) et une stratégie de prix raisonnable tiendra la plupart des futurs biscuits à la baie en le rendant ne vaut pas la peine de se fissurer. Après cela, vous commencez à entrer dans de plus en plus techniques sophistiquées (dongles / CD qui ont besoin d'être présent pour exécuter le logiciel, étant seulement capable d'exécuter le logiciel après la connexion à un système de licences en ligne) qui prennent beaucoup d'effort / coût pour la mise en œuvre et d'augmenter considérablement le risque de véritables clients ennuyeux (rappelez-vous comment agacé tout le monde a quand ils ont acheté la demi-vie, mais ce ne serait pas les laisser jouer le jeu?) - à moins que vous avez un produit grand public populaire (à savoir un énorme flux de revenus pour protéger), il n'y a probablement pas beaucoup d'aller à beaucoup d'effort.

Faites application web.

Il ne sera généralement pas bien protégé moins qu'il y ait un service externe faisant la vérification que vous êtes en contrôle de - et que le service peut encore être usurpée par ceux qui veulent vraiment « crack » il. Au lieu de cela, faire confiance à la clientèle et de fournir qu'une protection minimale des droits d'auteur. Je suis sûr qu'il y avait un article ou un podcast à ce sujet par Joel Spolsky quelque part ... voici une autre SO question liée .

Je ne sais pas si cela va aider, mais Windows fournit (depuis 2000) un mécanisme permettant de récupérer et de stocker des informations chiffrées et vous pouvez également salez ce stockage sur une base par application si nécessaire: Data Protection API ( DPAPI )

est sur une machine ou un niveau d'utilisateur, mais le stockage Serials et peut-être quelques clés en utilisant ce pourrait être mieux que les avoir cachés dans l'application?

Quel type de sécurité parlez-vous? Sécurisez du point de vue que vous gardiez bien les données de vos utilisateurs? Dans ce cas, étudier une cryptographie réelle et utiliser existants bibliothèques pour crypter vos données. L'API win32 est assez bon pour cela.

Mais si vous parlez d'arrêter un pirate de voler votre application? Il existe de nombreuses méthodes, mais abandonnent tout simplement. Ils ralentissent crackers vers le bas, ils ne les arrêtent pas.

D'abord, vous devez définir ce que votre code doit être sécurisé contre, être en sécurité en tant que telle n'a pas de sens.

Vous semblez être inquiet pour l'ingénierie inverse et les utilisateurs générer des codes de licence sans payer, si vous ne dites pas. Pour rendre cela plus difficile, vous pouvez obscurcir votre code et des informations clés de différentes façons. Vous trouverez aussi des techniques pour rendre l'utilisation de débogueurs plus difficile, pour empêcher l'ingénierie inverse de marcher à travers le code et voir les informations en clair. Mais cela ne fait que l'ingénierie inverse un peu plus difficile, pas impossible

Une autre menace pour la sécurité commune est l'exécution de code indésirable, par exemple via les dépassements de tampon.

Une technique simple pour ce faire est de XOR sur tout votre code et XOR quand vous en avez besoin ... mais cela a besoin d'une connaissance innée de l'ensemble ... Je ne suis pas sûr, mais vous pouvez essayer ceci:

void (*encryptionFunctn)(void);
void hideEncryptnFunctn(void)
{
    volatile char * i;
    while(*i!=0xC0) // 0xC0 is the opcode for ret
    {
        *i++^=0x45; // or any other code
    }
}

Pour éviter contre les pirates l'affichage de votre code, vous devez utiliser un obfuscateur. Un obfuscateur utilisera différentes techniques qui rendent extrêmement difficile de donner un sens du code obfuscation. Certaines techniques utilisées sont le chiffrement de chaîne, changement de nom symbole, le contrôle obscurcissement de flux, etc. Consultez Crypto Obfuscator qui a en outre également cacher appel de méthode externe, anti-réflecteur, Anti-débogage, etc

Le but est d'ériger autant d'obstacles que possible dans le chemin d'un potentiel hacker.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top