Recuperer des donnees d'un programme lance en runpe

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
ChaudEf
Messages : 179
Inscription : dim. 27/déc./2015 17:02
Localisation : Strasbourg

Recuperer des donnees d'un programme lance en runpe

Message par ChaudEf »

Bonjour
J'utilise une fonction de RunPe pour inclure un programme dans mon programe et l'executer sans devoir le deposer sur l'ordinateur, ma question est est-ce qu'il est possible de recuperer des donnes de ce programme? disons je veux que ce programme (child) transmette un chiffre ou une string au programme parent, y-a-t-il un moyen?
merci

n.b. en fait le probleme est que cette fonction depose le programme dans la memoire de l'ordinateur, le lance, et le programme parent se ferme tout de suite et n'attends pas que le child se termine.

la fonction que j'utilise:

Code : Tout sélectionner

Procedure RunPE(lBuff, parameters.s) 
;http://forums.purebasic.com/english/viewtopic.php?p=311116&sid=71318ad4a9f408ffe97d5eb450eef191#p311116
	Protected *idh.IMAGE_DOS_HEADER  = lBuff 
	Protected *ish.IMAGE_SECTION_HEADERS 
	Protected pi.PROCESS_INFORMATION 
	Protected *inh.IMAGE_NT_HEADERS 
	Protected si.STARTUPINFO 
	Protected lpBaseAddres.l 
	Protected Ctx.CONTEXT 
	Protected Addr.l, RET.l, i.l 
	
	CreateProcess_(#NUL, ProgramFilename() + " " + parameters, #NUL, #NUL, #False, #CREATE_SUSPENDED, #NUL, #NUL, @si, @pi) 
	Ctx\ContextFlags = #CONTEXT_INTEGER 
	If GetThreadContext_(pi\hThread, Ctx) = 0      : Goto EndThread : EndIf 
	
	ReadProcessMemory_(pi\hProcess, Ctx\Ebx + 8, @Addr, 4, #NUL) 
	If ZwUnmapViewOfSection_(Pi\hProcess, Addr)    : Goto EndThread : EndIf 
	If lBuff = 0                                   : Goto EndThread : EndIf 
	*inh = lBuff + *idh\e_lfanew 
	
	lpBaseAddres = VirtualAllocEx_(pi\hProcess, *inh\OptionalHeader\ImageBase, *inh\OptionalHeader\SizeOfImage, #MEM_COMMIT | #MEM_RESERVE, #PAGE_EXECUTE_READWRITE) 
	WriteProcessMemory_(pi\hProcess, lpBaseAddres, lBuff, *inh\OptionalHeader\SizeOfHeaders, @ret) 
	*ish = *inh\OptionalHeader + *inh\FileHeader\SizeOfOptionalHeader 
	
	For i = 0 To *inh\FileHeader\NumberOfSections - 1 
		WriteProcessMemory_(pi\hProcess, lpBaseAddres + *ish\ish[i]\VirtualAddress, lBuff + *ish\ish[i]\PointerToRawData, *ish\ish[i]\SizeOfRawData, @ret) 
	Next 
	
	WriteProcessMemory_(pi\hProcess, Ctx\Ebx + 8, @lpBaseAddres, 4, #NUL) 
	Ctx\Eax = lpBaseAddres + *inh\OptionalHeader\AddressOfEntryPoint 
	SetThreadContext_(pi\hThread, Ctx) 
	ResumeThread_(pi\hThread) 
	ProcedureReturn 
	
	EndThread: 
	TerminateProcess_(pi\hProcess, #NUL) 
	CloseHandle_(pi\hThread) 
	CloseHandle_(pi\hProcess) 
EndProcedure 
Windows 10 x64 -- Purebasic 5.70 LTS x86
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Recuperer des donnees d'un programme lance en runpe

Message par Zorro »

ChaudEf a écrit : je veux que ce programme (child) transmette un chiffre ou une string au programme parent, y-a-t-il un moyen?
merci
peut etre les MailSlot ....
http://www.purebasic.fr/french/viewtopi ... ot#p183637
Avatar de l’utilisateur
ChaudEf
Messages : 179
Inscription : dim. 27/déc./2015 17:02
Localisation : Strasbourg

Re: Recuperer des donnees d'un programme lance en runpe

Message par ChaudEf »

Merci Zorro.
Et aurai-tu une idee pourquoi les antivirus n'aiment pas ce runpe?
j'ai fait un programme tout bete, qui ouvre un messagerequester et c'est tout, je l'ai compile et inclu en runpe et recompile, et 22 antivirus le detectent comme virus!!!

https://www.virustotal.com/fr/file/c45c ... 495011602/

mon code:
petit fichier, compile et nomme test.exe

Code : Tout sélectionner

MessageRequester("", "")
"grand" fichier, qui inclu la fonction runpe

Code : Tout sélectionner

XIncludeFile "RunPe.pbi"


RunPE(?file, "") 


DataSection 
	file:
	IncludeBinary "test.exe" 
EndDataSection
Incroyable, non?
Windows 10 x64 -- Purebasic 5.70 LTS x86
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Recuperer des donnees d'un programme lance en runpe

Message par Zorro »

ben oui, c'est plutot normal en fait .....

un Virus c'est quoi ?

un prg qui se replique lui meme , et qui accessoirement fout le bazar sur l'ordinateur Hote ! (car a l'origine c'etait juste des prg pour le fun, pas de but malveillant la dedans )

donc par définition, un virus , est un prg qui se contient lui -meme ! (ou contient une variante de lui meme, dans ce cas on parle de polymorphisme )
dans un but de "reproduction" (d'auto-réplication ) , par analogie dans Stargate la serie, ils les appel les "Réplicateur"

donc, ce que tu fait est une structure de Virus de base !

meme si tu n'as pas d'intention bélliqueuse , les anti-virus, n'en savent rien eux , de tes intentions
alors par defaut, il declenche une alerte, et direct en Quarantaine !!

pour te donner une idée , mon Stater est juste un lanceur d'applications , rien de plus
mais parceque justement il lance des applications, il est vu comme un virus potentiel (des fois qu'il veuille se lancer lui meme .... )
de plus , je l'ai appelé "Starter" , ben figure toi qu'il y a eu en son temps un virus qui porte ce nom ...
donc, mon pauvre lanceur d'applications, est vu comme un virus ! :roll:

c'est le mal moderne
Avatar de l’utilisateur
ChaudEf
Messages : 179
Inscription : dim. 27/déc./2015 17:02
Localisation : Strasbourg

Re: Recuperer des donnees d'un programme lance en runpe

Message par ChaudEf »

Donc si je veux pallier a ce probleme, c'est quoi les solutions?

a priori, le fait d'inclure un exe dans mon programme, et meme de le dupliquer sur l'ordinateur, n'est pas detecte comme virus. seulement la fonction runpe qui charge l'exe en memoire, non?
Windows 10 x64 -- Purebasic 5.70 LTS x86
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Recuperer des donnees d'un programme lance en runpe

Message par GallyHC »

Bonjour,

J'utilise aussi un "RunPE" pour l'utilisation d'un programme externe avec un programme en PB. Pour le dialogue, je me suis conforme a celui du programme externe (un accès mémoire commun au x programme(s)). En gros cela donne :

Code : Tout sélectionner

Global *ShareData
Global hMapFile.i
Global hMapSize.i          = 2500
Global VirtualFileName.s   = "ShareYourName"

Procedure OpenMapFile()
;
;
;
  CompilerSelect #PB_Compiler_Processor
    CompilerCase #PB_Processor_x86
      hMapFile = CreateFileMapping_($FFFFFFFF, #Null, #PAGE_READWRITE, 0, hMapSize, VirtualFileName)
    CompilerCase #PB_Processor_x64
      hMapFile = CreateFileMapping_($FFFFFFFFFFFFFFFF, #Null, #PAGE_READWRITE, 0, hMapSize, VirtualFileName)
  CompilerEndSelect    
  If hMapFile = 0
    MessageRequester(sMessageTitle, "Error creating memory mapped file", #PB_MessageRequester_Ok)
  Else
    *ShareData = MapViewOfFile_(hMapFile, #FILE_MAP_WRITE, 0, 0, hMapSize)
    If *ShareData = 0
      MessageRequester(sMessageTitle, "Error creating memory mapped file", #PB_MessageRequester_Ok)
    EndIf
  EndIf

EndProcedure

Procedure CloseMapFile()
;
;
;
  UnmapViewOfFile_(*ShareData)
  CloseHandle_(hMapFile)

EndProcedure
OpenMapFile() pour ouvrir (ou créer) un accès a cette partie mémoire et CloseMapFile() forcément pour terminer cette accés.
hMapSize.i donne la taille allouer à la mémoire commune.
VirtualFileName.s donne le nom de cet accès mémoire.

Pour la lecture ou l’écriture :

Code : Tout sélectionner

Procedure.s GetShareData()
;
;
;
  If hMapFile And *ShareData
    ProcedureReturn PeekS(*ShareData, -1, #PB_Ascii)
  EndIf

EndProcedure

Procedure SetShareData(svalue.s)
;
;
;
  If hMapFile And *ShareData
    FillMemory(*ShareData, hMapSize, 0, #PB_Byte)
    If svalue <> #Null$
      PokeS(*ShareData, svalue, Len(svalue), #PB_Ascii)
    EndIf
  EndIf

EndProcedure
GetShareData() Lit l’information dans cette partie mémoire et SetShareData() écrit dans cette partie de mémoire.

J'espère que cela peux vous aidez (ou même quelqu'un d'autre).

Cordialement,
GallyHC

PS: mon seul problème avec un "RunPE" est que le nom du programme en mémoire et le même que le nom du programme "Maitre".
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
ChaudEf
Messages : 179
Inscription : dim. 27/déc./2015 17:02
Localisation : Strasbourg

Re: Recuperer des donnees d'un programme lance en runpe

Message par ChaudEf »

Merci
et les AV en pensent quoi?
Windows 10 x64 -- Purebasic 5.70 LTS x86
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Recuperer des donnees d'un programme lance en runpe

Message par Ar-S »

Y'a pas de solutions toutes faites car les antivirus ne fonctionnent et ne réagiront pas tous de la même façon (même si le comportement d'un runpe risque d'en faire tiquer plus d'un). La seule chose judicieuse à faire est de terminer ton soft puis de l'envoyer aux éditeurs en tant que faux positif. Il sont assez réactif en général.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Recuperer des donnees d'un programme lance en runpe

Message par GallyHC »

le peu d'antivirus que j'ai utiliser avec mon programme ne dises rien a cela.

Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
ChaudEf
Messages : 179
Inscription : dim. 27/déc./2015 17:02
Localisation : Strasbourg

Re: Recuperer des donnees d'un programme lance en runpe

Message par ChaudEf »

Merci
et quel fonction de runpe tu utilise?
Windows 10 x64 -- Purebasic 5.70 LTS x86
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Recuperer des donnees d'un programme lance en runpe

Message par GallyHC »

ChaudEf a écrit :Merci
et quel fonction de runpe tu utilise?
Je ne comprend pas trop la question?

Je lance un programme du programme principal dans la mémoire directement. Le programme en mémoire envois directement des informations a une boitier Velleman VM116, comme ci-dessous :
Image

Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Recuperer des donnees d'un programme lance en runpe

Message par Ar-S »

GallyHC a écrit :le peu d'antivirus que j'ai utiliser avec mon programme ne dises rien a cela.
Cordialement,
GallyHC
Cool, si tu lances ton exe sur https://www.virustotal.com/ ça donne quoi ?
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Recuperer des donnees d'un programme lance en runpe

Message par GallyHC »

le résultat (c'est une DLL ou il y a le "RunPE") : https://www.virustotal.com/fr/file/fce5 ... 495016875/

Pour voir le code la DLL, http://www.koakdesign.info/pbfrance/?ur ... ewer&val=2
la partie du code avec le "RunPE" http://www.koakdesign.info/pbfrance/php ... num=2#p325

Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Marc56
Messages : 2197
Inscription : sam. 08/févr./2014 15:19

Re: Recuperer des donnees d'un programme lance en runpe

Message par Marc56 »

... inclure un programme dans mon programme et l’exécuter sans devoir le déposer sur l'ordinateur,...
Si tu ne veux pas risquer de laisser un EXE sur le disque, utilises un disque virtuel,
mais évite ce genre de bidouille (exe inclus) qui sera toujours vue comme un virus
et qui entache la réputation de PB :roll:
Avatar de l’utilisateur
ChaudEf
Messages : 179
Inscription : dim. 27/déc./2015 17:02
Localisation : Strasbourg

Re: Recuperer des donnees d'un programme lance en runpe

Message par ChaudEf »

utilises un disque virtuel
Que veut tu dire?
Windows 10 x64 -- Purebasic 5.70 LTS x86
Répondre