S'abonner :  Newsletters    Magazines
Avis sur les produits Avis sur les logiciels Avis sur les jeux Actualités A propos de 01net
992 utilisateurs connectés

Protection contre la modification d'exécutable

boulette67 le 04 mai 2007 à 22h10
Bonjour,

Je viens de terminer une application pour bloquer des clés USB qui ne sont pas autorisées par les administrateurs. Je lance mon application, sous une session utilisateur (avec restriction), en tant qu'administrateur pour qu'elle fonctionne correctement (modification de la base de registre etc...). Voici mon soucis : le login et le mot de passe administrateur sont directement dans l'exécutable.

Je souhaiterai crypter mon exécutable pour essayer de diminuer les risques de modification du contenu de mon application. J'ai fais des recherches sur Obfuscateurs, Anti-reversing, checksum mais sans grand succés.

Pourriez vous m'aider ou encore mieux me donner un nom de logiciel (payant ou gratuit peut m'importe) qui protège le contenu de mon exécutable contre d'éventuel petit génie du cracking. Je sais qu'il n'y a aucun système miracle mais si je peux les "embéter" (pour rester polis) le plus possible je le ferai avec le plus grand des plaisirs. Mon application est un freeware je tiens à le préciser.

Merci d'avance
-------
Citation :
Il ne faut jamais remettre au lendemain ce que votre femme pourai faire maintenant.
Minus-et-Cortex le 05 mai 2007 à 23h19
Salut!

Est-ce que ton programme est OpenSource ? Si oui, peux-tu donner un lien pour pouvoir accéder aux sources.

Merci.
@+
-------
Mieux vaut fermer sa gueule et passer pour un con que l'ouvrir et ne laisser aucun doute à ce sujet.
Gustave Parking
boulette67 le 06 mai 2007 à 18h26
En fait c'est une application pour un parc informatique. Je n'ai pas le droit de donner les sources mais il n'est pas payant. Si c'est pour le code, tu peux me poser toutes les questions que tu veux mais je ne peux vraiment pas donné les sources DSL
-------
Citation :
Il ne faut jamais remettre au lendemain ce que votre femme pourai faire maintenant.
Beno@ le 06 mai 2007 à 18h53
les mots de passe sont dans le logiciel?

