Page 1 sur 1

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

Publié : jeu. 20/sept./2007 4:23
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:

Publié : jeu. 20/sept./2007 8:44
par Backup
Merci !! nais regarder ça de pres :D

Publié : jeu. 20/sept./2007 15:33
par Mytic
J’ai pas encor testé sur les icônes [16x16].
Mais que sur les [32x32] 32 bytes, Nombre de trames 1

Publié : jeu. 20/sept./2007 16:32
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)
:!:

Publié : jeu. 20/sept./2007 17:38
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

Publié : jeu. 20/sept./2007 18:06
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.

Publié : jeu. 20/sept./2007 18:33
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.

Publié : jeu. 20/sept./2007 19:29
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 ?!

Publié : jeu. 20/sept./2007 20:20
par erix14
C'est faux, je viens de tester le code suivant sans problème :
http://www.purebasic.fr/english/viewtopic.php?t=14019

Publié : jeu. 20/sept./2007 20:29
par Mytic
Ok, merci beaucoup…
Et moi qui hésité à l’utiliser à cause de cette rumeur… !!
:D