[Aide]NULL BYTE?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
N00B
Messages : 7
Inscription : mar. 19/août/2014 11:16

[Aide]NULL BYTE?

Message 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 :'( :


Image



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 :


Image


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
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Re: [Aide]NULL BYTE?

Message 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 °_°;
N00B
Messages : 7
Inscription : mar. 19/août/2014 11:16

Re: [Aide]NULL BYTE?

Message 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
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Re: [Aide]NULL BYTE?

Message 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?
N00B
Messages : 7
Inscription : mar. 19/août/2014 11:16

Re: [Aide]NULL BYTE?

Message 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 ? :'(
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: [Aide]NULL BYTE?

Message par G-Rom »

Fait se que Poshu t'as dit, oublie les String , passes par des pointeurs. ton peeks fou surement la m..
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: [Aide]NULL BYTE?

Message 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.
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Re: [Aide]NULL BYTE?

Message 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.
N00B
Messages : 7
Inscription : mar. 19/août/2014 11:16

Re: [Aide]NULL BYTE?

Message 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 :)
Répondre