Sat83
Messages postés166Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention13 octobre 2008
-
1 juin 2007 à 14:47
cs_germainm
Messages postés7Date d'inscriptionlundi 18 juin 2007StatutMembreDernière intervention 4 septembre 2007
-
18 juin 2007 à 04:12
Bonjour!
Voilà, je vient de remraquern quelques chose de surprenant.
En visualisant un executable (pour ma part avec NotePad++) généré par Delphi , j'ai remarqué qu'enormement de choses était completement en clair, notamment les constante de type String...
Y'a t'il une solution pour rendre l'executable plus "brouillé", quitte a augmenté sa taille? Peut etre une option de compilation? Un outils externe?
Merci de votre aide si jamais vous avez un avis ou une idée sur la question!
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202237 1 juin 2007 à 18:04
c'est normal que ce soit en clair. c'est pour limiter les pertes de performances et parce qu'on part du principe que personne ne vas editer notre executable.
les solutions de cryptage, compression, degrade fortement les performances d'un programme.
de plus, au moment ou la ressource vas etre utilisée, on est obligé de la mettre en clair quelque part, même momentanement.
donc, trés facile de la retrouver dans la memoire a ce moment la.
donc, n'importe quelle solution n'en est pas une. compression, cryptage, bidouillage ... rien n'echapera de toute façon aux lois fondamentale :
- rien ne se perd, tout se transforme.
- rien n'est perdus donc tout se retrouve.
la seule chose que tu peu faire c'est rendre la tache difficile aux noobs qui essayeront de retrouver l'info, mais t'arretera jamais un cracker qui prendra alors cela comme un defi qu'il doit reussir (et il reussira).
quand on vois que des protections extreme comme certains DRMs et autre StarForce se sont fait laminé plus ou moins facilement ... c'est même pas la peine de chercher la solution miracle.
tu peu pas test.
Sat83
Messages postés166Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention13 octobre 2008 1 juin 2007 à 17:04
@ Nicolas :
"prq veux tu cacher tes variables ???" Je repond pourquoi pas? Je suis curieux, voilà tout...
@rt15 : J'avais pensé a une solution de ce genre là, mais il restera quand meme des infos en clair dans l'executable généré. Et je sais qu'il existe des décompilateurs, désassembleur performant, mais ça n'empeche pas que je trouve bizzare de trouvé autant d'infos en clair dans un executable.
Bon, apparement il n'y a pas de solution simple a ma requete! Je m'attendais a ce qu'il existe une option du compilateur, ou un truc du genre qui permettait de masqué un minimum de choses dans l'executable. Merci quand meme a ceux qui l'ont lu et tenté d'y repondre!
Je laisse ce topic comme non resolu, au cas où quelqu'un a une autre idée!
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 1 juin 2007 à 22:48
Salut,
Une suggestion.
Pour les variables, tu peux les crypter juste avant compilation, car :
- tu n'as plus besoin qu'elles soient explicites,
- tu pourras revenir sur la version avant cryptage pour faire évoluer ton prog.
Et évidemment, pas besoin de décrypter à l'exécution.
Un autre moyen de rendre la tache un peu plus hardu, consiste à ne pas définir les variables au bon endroit.
1)Tu rajoute via un stream tes variables de types string à la fin de ton fichier.
2)Dans la procedure OnCreate de ta form, tu lis via un stream ton fichier en lui meme. Tu récupére le string que tu as rajouté et tu le définis comme une variable.
Biensur tu peux associer cette méthode à ceux que f0xi t'as cité.
Le principe est d'injecter quelques octets (correspondant à ton string) à ton fichier.
Maintenant comme f0xi te l'a dit : rien n'est inviolable
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 2 juin 2007 à 00:41
Hum...
Un MP de Francky23012301 (vaguement inquiet) me pousse à expliciter mes dires précédents.
Certains outils dédiés à la décompilation d'executables compilés sous
Delphi (tels DelphiDecompiler (dédé pour les intimes), Exe2dpr ou
autres Revendepro, de mémoire tout ça car j'ai pas pu remettre la main
dessus pour l'instant...) affichent en clair non seulement les strings,
mais aussi les noms donnés aux méthodes et aux variables. C'est
surprenant, mais c'est ainsi (sont balaises, les mecs).
Voilà. Dans ces conditions, on peut éventuellement deviner le
cheminement de la pensée du programmeur, et essayer de reconstituer son
code...
J'espère avoir rassuré Francky23012301 et tous ceux qui ont pu se faire du soucis pour ma santé mentale, lol.
C'est pas de ta santé mentale dont je m'inquiétais mais de la mienne . Non j'avais pas trop compris ce que tu voulais dire mais j'ai compris : Pas besoin de mettre un algorythme de cryptage et decryptage dans ton source. On peut les crypter via une application externe puis les mettre et les utiliser telquel dans le source. Cependant ca ne change rien au fait que les strings cryptés (ou non) seront toujours présent dans l'application. Seul avantage ca n'aura plus aucun sens pour le lecteur . Quel futé ce Japee
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 2 juin 2007 à 14:05
Salut,
Alors oui ... certaines informations peuvent être extraites de l'executable.
Exe2Dpr reconstruit même le Dpr et les fiches (rien de bien compliqué en soit) ... mais c'est très limité ...
pas de quoi déclancher une parano.
En effet, le résultat final de la décompilation n'est qu'un "collage" d'informations qui sont facillement accèssibles dans un Exe
(en particulier via les ressources) mais au final il n'y a rien de vraiment exploitable.
Exemple:
<hr size= "2" width="100%" /> Fichier d'origine
En bleu sont les parties qui seront carrément oubliées lors de la "reconstruction"
unit UMain;
// à déclarer dans la partie Interface
Function PickIconDlgW(OwnerWnd: HWND; lpstrFile: PWideChar; var nMaxFile: LongInt; var lpdwIconIndex: LongInt): LongBool; stdcall; external
'SHELL32.DLL' index 62;
implementation
Uses ShellApi; // pour ExtractIconW
{$R *.DFM}
Procedure Make_Shoot(aForm : TForm; aBmp : TBitmap);
Var aDc : HDC;
Begin If (aForm Nil) or (aBmp Nil) Then Exit;
With aBmp do
Begin
Height := aForm.Height;
Width := aForm.Width;
aDC := GetWindowDC(aForm.Handle);
BitBlt(Canvas.Handle, 0, 0, Width, Height, aDC,
0, 0, srcCopy);
ReleaseDC(aForm.Handle, aDC);
End;
End;
// Utilisation
procedure TfrmMain.btn_ShootClick(Sender: TObject);
Var Bmp : TBitmap;
begin
Bmp := TBitmap.Create;
Make_Shoot(Self, Bmp);
// ... ici votre code pour enregistrer où afficher l'image ...
Image1.Picture.Assign(Bmp);
Bmp.Free;
end;
Procedure TfrmMain.btn_ChangeIconeClick(Sender: TObject);
Var
FileName : array[0..MAX_PATH - 1] of WideChar;
Size, Index: LongInt;
hLargeIcon, hSmallIcon : HIcon;
Begin
Size := MAX_PATH;
StringToWideChar('%SystemRoot%\system32\Shell32.dll', FileName, MAX_PATH);
// ouvre le Dialogue Changer d'Icône
If PickIconDlgW(Self.Handle, FileName, Size, Index) Then
If (Index <> -1) Then
If ExtractIconExW( FileName, Index, hLargeIcon, hSmallIcon, 1) > 0 Then
Begin
// on change l'icône de la fiche principale
Icon.Handle := hSmallIcon;
// et on dessine le LargeIcone sur la fiche
DrawIcon(Canvas.Handle, 10, 10, hLargeIcon);
// Et on libère la mémoire
DestroyIcon(hLargeIcon);
DestroyIcon(hSmallIcon);
End;
Test;
End;
type
TfrmMain = class(TForm)
btn_Shoot: TButton;
Image1: TImage;
btn_ChangeIcone: TButton;
procedure btn_ShootClick(Sender: TObject);
procedure btn_ChangeIconeClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmMain: TfrmMain;
implementation
{$R *.DFM}
procedure TfrmMain.btn_ShootClick(Sender: TObject);
begin
// Address $453848
end;
procedure TfrmMain.btn_ChangeIconeClick(Sender: TObject);
begin
// Address $453880
end;
end.
<hr size="2" width="100%" />
Voilà je crois que c'est claire ... il manque l'essenciel
Et il en va de même pour le fichier Dpr si vous y avez mis une gestion (peu importe de quoi) elle ne sera pas prise en compte
et même tout simplement un :
Application.Title := 'Le Titre';
N'est pas retrouvé.
cs_germainm
Messages postés7Date d'inscriptionlundi 18 juin 2007StatutMembreDernière intervention 4 septembre 2007 18 juin 2007 à 04:12
Il existe un utilitaire gratuit disponible sur sourceforge.net qui s'appelle upx. Ce logiciel permet de compresser l'exécutable (pour économiser de l'espace et de la bande passante sur le serveur web en vue de la distribution) . visitez-le à l'adresse http://upx.sourceforge.net. Cela empeche de voir ce qu'il y a dans l'exécutable pour ceux qui ne connaissent pas le logiciel. Sinon, il existe un composante DcpCrypt à l'adresse suivante : http://www.cityinthesky.co.uk/cryptography.html