IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Visual C++ Discussion :

Créer une DLL en C++ pour l'utiliser dans un projet C#


Sujet :

Visual C++

  1. #1
    Candidat au Club Avatar de Volviczox
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Créer une DLL en C++ pour l'utiliser dans un projet C#
    Bonsoir le forum C++,

    Je suis étudiant en BTS SIO et nous travaillons en C# sur Visual Studio.
    Je me posais une petite question, j'ai dans mon projet c# une classe avec quelques fonctions, imaginons par exemple (pour simplifier tout ça) que ma classe contienne uniquement une fonction retournerVRAI qui fasse uniquement un return true;

    En fait j'aimerai créer une DLL en c++ que j’appellerai ensuite dans mon projet c# en faisant un DLLImport.
    J'ai suivi plusieurs tutoriels et autres topics en rapport mais je n'y arrive définitivement pas (je n'ai pas le niveau requis en anglais pour comprendre parfaitement ce qu'ils expliquent...)


    En fait j'aimerai savoir si quelqu'un aurait la gentillesse de me créer un projet C++ d'une DLL avec une fonction retournerVRAI, pour que dans mon code c# j'ai juste à faire :
    [DllImport("nomDeLaDLL")]
    public static extern bool retournerVRAI();

    Je pense que je pourrais ainsi comprendre comment cela fonctionne et donc avoir une base fonctionnelle sur laquelle travailler


    Merci d'avance,
    Volviczox.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 074
    Points : 12 120
    Points
    12 120
    Par défaut
    C'est quoi tes contraintes ?

    Parce que là, c'est vraiment se faire chier pour pas grand-chose.

    Le plus simple pour appeler du code C++ depuis du .NET, c'est de faire une Dll en C++/CLI.
    Vous faites des classes managées en C++/CLI qui seront directement appelable depuis du code .NET.

    Si c'est pour faire mumuse avec "[DllImport(...)]", le plus simple c'est de faire du C et pas du C++, rapport au mangling de oufgueding du C++.
    Si tu ne sais pas désactiver le mangling C++, c'est qu'il te manque les bases du C++ pour faire le mariole avec l'interopérabilité .NET/natif (c'est pas les bases du C++ de base, mais les bases pour faire de l'interopérabilité).

    tu connais:
    extern "C"
    ?

  3. #3
    Candidat au Club Avatar de Volviczox
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci de ta réponse

    Non je ne connais pas cela, mais en fait la contrainte c'est que j'ai une fonction qui "calcule" quelle sera le code permettent d'activer le logiciel sur un PC (le code sera différent suivant chaque pc), je ne veux pas que quelqu'un puisse deviner le code qui permettra d'activer le logiciel en regardant comme ça fonctionne dans le code source..

    Et à ma connaissance il est très compliqué voir impossible de visualiser le code source d'une dll en C++ alors que meme avec une bonne obtucation il est toujours possible de récupérer le code source d'une application c#...


    En gros la dll servirai juste à "cacher" une fonction

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 074
    Points : 12 120
    Points
    12 120
    Par défaut
    Le C++ n'est pas d’essence magique, tout ce qui est faisable comme attaque sur du C# est faisable sur du C++.

    C'est franchement une protection contre les gamins de 12 ans. L'utilisation d'une fonction dans une Dll, ça se voit comme le nez au milieu de la figure et c'est contournable en quelques secondes.
    Et c'est bien plus facilement contournable en natif, qui ne dispose pas, de base, de la signature des modules exécutables, que les assemblies .NET qui l'ont avec une simple option et un fichier de clé facilement générable.

    Ton système de protection est contournable par le moins doué des hackers.
    Il n'y absolument rien de cacher dans ta solution.

    Les outils d'administration de machine comme ProcessExplorer permettent de facilement voir les Dll chargées dans un process.
    Les fonctions exportées par les Dll sont publiques, par définition de "exporter", et l'utilisation de Dependency walker permet de voir la liste.
    Avec du débugging classique, ultra facile en .NET si vous ne faite pas d'obfucation, il verra l'appel direct, sans même utiliser le moindre outil. => l'obfucation c'est pas que pour les cons !!!

    Après, comme il n'y a pas de signature de la Dll, il n'a qu'à créer de toute pièce une Dll qui répond toujours OUI et faire en sorte qu'elle se charge à la place de la vôtre.

    Pour une personne entrainée, c'est quelques minutes, maximum.

    Avant de mettre en place un système de sécurité, il faut déterminer les menaces que votre système doit contre-carré.
    Il existe de nombreuses méthodes d'évaluation des systèmes de sécurité, et un consultant en sécurité informatique, c'est normalement, autre chose qu'un mec qui porte bien un costume sombre.

    Là, votre système, il vise à contre-carré les hackers pré-pubères. C'est peut-être votre cible, mais j'en doute.

  5. #5
    Candidat au Club Avatar de Volviczox
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par bacelar Voir le message
    Le C++ n'est pas d’essence magique, tout ce qui est faisable comme attaque sur du C# est faisable sur du C++.

    C'est franchement une protection contre les gamins de 12 ans. L'utilisation d'une fonction dans une Dll, ça se voit comme le nez au milieu de la figure et c'est contournable en quelques secondes.
    Et c'est bien plus facilement contournable en natif, qui ne dispose pas, de base, de la signature des modules exécutables, que les assemblies .NET qui l'ont avec une simple option et un fichier de clé facilement générable.

    Ton système de protection est contournable par le moins doué des hackers.
    Il n'y absolument rien de cacher dans ta solution.

    Les outils d'administration de machine comme ProcessExplorer permettent de facilement voir les Dll chargées dans un process.
    Les fonctions exportées par les Dll sont publiques, par définition de "exporter", et l'utilisation de Dependency walker permet de voir la liste.
    Avec du débugging classique, ultra facile en .NET si vous ne faite pas d'obfucation, il verra l'appel direct, sans même utiliser le moindre outil. => l'obfucation c'est pas que pour les cons !!!

    Après, comme il n'y a pas de signature de la Dll, il n'a qu'à créer de toute pièce une Dll qui répond toujours OUI et faire en sorte qu'elle se charge à la place de la vôtre.

    Pour une personne entrainée, c'est quelques minutes, maximum.

    Avant de mettre en place un système de sécurité, il faut déterminer les menaces que votre système doit contre-carré.
    Il existe de nombreuses méthodes d'évaluation des systèmes de sécurité, et un consultant en sécurité informatique, c'est normalement, autre chose qu'un mec qui porte bien un costume sombre.

    Là, votre système, il vise à contre-carré les hackers pré-pubères. C'est peut-être votre cible, mais j'en doute.
    Le programme n'a qu'un but éducatif pour m'entrainer en fait, du coup j'aimerai quand même savoir comment faire par curiosité svp (si quelqu'un a 5 min pour créer une dll et m'envoyer la source ce serait vraiment cool, merci)

    Par rapport à l'obfuscation à ma connaissance il n'y a rien de gratuit et de fiable, à moins que vous avez des trucs à me conseiller ? (En faisant des recherches à ce sujet j'ai même remarqué que les obfus à plusieurs milliers d'euros se faisait cracker facilement...)


    Merci

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 074
    Points : 12 120
    Points
    12 120
    Par défaut
    Le programme n'a qu'un but éducatif pour m'entrainer en fait
    Alors commences par le plus simple, C++/CLI.

    du coup j'aimerai quand même savoir comment faire par curiosité svp (si quelqu'un a 5 min pour créer une dll et m'envoyer la source ce serait vraiment cool, merci)
    Je viens de remarquer que le code de base généré par les templates de code des projets est légèrement différent en fonction de la version de VS, donc pour quelle version de VS veux-tu ces sources ?

    apport à l'obfuscation à ma connaissance il n'y a rien de gratuit et de fiable,
    C'est exacte, mais si tu veux faire des trucs non open-source, c'est un peu normal de passer par le tiroir-caisse.

    (En faisant des recherches à ce sujet j'ai même remarqué que les obfus à plusieurs milliers d'euros se faisait cracker facilement...)
    D'un point de vue sécurité, le code qui tourne sur une machine cliente où l'utilisateur à les droits administrateurs, c'est en zone de sécurité MEGA-HOSTILE.
    Si votre code doit tourner sur ce type d'environnement, l'obfuscateur n'est qu'un ralentisseur, qui doit travailler avec d'autres systèmes de protections, et le résultat ne sera jamais sûr à 100% dans une telle zone.
    L'obfuscateur, c'est pas une baguette magique, ça a ses limites, et faut pas l'utiliser comme un goret décérébré.

    Mais en gros, pour finir, renseignez-vous sur 'extern "C" ' pour facilement utiliser une fonction C/C++ d'une Dll sans passé par le C++/CLI.

    P.S.: Dans une Dll C++/CLI vous pouvez très bien n'avoir que du code natif.

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Citation Envoyé par bacelar Voir le message
    Alors commences par le plus simple, C++/CLI.
    Ça fait bizarre, de voir une telle phrase (même si le contexte la justifie parfaitement).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Candidat au Club Avatar de Volviczox
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par bacelar Voir le message
    Je viens de remarquer que le code de base généré par les templates de code des projets est légèrement différent en fonction de la version de VS, donc pour quelle version de VS veux-tu ces sources ?
    J'utilise VS 2015


    Merci pour les conseils je vais regarder ça

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 074
    Points : 12 120
    Points
    12 120
    Par défaut
    Heu, j'ai pas VS2015 dans ma panoplie sous la main, peux-tu poster le squelette généré pour t'indiquer les modifications à faire ?

Discussions similaires

  1. Réponses: 7
    Dernier message: 05/08/2015, 18h55
  2. Réponses: 6
    Dernier message: 29/03/2014, 16h59
  3. Débutant : créer une DLL en C# pour LabVIEW
    Par julienAu dans le forum C#
    Réponses: 9
    Dernier message: 11/03/2011, 10h27
  4. créer une dll pour utiliser l'ASIO
    Par ccinfonews dans le forum Bibliothèques, systèmes et outils
    Réponses: 2
    Dernier message: 22/09/2010, 11h50
  5. Réponses: 7
    Dernier message: 05/12/2006, 08h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo