Abrutissant basées sur le C binaires à éviter la décompilation
Est-il un moyen pour dissimuler C-en fonction des exécutables ou des bibliothèques pour empêcher la décompilation?
- écrire du code spaghetti 😉
- Je ne suis pas sûr que le code peut obtenir beaucoup plus obscure que naturellement respecté C.
- Compilé C binaires ne sont pas toujours décompiler dans le code qu'ils ont été compilées à partir d' - décompilation n'est pas gauranteed de donner exactement le même code source qui a été utilisé pour l'écriture de l'application. Les fonctions Inline, les macros, les optimisations du compilateur, etc... sont tous manipulés après avoir terminer l'enregistrement de vos fichiers source.
- Le logiciel de biscuits ont été reverse-engineering de fichiers binaires pour des années. J'ai moi-même pouvez très bien comprendre C binaire de démontage dans ma tête, bien que le C++ est beaucoup trop désagréable pour moi, même dans un debugger source si je vais tout le chemin à travers cout & amis. C'est sans pratiquer cela comme une fin en soi pour la moitié de ma vie.
- Si vous écrivez du code spaghetti, assurez-vous de mettre les boulettes de viande dans ainsi.
- C++ aurait été plus à l'endroit 😉
- Je pense que le manque ici la question est: Pourquoi dissimuler C exécutables à entraver (pas de prévenir) décompilation?
- Les gens s'il vous plaît, il demande comment obscurcir le code, pas si il faut. Au moins répondre à sa première question avant de vous tourner autour
- J'aime les spaghetti code option.
Vous devez vous connecter pour publier un commentaire.
Pas. Vous pouvez la rendre plus difficile de décompiler, mais vous ne pouvez pas empêcher il. Mon conseil est de cesser de gaspiller votre temps et de se concentrer sur la fourniture d'un produit fantastique avec l'amélioration constante des fonctionnalités.
Alors les gens seront prêts à payer pour cela.
Votre principal problème est que la seule façon de rendre votre code onu-déchiffrable est de faire de l'onu-exécutable. Tout ce qui peut être chargé dans un PC peut être craqué. Les personnes qui ne reverse engineering pour le plaisir, le profit ou la gloire sont généralement très bien à elle et va vraiment pas être le moins peu impressionner par tout ce que vous faire pour tenter de les arrêter.
Ils ont accès à des outils qui rendent le travail de déchiffrage de votre code beaucoup plus facile que le travail que vous aurez abrutissant c' 🙂 Beaucoup mieux pour convaincre le monde entier que votre logiciel est la peine d'acheter, et de voir la piraterie comme une opportunité pour éventuellement convertir les "voleurs" à de véritables utilisateurs.
Par exemple, découvrez pourquoi ils ne sont pas payer pour votre logiciel et d'essayer de résoudre ce problème. Vous ne serez jamais à convertir 100% de la population, certains vont pirate votre code juste pour le plaisir de celui-ci.
Découvrez la série d'articles en cours d'exécution plus sur techdirt concernant la Fcf+RtB (se connecter avec les fans, plus de raisons d'acheter). J'ai trouvé beaucoup de points soulevés il pourrait être applicable à l'industrie du logiciel.
La voie de la facilité: Acheter un logiciel de compression/cryptor/obfuscator produit. Certains sont chers et utilisé dans les jeux, certains ne le sont pas. Google par mots à la mode comme "protection contre la copie", etc.
La voie rapide: pack avec UPX et puis mangle l'en-tête quelque part, donc il sera toujours chargé en mémoire et d'exécuter très bien, mais la upx utilitaire échouera avec une erreur (essayez la version de champ). 95% si l'upx utilitaire échoue.
À la dure: Écrivez votre propre packer.
ah, j'oubliais:
La réel moyen facile: il suffit de navire comme il est. Non, vraiment - ce que vous faites les gens peuvent toujours désosser votre code. La quantité d'effort que vous mettez en un peu limite le nombre peut inverser la tendance.
compiler avec une optimisation complète.
"obfuscation exécutables" n'a aucun sens. Le matériel doit être capable de "comprendre" le code en mesure de l'exécuter, et le matériel peut comprendre, une ingénierie inverse humain peut comprendre. Le plus vous pouvez faire sera de le rendre plus pénible à comprendre, mais probablement pas de beaucoup, et à un coût.
Afin de rendre plus difficile? Assurez-vous. Merci de ne pas le faire.
Pour l'empêcher? Pas de. Tout système qui va exécuter le binaire aurez besoin du logiciel pour décrypter quel que soit le schéma que vous venez avec. Et ils vont être en mesure de décomposer et, ensuite, de voir comment votre obscurci binaires interprété.
Je pense que si vous parlez de binaires compilés il n'y a pas beaucoup que vous pouvez faire, (peut-être ne s'appliquent UPX ou liée à l'outil) qui ne fait pas beaucoup de sens, car il peut être inversée.
Si vous parlez d'écrire un nouveau code, essayez Auto Portées Code C qui sera probablement le plus difficile de re ingénieur de votre application.
Compiler le code C avec un compilateur optimisant fait qu'il est impossible de restaurer le code source d'origine ou de tout ce qui, même de loin, ressemble. Il est beaucoup plus sécurisé que n'importe quel Java ou .NET obfuscators qui sont très populaires ces jours. Assurez-vous de la bande de l'exécutable si vous voulez le rendre plus petit et cacher les noms de symbole avant la libération. Toutefois, notez que cela aussi rend le débogage (quand l'application se bloque) à peu près impossible.
De même, si quelqu'un veut pirater votre logiciel, il le fera au niveau de l'assemblée, peut-être avec le chargeur de logiciels ou d'autres ruse, peu importe ce que vous essayez de le faire pour l'empêcher. De nombreuses entreprises ont essayé, mais aucun n'a réussi. À l'aide des hacks comme ceci seulement frustrer l'utilisateur final comme ils peuvent le plantage de l'application ou même de planter le débogueur intégré de Windows.
Cesser de gaspiller votre temps à penser à la dissimulation de l'tandis que vous devriez être à l'amélioration du programme à la place.
-Os
.La décompilation (Pas Plus Gotos) et à la fois de la dissimulation de la pratique (Flowtables) et la théorie (Indécidabilité de la Dissimulation de l') sont des zones actives de la recherche et, par conséquent, il n'y a pas de solutions - seulement des outils, des techniques et de l'expertise. Si vous voulez vraiment que votre code d'être imperméable à l'decomplilation, créer une application web, sensible et mettez le code côté serveur. Mais si vous êtes coincé le modèle de la donner à quelqu'un un binaire, alors vous devez sagement juge le compromis que vous voulez faire entre la sécurité et les performances. L'Obfuscation a un coût, et encore n'est jamais parfait. Certaines options
Ne soyez pas découragé par Barak et al séminal de travail sur l'impossibilité de la boîte noire de l'obscurcissement. Il ne prouve l'impossibilité de boîte noire obfuscators, pas l'impossibilité de beaucoup de pratique et de la peine de faux-fuyants. (La boîte noire de la dissimulation de l'être, le fonctionnement interne du programme sont complètement inintelligible) Aussi ne soyez pas découragé par les pirates. Il y a toujours des gens qui font un point d'honneur à acheter votre produit si il est bon.
Pourquoi obfusquer le code si il y a un gain commercial d'elle? Pour être honnête, supposons que le code de commerce est assez optimisé et obscure, et fonctionne, la mère de tous les embarrassante s'est passé quelque chose - un pépin....vous êtes coincé à mon humble avis, que la production de code binaire est occulté, ce qui rend plus difficile à déboguer où le problème se passe et difficile à reproduire, il sera collé sur la liste des BUGS à tout jamais...
Par exemple, en essayant de trouver la trace de la pile, vous finirez par perdre plus de poils que jamais à essayer de comprendre la dis-assemblés code de travail WTF qui se passe là, sans fin rames de spaghetti boucles. En bref, ne pas!
Vous finirez par perdre de l'argent en essayant de déboguer le problème...soit vous avez un brillant assembleur spécialiste de lire les vidages de mémoire et de travail, à partir d'obfuscation de code... Ne le jetez pas, juste obtenir votre beau travail sur les produits et à les vendre...bien Sûr, il ya beaucoup de gens qui ont le temps sur leurs mains, de le casser par reverse-engineering du code...
Le secret pour battre c'est le principe - libération fréquemment, la mise souvent, apporter des améliorations que vous relâchez souvent, c'est ainsi que les dernières et les meilleures fonctionnalités seraient plus up-to-date de puis le temps que cela prend pour un pirate de le démonter et de travailler sur! Regardez le code source de linux, les patchs à venir, puis il est sorti...si vous garder ce principe à l'esprit, en libérant nouvelle version avec plus de fonctionnalités à un beaucoup plus rythme plus rapide que vous êtes gagnants!
Un moyen de rendre les choses un peu plus difficile, c'est de les emballer. UPX pack vos fichiers binaires, ce qui rend difficile de décomposer la sortie de la boîte. Techniquement, c'est possible de le décompresser et ensuite, décompiler, mais il va placer la barre un peu. En supposant que vous êtes en cours d'exécution sur une vanille de l'utilisateur du système d'exploitation il n'y a pas beaucoup que vous pouvez faire pour prévenir la décompilation sans l'aide de vilains tours.
Si vous voulez vraiment pêle-mêle, il vous faut un programme distinct pour le faire. En tant que développeur, vous écrivez votre code dans la plus propre et plus lisible. Post compilation vous exécutez l'application distincte pour faire de l'obscurcissement. Vous pouvez acheter ces applications pour environ $100K.
Si votre intention est de stopper le code d'être inversé d'ingénierie qui fonctionnera probablement. Si votre intention est d'empêcher quelqu'un de se fendre la sécurité, de la dissimulation de ne suffira pas à arrêter une personne déterminée. À un certain point, il y a une décision oui/non ils n'ont pas besoin de comprendre le code pour trouver que ni le contourner.
Minuscule compilateur C modifié pour produire de l'obfuscation de code: http://blogs.conus.info/node/58
Pour fournir un certain soutien théorique pour les réponses ici: en 2001 Barak et. al. prouvé que le programme de l'obfuscation est impossible en général.