Toon posts:

[Delphi] lpaddress parameter in VirtualAllocEx

Pagina: 1
Acties:
  • 108 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hallo allen,

Ik ben een programma aan het schrijven waarin ik VirtualAllocEx nodig heb. Volgens mijn informatie moet de 2e parameter een HModule zijn (en dit klopt echt, want in een C-code die ik heb werkt het wel). Echter krijg ik het niet voor elkaar om dit op een juiste manier te typecasten. Hier is wat ik wil doen:

code:
1
2
3
4
5
6
var
  CModule:  HModule;
begin
  CModule := 0;
  CModule := GetmoduleHandle (Nil);
     pMem := VirtualAllocEx (hProcess, nil, dwSize, MEM_COMMIT or     MEM_RESERVE,PAGE_EXECUTE_READWRITE);


waar de parameter hierboven nil is moet CModule komen te staan, maar ik krijg dit niet voor elkaar zonder errors. Weet iemand hoe ik dit op een juiste manier moet typecasten?

hier nog een stukje uit de delphi-help over de virtualallocex functie:

The VirtualAllocEx function reserves, commits, or both, a region of memory within the virtual address space of a specified process. The function initializes the memory it allocates to zero.

The difference between the VirtualAllocEx function and the VirtualAlloc function is that VirtualAlloc allocates memory within the address space of the calling process, while VirtualAllocEx lets you specify a process.

LPVOID VirtualAllocEx(

HANDLE hProcess, // process within which to allocate memory
LPVOID lpAddress, // desired starting address of allocation
DWORD dwSize, // size, in bytes, of region to allocate
DWORD flAllocationType, // type of allocation
DWORD flProtect // type of access protection
);

[ Voor 3% gewijzigd door Verwijderd op 06-05-2003 16:55 ]


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Wat zijn de errors? Volgensmij is het gewoon goed als je VirtualAllocEx met de 2e parameter als nil aanroept. Als je de huidige module handle wilt hebben kan je gewoon de globale variable HInstance gebruiken. Maar GetModuleHandle(nil) moet ook werken.

We adore chaos because we like to restore order - M.C. Escher


  • madwizard
  • Registratie: Juli 2002
  • Laatst online: 26-10-2024

madwizard

Missionary to the word of ska

Volgens mij mag hProcess geen module handle zijn maar moet het echt een process handle zijn. Een module handle is specifiek voor 1 module binnen een process (je app zelf, kernel32.dll, user32.dll, etc.). Process handle is om het hele proces aan te geven. Probeer eens GetCurrentProcess of OpenProcess in combinatie met GetCurrentProcessId om de access rechten wat te beperken (je hebt alleen PROCESS_VM_OPERATION nodig voor VirtualAllocEx en GetCurrentProcess heeft alle rechten iirc).
edit: uhm ik zie dat je hProcess al wel hebt staan, dacht eerst dat daar die CModule voor was dus als je al een goede process handle had heb ik niks gezegd.. Maar de tweede parameter dat is toch een adres geen module handle?

[ Voor 20% gewijzigd door madwizard op 06-05-2003 20:50 ]

www.madwizard.org


Verwijderd

Topicstarter
nee, die nil moet een module handle zijn. Volgens de C-code die ik hier voor me heb moet lpAddress een module handle zijn. In C lukt het wel, maar in delphi moet ik blijkbaar een typecast uitvoeren

Het moet kunnen. Wat in C kan, kan ook in delphi..... wat die manier ook mag wezen dan

Verwijderd

Topicstarter
LordLarry schreef op 06 May 2003 @ 20:29:
Wat zijn de errors? Volgensmij is het gewoon goed als je VirtualAllocEx met de 2e parameter als nil aanroept. Als je de huidige module handle wilt hebben kan je gewoon de globale variable HInstance gebruiken. Maar GetModuleHandle(nil) moet ook werken.
Het werkt, maar het is niet goed. Ik heb dit namelijk uit een stukej C-code. En volgens de code die ik moet vertalen naar delphi, moet die lpAddress echt een module handle zijn

Verwijderd

Topicstarter
het resultaat van mijn foutcontrole op VirtualAllocEx is overgens:

487:Attempt to access invalid address

Maar op een een of andere manier moet dat die CModule op de plaats van nil, want dat is in de C-code ook zo.

Daar komt nog bij dat ik helemaal niets heb aan de dwSize parameter op het moment dat ik lpAddress op nil stel, want dan wordt ook deze automatisch bepaald.

  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 01:25

Tomatoman

Fulltime prutser

Heb je HInstance nou al geprobeerd, zoals LordLarry suggereerde?

Een goede grap mag vrienden kosten.


  • madwizard
  • Registratie: Juli 2002
  • Laatst online: 26-10-2024

madwizard

Missionary to the word of ska

De module handle is (niet officieel trouwens) gelijk aan het image base address van de module waarvoor het een handle is. Vandaar dus dat je het als adres kan zien. De enige reden die ik zo kan bedenken om daar een module handle op los te laten is om een module in een ander proces te krijgen op hetzelfde adres, wat voor code is die C code? Ziet er DLL-injection achtig uit.

www.madwizard.org


Verwijderd

Topicstarter
madwizard schreef op 07 May 2003 @ 10:16:
De module handle is (niet officieel trouwens) gelijk aan het image base address van de module waarvoor het een handle is. Vandaar dus dat je het als adres kan zien. De enige reden die ik zo kan bedenken om daar een module handle op los te laten is om een module in een ander proces te krijgen op hetzelfde adres, wat voor code is die C code? Ziet er DLL-injection achtig uit.
nee, ik ben een sniffer aan het maken die op kernel niveau opereerd.

Verwijderd

Topicstarter
tomatoman schreef op 07 mei 2003 @ 01:56:
Heb je HInstance nou al geprobeerd, zoals LordLarry suggereerde?
ja, heb ik als volgt gedaan:

pMem := VirtualAllocEx (hProcess, pointer(HInstance), dwSize, MEM_COMMIT or MEM_RESERVE,PAGE_EXECUTE_READWRITE);


krijg alleen nog steeds de zelfde foutmelding
Pagina: 1