Page 1 sur 1
[Aide]NULL BYTE?
Publié : mar. 19/août/2014 11:37
par N00B
Salut, je suis débutant en PB et je rencontre un petit problème :
en gros j'essaye d'extraire une ressource (de type executable) que j'ai écrite via reshacker dans un executable PB compilé, une fois que j'ai ajouter la ressource, je l'extrait dans un fichier "app.exe" que je crée biensur voici le résultat :'( :
en faisant un peu de recherche j'i trouver que c'est du au NULL BYTE qui se trouve à l'octet 4 du fichier, car PB arrete de lire le truc quand il rencontre un null byte :
et voici mon code :
Code : Tout sélectionner
Procedure ReadResource()
file$ = ProgramFilename()
*hmodule = GetModuleHandle_(file$)
*loc = FindResource_(*hmodule, "H", "B")
*x = LoadResource_(*hmodule, *loc)
ProcedureReturn *x
EndProcedure
Procedure Main()
*Full = ReadResource()
PtrToData$ = PeekS(*Full)
MessageRequester("", "Len Of Data : " + Str(Len(PtrToData$))) ; sa affiche 3
CreateFile(0, "C:\Users\aaaa\Desktop\app.exe")
WriteData(0, @PtrToData$, Len(PtrToData$)) ; sa ecrit les 3 premier octets
CloseFile(0)
EndProcedure
Main()
donc ma question serait comment ignorer ce "NULL BYTE" et écrire tout le fichier
Merci d'avance :p
Re: [Aide]NULL BYTE?
Publié : mar. 19/août/2014 12:17
par poshu
Pas testé et écrit en cinq secondes mais ça devrait le faire:
Code : Tout sélectionner
Procedure Main()
*Full = ReadResource()
MessageRequester("", "Len Of Data : " + MemorySize(*Full)) ; ça affichera la bonne taille
CreateFile(0, "C:\Users\aaaa\Desktop\app.exe")
WriteData(0, *Full, MemorySize(*Full)) ; ça écrira la bonne taille.
CloseFile(0)
EndProcedure
En gros, la conversion en string et inutile et c'est elle qui pose le problème, mais je ne comprends même pas comment ça a pu te passer par la tête °_°;
Re: [Aide]NULL BYTE?
Publié : mar. 19/août/2014 12:37
par N00B
j'ai penser à faire comme toi au début mais sa n'a pas marcher voici le résultat

:
http://prntscr.com/4eb07t et sa n'écrit rien xD
Re: [Aide]NULL BYTE?
Publié : mar. 19/août/2014 13:16
par poshu
Fourni un code complet + les médias et je te règle ça (le problème, c'est que tu utilises de l'api windows et que je suis sous mac/linux, donc je suis à l'aveuglette là); c'est OBLIGATOIRE d'insérer ton exécutable via ressource hacker? Pas moyen de le faire à la compilation?
Re: [Aide]NULL BYTE?
Publié : mar. 19/août/2014 13:27
par N00B
poshu a écrit :Fourni un code complet + les médias et je te règle ça (le problème, c'est que tu utilises de l'api windows et que je suis sous mac/linux, donc je suis à l'aveuglette là); c'est OBLIGATOIRE d'insérer ton exécutable via ressource hacker? Pas moyen de le faire à la compilation?
le code que j'ai fourni en haut c'est tout le code(pour l'executable n'importe lequel peut faire l'affaire :p), pour l'insertion via reshacker oui c'est obligatoire à part sa je peux aussi l'ecrire via une app que j'ai coder en .NET(en utilisant les API's windows destiners aux ressources)
Edit : Le MemorySize ne marche pas parceque la zone mémoire qui se trouve dans le pointeur de la resource n'a pas été crée par la fonction AllocateMemory.
Personne d'autres ? :'(
Re: [Aide]NULL BYTE?
Publié : mar. 19/août/2014 22:08
par G-Rom
Fait se que Poshu t'as dit, oublie les String , passes par des pointeurs. ton peeks fou surement la m..
Re: [Aide]NULL BYTE?
Publié : mer. 20/août/2014 9:17
par graph100
@N00B : Tu connais l'utilisation de includebinary ? parce que ça fait la même chose que ton truc de ressource hacker, mais à la compilation, et tu peux inclure des trucs sans limitation.
Re: [Aide]NULL BYTE?
Publié : mer. 20/août/2014 13:20
par poshu
Bon, c'est
ULTRA PIFOMETRÉ, parce que j'ai pas de windows (spider est dispo sous osx? J'ai dégagé la VM!) donc ça vaut ce que ça vaut, mais ça devrait marcher comme ça :3
Code : Tout sélectionner
Procedure Main()
Protected *hmodule, *loc,*File, lof
*hmodule = GetModuleHandle_(ProgramFilename())
*loc = FindResource_(*hmodule, "H", "B")
*File = LoadResource_(*hmodule, *loc)
lof = SizeofResource_(*hmodule, *loc)
MessageRequester("", "Len Of Data : " + lof)
If lof
CreateFile(0, "C:\Users\aaaa\Desktop\app.exe")
WriteData(0, *File, Lof)
CloseFile(0)
EndIf
ProcedureReturn lof
EndProcedure
Main()
Note pour plus tard : le prochain qui poste une question qui me pousse à aller lire la MSDN, je lui décolle les cheveux. Avec la tête toujours attachée. protips : c'est pas bon pour votre cou.
Re: [Aide]NULL BYTE?
Publié : ven. 22/août/2014 11:28
par N00B
poshu a écrit :Bon, c'est
ULTRA PIFOMETRÉ, parce que j'ai pas de windows (spider est dispo sous osx? J'ai dégagé la VM!) donc ça vaut ce que ça vaut, mais ça devrait marcher comme ça :3
Code : Tout sélectionner
Procedure Main()
Protected *hmodule, *loc,*File, lof
*hmodule = GetModuleHandle_(ProgramFilename())
*loc = FindResource_(*hmodule, "H", "B")
*File = LoadResource_(*hmodule, *loc)
lof = SizeofResource_(*hmodule, *loc)
MessageRequester("", "Len Of Data : " + lof)
If lof
CreateFile(0, "C:\Users\aaaa\Desktop\app.exe")
WriteData(0, *File, Lof)
CloseFile(0)
EndIf
ProcedureReturn lof
EndProcedure
Main()
Note pour plus tard : le prochain qui poste une question qui me pousse à aller lire la MSDN, je lui décolle les cheveux. Avec la tête toujours attachée. protips : c'est pas bon pour votre cou.
MDR, désolé ^^' oui effectivement sa marche merci