dans ce cas tu génére un somme md5 grace a une chaine de caractères en plus du mot de passe et tu ne fait que vérifier les sommes (je sais c'est pas clair :/ )

en fait tu as une chaine nommé chaine1
tu as un mot de passe que tu a préalablement crypté en le combinant avec la chaine, du coupe il n'y a que le cryptage de la chaine et du mot de passe combiné qui apparait dans le logiciel
lorsque tu demande les accès, tu crypte le nom d'utilisateur entré et le mot de passe avec la chaine et tu compare les 2 chaines cryptées et non pas les accès en clair...

c'est vraiment compliqué a expliquer, alors j'ai fait une image:

< inclued picture >
Minus-et-Cortex le 07 mai 2007 à 07h22
Salut!

À priori cela ne me semble pas une bonne idée de chiffrer ton programme, car cela sous-entend qu'il faudra le déchiffrer pour l'exécuter. Comme tu n'indiques pas sur quelle plateforme fonctionne ton programme, regarde ces quelques liens sur la signature de fichiers exécutables avec SignCode et SignTool de Microsoft.
Accessoirement, où peut-on se procurer un exemplaire de ce programme ?

@+
-->Message édité par Minus-et-Cortex le 07/05/2007 07:23:58<--
-------
Mieux vaut fermer sa gueule et passer pour un con que l'ouvrir et ne laisser aucun doute à ce sujet.
Gustave Parking
boulette67 le 07 mai 2007 à 10h53
Je me rends compte que je me suis mal expime. Tout d'abord je programme sous VB6, j'integre aussi du VBS.
J'ai deux executables :
- Le premier "test.exe", lors de la connection d'un peripherique USB, analyse si c'est un peripherique de stockage et ensuite verifie son numero de serie.
Si le numéro de série correspond à une des clé que l'on a fourni aux utilisateurs, rien ne se passe. Par contre, si l'utilisateur insert une cle perso (donc non autorise), "test.exe" vas ecrire dans la base de registre pour verouiller les ports USB, ce qui oblige l'utilisateur a contacter les administrateurs, car s'il ne le fait pas ses ports usb sont inutilisables.

Probleme : un compte utilisateur ne pas modifier la base de registre à cause de la securite. J'ai donc eu recours a un ptit truc.

- Le deuxieme "Lanceur.exe", lance mon "Test.exe" en tant qu'administrateur local ce qui me permet d'avoir tous les droits. Je peux donc modifier la base de registre a ma guise.

Je vous donne la portion de code qui me pose probleme:

' Déclaration de la fonction
Private Declare Function CreateProcessWithLogon Lib "Advapi32" Alias "CreateProcessWithLogonW" (
ByVal lpUsername As Long,
ByVal lpDomain As Long,
ByVal lpPassword As Long,
ByVal dwLogonFlags As Long,
ByVal lpApplicationName As Long,
ByVal lpCommandLine As Long,
ByVal dwCreationFlags As Long,
ByVal lpEnvironment As Long,
ByVal lpCurrentDirectory As Long,
lpStartupInfo As STARTUPINFO,
lpProcessInfo As PROCESS_INFORMATION) As Long

' Affectation du contenu des variables
lpUsername = "login administrateur" ' Login en clair
lpDomain = "nom du pc"
lpPassword = "XXXXXXXXX" ' Mot de pass en clair
lpApplicationName = App.Path & "\test\test.exe"

' Lancement de test.exe en tant que administrateur local
CreateProcessWithLogon
StrPtr(lpUsername),
StrPtr(lpDomain),
StrPtr(lpPassword),
LOGON_NETCREDENTIALS_ONLY,
StrPtr(lpApplicationName),
StrPtr(lpCommandLine),
CREATE_DEFAULT_ERROR_MODE Or CREATE_NEW_CONSOLE Or CREATE_NEW_PROCESS_GROUP,
ByVal 0&,
StrPtr(lpCurrentDirectory),
StartInfo,
PROCESSINFO


Comme vous pouvez le voir, le login et le mot de passe sont obligatoirement en clair. Meme s'il y a peut de chance pour qu'un des utilisateurs puissent recuperer le login et le mot de passe, je prefere etre prudent.

Je suis vraiment desoler mais je ne peux pas vous laisser un exemplaire de mon prog. Par contre je peux repondre a toute vos questions. Je suis militaire et c'est une application pour mon regiment. Par contre le resultat de mes recherches je peux les partager avec vous car je les ai eu sur le net.
-------
Citation :
Il ne faut jamais remettre au lendemain ce que votre femme pourai faire maintenant.
boulette67 le 07 mai 2007 à 11h07
Je me rends compte que je me suis mal expime. Tout d'abord je programme sous VB6, j'integre aussi du VBS.
J'ai deux executables :
- Le premier "test.exe", lors de la connection d'un peripherique USB, analyse si c'est un peripherique de stockage et ensuite verifie son numero de serie.
Si le numéro de série correspond à une des clé que l'on a fourni aux utilisateurs, rien ne se passe. Par contre, si l'utilisateur insert une cle perso (donc non autorise), "test.exe" vas ecrire dans la base de registre pour verouiller les ports USB, ce qui oblige l'utilisateur a contacter les administrateurs, car s'il ne le fait pas ses ports usb sont inutilisables.

Probleme : un compte utilisateur ne pas modifier la base de registre à cause de la securite. J'ai donc eu recours a un ptit truc.

- Le deuxieme "Lanceur.exe", lance mon "Test.exe" en tant qu'administrateur local ce qui me permet d'avoir tous les droits. Je peux donc modifier la base de registre a ma guise.

Je vous donne la portion de code qui me pose probleme:

' Déclaration de la fonction
Private Declare Function CreateProcessWithLogon Lib "Advapi32" Alias "CreateProcessWithLogonW" (
ByVal lpUsername As Long,
ByVal lpDomain As Long,
ByVal lpPassword As Long,
ByVal dwLogonFlags As Long,
ByVal lpApplicationName As Long,
ByVal lpCommandLine As Long,
ByVal dwCreationFlags As Long,
ByVal lpEnvironment As Long,
ByVal lpCurrentDirectory As Long,
lpStartupInfo As STARTUPINFO,
lpProcessInfo As PROCESS_INFORMATION) As Long

' Affectation du contenu des variables
lpUsername = "login administrateur" ' Login en clair
lpDomain = "nom du pc"
lpPassword = "XXXXXXXXX" ' Mot de pass en clair
lpApplicationName = App.Path & "\test\test.exe"

' Lancement de test.exe en tant que administrateur local
CreateProcessWithLogon
StrPtr(lpUsername),
StrPtr(lpDomain),
StrPtr(lpPassword),
LOGON_NETCREDENTIALS_ONLY,
StrPtr(lpApplicationName),
StrPtr(lpCommandLine),
CREATE_DEFAULT_ERROR_MODE Or CREATE_NEW_CONSOLE Or CREATE_NEW_PROCESS_GROUP,
ByVal 0&,
StrPtr(lpCurrentDirectory),
StartInfo,
PROCESSINFO


Comme vous pouvez le voir, le login et le mot de passe sont obligatoirement en clair. Meme s'il y a peut de chance pour qu'un des utilisateurs puissent recuperer le login et le mot de passe, je prefere etre prudent.

Je suis vraiment desoler mais je ne peux pas vous laisser un exemplaire de mon prog. Par contre je peux repondre a toute vos questions. Je suis militaire et c'est une application pour mon regiment. Par contre le resultat de mes recherches je peux les partager avec vous car je les ai eu sur le net.
-------
Citation :
Il ne faut jamais remettre au lendemain ce que votre femme pourai faire maintenant.
Minus-et-Cortex le 07 mai 2007 à 11h44
Salut!

Donc si j'ai bien compris, le programme n'est pas vraiment un freeware, et ce que tu veux, ce n'est pas le crypter ou le signer pour éviter qu'on n'en modifie le contenu, mais faire disparaitre les chaînes lpUsername et lpPassword. Je ne connais pas bien VB, mais s'il est possible d'utiliser la fonction malloc, alors tu peux faire deux fonctions qui vont te créer des chaînes dont tu passeras les pointeurs à CreateProcessWithLogon.
Cela devrait donner un truc du genre : (notation à peu près C)
char* CreateUsername() {
int i;
char* buffer = (char*)malloc(sizeof(char)*5);
for (i = 0 ; i <= 116 ; i++)
*buffer = i;
for (i = 0 ; i <= 111 ; i++)
*(buffer+1) = i;
for (i = 0 ; i <= 116 ; i++)
*(buffer+2) = i;
for (i = 0 ; i <= 111 ; i++)
*(buffer+3) = i;
*(buffer+4) = 0;
return buffer;
}

Cette fonction te retourne une chaîne de caractères (au sens C) qui contient le texte "toto".
Tu fais pareil pour le mot de passe. C'est tordu, mais on devrait pouvoir trouver plus tordu encore.

@+
-------
Mieux vaut fermer sa gueule et passer pour un con que l'ouvrir et ne laisser aucun doute à ce sujet.
Gustave Parking
boulette67 le 07 mai 2007 à 15h53
Merci à toi Minus-et-Cortex
Je vais tester tout de suite.

@+ et merci (encore)
-------
Citation :
Il ne faut jamais remettre au lendemain ce que votre femme pourai faire maintenant.
boulette67 le 12 mai 2007 à 16h39
J'ai essayer d'utiliser la fonction malloc mais sans aucun succés.

Personne ne connait un logiciel qui pourai protéger mon exe contre d'eventuel pirate. Je veux juste crypter le code pour empecher le reversering et autre metode.

merci d'avance
-------
Citation :
Il ne faut jamais remettre au lendemain ce que votre femme pourai faire maintenant.
Beno@ le 12 mai 2007 à 17h43
boulette67 a écrit :
J'ai essayer d'utiliser la fonction malloc mais sans aucun succés.

Personne ne connait un logiciel qui pourai protéger mon exe contre d'eventuel pirate. Je veux juste crypter le code pour empecher le reversering et autre metode.

merci d'avance

y'a pas de fonction de hash md5?


PRODUITS

TÉLÉCHARGER - LOGICIELS

JEUX VIDÉOS

LOISIRS

01NET PRO

AVIS ET COMMENTAIRES

A PROPOS DE 01NET

publicité
Application iPhone 01netpro
L’actualité Pro 24h/24, sur votre iPhone avec SAP.

Service 01net
Newsletters 01net
abonnez vous gratuitement !
  
01Informatique
01 INFORMATIQUE
L'hebdo de référence des décideurs informatiques.
Micro Hebdo
MICRO HEBDO
L'hebdo qui vous simplifie la micro
et Internet.
L'Ordinateur Individuel
L'ORDINATEUR INDIVIDUEL
Le mensuel informatique qui vous informe et vous conseille.
Nous contacter  |  Charte de confiance  |  Voir notice légale

01net.  -  01men  -  RMC  -  BFM Radio  -  BFM TV  -  TousLesPodcasts  -  01informatique.fr  -  Association RMC-BFM
Tous droits réservés © 1999 - 2009 Internext - 01net.