Injection d’icônes version Mytic !!!!

Programmation d'applications complexes
Mytic
Messages : 466
Inscription : mer. 25/juil./2007 0:13

Injection d’icônes version Mytic !!!!

Message par Mytic »

Voici l’une de mes inventions nocturnes…
Ce code permet d’injecter une icône [32x32](32 bytes) dans un exe compiler…
Mais attention !! , le Fichier Exe doit déjà avoir une icône 32x32(32 bytes) simple (qui ne contient pas plusieurs icônes à différentes résolution)

Voilà à vous de le testé…
Il marche 100% chez moi….

Petit détail !,j’ai ajouté une procédure de protection,comme ça le programme te dira si l’Exe et l’icône sont compatibles pour l’injection.
:D :D

Code : Tout sélectionner

Global Hexe.l,Hicone.l


Procedure cherche_chaine(fichier.s)
*memi = AllocateMemory(29)
*comp = AllocateMemory(29)
PokeB(*memi,1)
PokeB(*memi+1,0)
PokeB(*memi+2,32)
For h = 3 To 7 
PokeB(*memi+h,00)
Next h
PokeB(*memi+8,128)
PokeB(*memi+9,12)
For h = 10 To 26 Step -1
PokeB(*memi+h,00)
Next h

r = OpenFile(#PB_Any,fichier)
If r
t.l = 0
max = Lof(r)
For i = 1 To max 
FileSeek(r,i)
ReadData(r,*comp,28)
If CompareMemory(*comp,*memi,28)
t.l = i
EndIf
Next i
CloseFile(r)
FreeMemory(*memi)
FreeMemory(*comp)
If t = 0
ProcedureReturn -1
Else
ProcedureReturn t
EndIf
EndIf
FreeMemory(*memi)
FreeMemory(*comp)
ProcedureReturn -1
EndProcedure
Procedure inject_icone(exec.s,icon.s)
zi.l = ((32*32)*4)+26
ic = OpenFile(#PB_Any,icon)
*memic = AllocateMemory(Lof(ic))
FileSeek(ic,Hicone)
ReadData(ic,*memic,zi)
CloseFile(ic)

ex = OpenFile(#PB_Any,exec)
FileSeek(ex,Hexe)
WriteData(ex,*memic,zi)
CloseFile(ex)
FreeMemory(*memic)
If ex And ic
ProcedureReturn 1
Else
ProcedureReturn 0
EndIf
EndProcedure

OpenConsole()
EnableGraphicalConsole(1)
PrintN("_________________________________________________________")
PrintN("Injecteur d'icone 32x32 dans un Exe avec une Icone 32x32 mono")
PrintN("Mono : l'icone est simple (ne contient pas plusieurs icones)")
PrintN("")
ConsoleColor(2,0)
PrintN("Nom de l'Exe (.exe)")
exe$ = Input()
ConsoleColor(3,0)
PrintN("Nom de l'icone (.ico) [32x32 simple]")
icone$ = Input()
ConsoleColor(4,0)
PrintN("-------------------------------(analyse)-------------------------")

Hexe.l = cherche_chaine(exe$)
Hicone.l = cherche_chaine(icone$)
If Hexe <> -1 And Hicone <> -1
ConsoleColor(10,0)
PrintN("Compatible")
  If inject_icone(exe$,icone$)
  ConsoleColor(10,0)
  PrintN("OK")
  Else
  ConsoleColor(12,0)
  PrintN("Error")
  EndIf
Else
ConsoleColor(12,0)
PrintN("Incompatible")
EndIf
ConsoleColor(9,0)
PrintN("Fin...")
Input()
CloseConsole()
End
:wink:
:idea:
Dernière modification par Mytic le jeu. 20/sept./2007 16:30, modifié 3 fois.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Merci !! nais regarder ça de pres :D
Mytic
Messages : 466
Inscription : mer. 25/juil./2007 0:13

Message par Mytic »

J’ai pas encor testé sur les icônes [16x16].
Mais que sur les [32x32] 32 bytes, Nombre de trames 1
Mytic
Messages : 466
Inscription : mer. 25/juil./2007 0:13

Message par Mytic »

J’ai corrigé un petit défaut…
Y’avait un décalage de 26. Mais corrigé maintenant,utilisez cette nouvelle version (posté tout la haut)
:!:
erix14
Messages : 480
Inscription : sam. 27/mars/2004 16:44
Contact :

Message par erix14 »

( Petite précision pour ceux qui ne connaissent pas ) Pour modifier les ressources d'un exécutable il existe des éditeurs de ressources comme par exemple : ResHacker Avec ce logiciel tu peux tout modifier dans ton exe... :D
Mytic
Messages : 466
Inscription : mer. 25/juil./2007 0:13

Message par Mytic »

Oui… mais là le but c’est de créer des applications qui créent des exécutables donc elles doivent pourvoir modifier les icônes du fichier automatiquement.
Et le 2 ème but, c’est la façon de procéder.
Le Charme de la Programmation c’est crée soi-même ses propres outils. C’est bien plus éducatif.

Mais merci erix14 pour l’info… :D
Au fait ! J’ai protégé mon langage de programmation contre ce genre de piratage !!!
Je lui est ajouté la possibilité de s’auto analyser pour déceler les changements non autorisés.
Dans la version 0.3.
Je l’ai pas encor UPloader , car je change d’hébergeur et le nom du programme.
erix14
Messages : 480
Inscription : sam. 27/mars/2004 16:44
Contact :

Message par erix14 »

OK si tu veux tout faire toi-même, sinon tu as l'API UpdateResource :
The UpdateResource function adds, deletes, or replaces a resource in an executable file.
Mytic
Messages : 466
Inscription : mer. 25/juil./2007 0:13

Message par Mytic »

erix14 a écrit :OK si tu veux tout faire toi-même, sinon tu as l'API UpdateResource :
The UpdateResource function adds, deletes, or replaces a resource in an executable file.
J’ai entendu dire qu’elle ne marchait qu’avec des exe 16 bytes ?!
erix14
Messages : 480
Inscription : sam. 27/mars/2004 16:44
Contact :

Message par erix14 »

C'est faux, je viens de tester le code suivant sans problème :
http://www.purebasic.fr/english/viewtopic.php?t=14019
Mytic
Messages : 466
Inscription : mer. 25/juil./2007 0:13

Message par Mytic »

Ok, merci beaucoup…
Et moi qui hésité à l’utiliser à cause de cette rumeur… !!
:D
Répondre