[delphi] win98 -> win xp & kernell32.dll functies

Pagina: 1
Acties:

  • Parcye
  • Registratie: Maart 2001
  • Laatst online: 24-08-2017
Hoi!

Ik heb een programma geschreven om in Win98 de geheugen te editen van Championship manager, maar nu hoor ik van velen dat het niet werk in XP, komt dit omdat de functies uit de kernell32.dll die ik gebruik niet werk in xp of zijn er andere redenen? Wie heeft er ervaging mee?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function CreateToolhelp32Snapshot(p1, p2 : longint) : longint; stdcall; external 'kernel32.dll';
function Process32First(p1 : longint; var p2 : ProcessRecord) : longint; stdcall; external 'kernel32.dll';
function Process32Next(p1 : longint; var p2 : ProcessRecord) : longint; stdcall; external 'kernel32.dll';
function Module32First(p1 : longint; var p2 : ModuleRecord) : longint; stdcall; external 'kernel32.dll';
function Module32Next(p1 : longint; var p2 : ModuleRecord) : longint; stdcall; external 'kernel32.dll';
function OpenProcess(p1, p2, p3 : longint) : longint; stdcall; external 'kernel32.dll';
function GetProcessWorkingSetSize(p1    : longint;
                        p2,p3 : pointer) : longint; stdcall; external 'kernel32.dll';
function ReadProcessMemory(p1,p2 : longint;
                   p3    : pointer;
                   p4    : longint;
                   p5    : pointer) : longint; stdcall; external 'kernel32.dll';

function WriteProcessMemory(p1,p2 : longint;
                    p3    : pointer;
                    p4    : longint;
                    p5    : pointer) : longint; stdcall; external 'kernel32.dll';

"Als je het kan bedenken, kan het gemaakt worden" Parcye - 14 januari 2002


  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 03-09 16:40
Ik gok dat je die rechten niet hebt in XP.

Verwijderd

Alle calls die je doet worden door XP ondersteund de enige rare die ik tegen kwam was.
code:
1
2
3
4
5
6
GetProcessWorkingSetSize
Requirements 
  Windows NT/2000/XP: Included in Windows NT 3.5 and later.
  Windows 95/98/Me: Unsupported.
  Header: Declared in Winbase.h; include Windows.h.
  Library: Use Kernel32.lib.

Maar dan zou je andersom problemen verwachten eigenlijk. dus beats me, krijg je een specifieke foutmelding of werkt het gewoon niet?!

  • Parcye
  • Registratie: Maart 2001
  • Laatst online: 24-08-2017
Het werkt gewoon niet, mensen die willen proberen...

Download hier

Heb inmiddels de kernell32.dll van winxp van iemand verkregen. Maar daar zie ik geen verschillen in de functies in

"Als je het kan bedenken, kan het gemaakt worden" Parcye - 14 januari 2002


  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 03-09 16:40
Ja ok, maar vergeet niet dat Windows XP een NT variant is. Dat betekent dat er heel veel zaken niet zomaar toegankelijk zijn in XP. Wat jij wil is rechtstreeks in de adres ruimte schrijven van een ander proces. Heeft jou programma daartoe de rechten wel van XP? Probeer het progje is onder het system of administrator account te draaien. Kijken wat ie dan zegt.

Ik ga even in richter zoeken, kijken wat die te zeggen heeft.

  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 03-09 16:40
Ik heb niet echt een idee of onderstaande van toepassing is. Maar het geeft wel aan dat er verschillen zitten tussen Win9x en Win NT
64-KB Off-Limits Partition (Windows 2000 Only)
This 64-KB partition just above the user-mode partition is off-limits, and any attempt to access memory in this partition causes an access violation. Microsoft reserves this partition because doing so makes implementing the operating system easier for Microsoft. When you pass the address of a block of memory and its length to a Windows function, the function validates the memory block before performing its operation. You could easily imagine code like this (running on a 32-bit Windows 2000 system):
code:
1
2
3
4
BYTE  bBuf[70000];
DWORD dwNumBytesWritten;
WriteProcessMemory(GetCurrentProcess(), (PVOID) 0x7FFEEE90, bBuf,
   sizeof(bBuf), &dwNumBytesWritten);




For a function like WriteProcessMemory, the memory region being written to is validated by kernel-mode code, which can successfully access memory in the kernel-mode partition (addresses above 0x80000000 on a 32-bit system). If there is memory at the 0x80000000 address, the above call will succeed in writing data to memory that should be accessible only by kernel-mode code. To prevent this while making the validation of such memory regions fast, Microsoft chose to keep this partition always off-limits; any attempt to read from or write to memory in this region will always cause an access violation.
Kernel-Mode Partition (Windows 2000 and Windows 98)
This partition is where the operating system's code resides. The code for thread scheduling, memory management, file systems support, networking support, and all device drivers is loaded in this partition. Everything residing in this partition is shared among all processes. In Windows 2000, these components are completely protected. If you attempt to access memory addresses in this partition, your thread will raise an access violation, causing the system to display a message box to the user and killing your application. See Chapters 23, 24, and 25 for more information about access violations and how to handle them.


Windows 2000
--------------------------------------------------------------------------------
In 64-bit Windows 2000, the 4-TB user-mode partition looks greatly out of proportion to the 16,777,212-TB kernel-mode partition. It's not that the kernel-mode partition requires all of this virtual address space. It's just that a 64-bit address space is enormous and most of that address space is unused. The system allows our applications to use 4 TB and allows the kernel to use what it needs; the majority of the kernel-mode partition is just not used. Fortunately, the system does not require any internal data structures to maintain the unused portions of the kernel-mode partition.


Windows 98
--------------------------------------------------------------------------------
Unfortunately, in Windows 98, the data in this partition is not protectedany application can read from or write to this section, potentially corrupting the operating system.

Verwijderd

Doe je wel iets met de return waardes van die functies, ze melden namelijk allemaal of het goed gegaan is of niet..

  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 03-09 16:40
Op zaterdag 24 november 2001 20:44 schreef Yarvieh het volgende:
Doe je wel iets met de return waardes van die functies, ze melden namelijk allemaal of het goed gegaan is of niet..
Is er iets fout gegaan dan kun je met getLasError(). De laatste error gespecificeerd krijgen. (weet niet het exacte hoofdletter gebruik in deze functie)

Verwijderd

Op zaterdag 24 november 2001 21:12 schreef The - DDD het volgende:
(weet niet het exacte hoofdletter gebruik in deze functie)
Standaard ieder woord een eigen hoofdletter GetLastError dus ;)

Verwijderd

Kan je de toolhelp functies zomaar gebruiken onder XP ? Ik meende dat de NT varianten ook een psapi.dll hebben, die speciaal voor NT/2K is ontwikkeld. En aangezien XP op NT is gebaseerd...
Heb je anders al eens geprobeerd om het programma in compatiblity mode uit te voeren ( dus 98 "simuleren" via XP ) ?

Verwijderd

Op zondag 25 november 2001 17:21 schreef SpHeaRe het volgende:
Kan je de toolhelp functies zomaar gebruiken onder XP ?
Jup mag gewoon:
code:
1
2
3
4
5
CreateToolhelp32Snapshot
[..]
Requirements 
  Windows NT/2000/XP: Included in Windows 2000 and later.
  Windows 95/98/Me: Included in Windows 95 and later.

Verwijderd

Op zondag 25 november 2001 17:23 schreef Yarvieh het volgende:

[..]

Jup mag gewoon:
code:
1
2
3
4
5
CreateToolhelp32Snapshot
[..]
Requirements 
  Windows NT/2000/XP: Included in Windows 2000 and later.
  Windows 95/98/Me: Included in Windows 95 and later.
offtopic:
Handig. Ik zat steeds maar te klooien met de psapi om een processlist te krijgen. :)

Verwijderd

Doosje msdn cd's kost je 500 piek per jaar, maar scheelt je uren puzzelen en zoeken in die online versie. (online versie is crap)

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 14-09 17:42

Gerco

Professional Newbie

Op zondag 25 november 2001 17:28 schreef Yarvieh het volgende:
Doosje msdn cd's kost je 500 piek per jaar, maar scheelt je uren puzzelen en zoeken in die online versie. (online versie is crap)
Wat krijg je voor die 500 piek? Updates? Complete library elk jaar? klinkt wel interessant.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Verwijderd

Op zondag 25 november 2001 17:38 schreef Gerco het volgende:

[..]

Wat krijg je voor die 500 piek? Updates? Complete library elk jaar? klinkt wel interessant.
Ik dacht een jaar lang updates. (elke 3 maanden nieuw setje cd's ofzo) Je krijgt trouwens nog een korting als je MSCE bent. (of is die 500,- al met korting ?)
/me vind het imo heel klein beetje veel duur

edit:
Er zijn verschillende licenses.
Duurste is $2800, goedkoopste $200.
En dan zijn er nog student licenses
http://msdn.microsoft.com/subscriptions/prodinfo/levels.asp

Verwijderd

Op zondag 25 november 2001 17:38 schreef Gerco het volgende:
Wat krijg je voor die 500 piek? Updates? Complete library elk jaar? klinkt wel interessant.

zie deze page voor overzicht wat waar bij zit.

edit: SpHeaRe was me voor

Verwijderd

Het antwoord is heel simpel, in alle nt varianten dus ook 2000 en XP mag je niet in geheugengebieden van andere applicaties komen. Dus deze api call werkt gewoon niet onder Xp.

Nu zou je zeggen, waarom zit die call er dan wel in.
Dit komt omdat microsoft vanwege compatibiliteit heeft toegezegt in elke windows versie de oude api calls te ondersteunen om zo de kans dat software draait op een nieuwere versie groter te maken.

Je kunt je waarschijnlijk wel voorstellen dat bepaald api calls overbodig worden door nieuwe features in het OS. Een oudere applicatie zal dan toch goed werken omdat de api call er wel is maar eigenlijk niks doet omdat het niet nodig is.

Verwijderd

Op zondag 25 november 2001 18:08 schreef ItsMeAgain het volgende:
blah die blah..
Sorry maar *ONZIN* , zolang je maar voldoende rechten hebt mag je met ReadProcessMemory WriteProcessMemory gewoon in geheugen van andere processen rommelen hoor..

  • Parcye
  • Registratie: Maart 2001
  • Laatst online: 24-08-2017
Dus komt het er op neer, je kan lang er kort lullen maar de gebruiker moet Admin zijn wil hij dit kunnen doen?

offtopic:
PSV KAMPIOENUH! Heb super middag gehad in Amsterdam! Co haalt de kerstmis niet ;) Boeren zijn de baas in Amsterdam

"Als je het kan bedenken, kan het gemaakt worden" Parcye - 14 januari 2002


Verwijderd

Op zondag 25 november 2001 19:48 schreef Parcye het volgende:
Dus komt het er op neer, je kan lang er kort lullen maar de gebruiker moet Admin zijn wil hij dit kunnen doen?
Admin hoeft niet, hij moet wel lid zijn van de groep debugger users.

  • Parcye
  • Registratie: Maart 2001
  • Laatst online: 24-08-2017
Ik laat het nu testen, ik zal de resultaten door geven.

Zijn er meer dingen die mogelijk fout kunnen gaan met win9x -> xp api routines

edit:

Ik kreeg de vraag, waar zet ik het aan dat ik debug rechten heb?

"Als je het kan bedenken, kan het gemaakt worden" Parcye - 14 januari 2002


  • Parcye
  • Registratie: Maart 2001
  • Laatst online: 24-08-2017
Ik heb begrepen dat dat niet helpt zorgen dat je Admin bent is niet genoeg.

"Als je het kan bedenken, kan het gemaakt worden" Parcye - 14 januari 2002


Verwijderd

Ik denk dat je alleen maar schrijf rechten tot een process kunt krijgen indien het process wat erin moet schrijven het process waarin geschreven moet worden start en daarbij in de flaggen meegeeft dat dit mag.

Volgens mij kun je nooit in een process komen op een nt achtige OS, tenzijn je daar bij het bouwen van beide kanten rekening meer gehouden hebt. Aangezien het hier om een trainer voor een spel van een ander gaat kan het denk ik gewoonweg niet.

  • Parcye
  • Registratie: Maart 2001
  • Laatst online: 24-08-2017
Dan hebben paar miljoen mensen gewoon flink pech :)

"Als je het kan bedenken, kan het gemaakt worden" Parcye - 14 januari 2002


Verwijderd

Op maandag 26 november 2001 19:01 schreef ItsMeAgain het volgende:
Volgens mij kun je nooit in een process komen op een nt achtige OS, tenzijn je daar bij het bouwen van beide kanten rekening meer gehouden hebt. Aangezien het hier om een trainer voor een spel van een ander gaat kan het denk ik gewoonweg niet.
Kan *WEL* lees nou of de documentatie er es op na, of kom met bewijs op de proppen dat het niet zo is maar stop es met die onzin te verkondigen.

  • Parcye
  • Registratie: Maart 2001
  • Laatst online: 24-08-2017
De persoon die het voor mij heeft getest kan geen debug opties vinden (engelse XP) Ik heb zelf geen XP dus zou hem niet kunnen helpen, iemand een idee waar die opties aan zet?

"Als je het kan bedenken, kan het gemaakt worden" Parcye - 14 januari 2002


Verwijderd

Volgende stappen plan volgen:

Settings
Control panel
Administrative tools
Computer Managment
Local users and groups
groups
Debugger Users

  • Parcye
  • Registratie: Maart 2001
  • Laatst online: 24-08-2017
Ik hoor van de meeste dat die optie er niet is... op Win XP PRO

"Als je het kan bedenken, kan het gemaakt worden" Parcye - 14 januari 2002


Verwijderd

misschien moet je eerst het debugprivilege enabelen.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
function EnableNTPrivilege (const privilege : string; state : Integer) : Integer;
var
  hToken : THandle;
  aluid : TLargeInteger;
  cbPrevTP : DWORD;
  tp, fPrevTP : PTokenPrivileges;
begin
  result := 0;
  if OpenProcessToken (GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then
  try
    LookupPrivilegeValue (Nil, PChar (privilege), aluid);

    cbPrevTP := SizeOf (TTokenPrivileges) + sizeof (TLUIDAndAttributes);

    GetMem (tp, cbPrevTP);
    GetMem (fPrevTP, cbPrevTP);
    try

    tp^.PrivilegeCount := 1;
    tp^.Privileges [0].Luid := aLuid;
    tp^.Privileges [0].Attributes := state;

    if not AdjustTokenPrivileges (hToken, False, tp^, cbPrevTP, fPrevTP^, cbPrevTP) then
      RaiseLastWin32Error;

    result := fPrevTP^.Privileges [0].Attributes;

    finally
     FreeMem (fPrevTP);
     FreeMem (tp);
    end
  finally
    CloseHandle (hToken);
  end
end;



EnableNTPrivilege ('SeDebugPrivilege',SE_PRIVILEGE_ENABLED);

  • Parcye
  • Registratie: Maart 2001
  • Laatst online: 24-08-2017
Moet die functie alleen aangeroepen worden bij laden of moet dat vaker gebeuren. Hij krijgt het proces niet gevonden.

Zijn er extra regels in XP aan de parameters?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
function TCMGeneral.CMRunning : boolean;
var snaphandle : longint;
    procrec    : ProcessRecord;
    boolres    : longint;
    cmfound   : boolean;
begin
//***********************************************
//kernel32 code
  boolres := th32cs_snapprocess;
  cmfound := false;
  procrec.dwSize := sizeof(procrec);
  snaphandle := createtoolhelp32snapshot(2,0);
  boolres := process32first(snaphandle,procrec);
//***********************************************
  while boolres = 1 do
  begin
    //check if CM0102.exe is running
    if pos('\CM0102',procrec.szExeFile) > 0 then
    begin
    cmprocrec := procrec;
    cmfound := true;
    end;
    boolres := process32next(snaphandle,procrec);
  end;
  if cmfound then
  begin
    FMemHandle := openprocess(0,0,cmprocrec.th32ProcessID);
  end;
  //return the result
  Result:=cmfound
end;

"Als je het kan bedenken, kan het gemaakt worden" Parcye - 14 januari 2002


  • Parcye
  • Registratie: Maart 2001
  • Laatst online: 24-08-2017
Bij FormCreate heb ik EnableNTPrivilege ('SeDebugPrivilege',SE_PRIVILEGE_ENABLED);
toegevoegd en de functie, maar dit is dus niet de oplossing, hij wijgerd het proces te vinden dus kan hij ook niet verder gaan met inladen van de nodige data.

"Als je het kan bedenken, kan het gemaakt worden" Parcye - 14 januari 2002


  • Parcye
  • Registratie: Maart 2001
  • Laatst online: 24-08-2017
Probleem lijkt opgelost.

ipv kernell32.dll functies zelf benaderen de kernell32 functies die in mijn Delphi zitten te gebruiken.

Momenteel nog geen problemen ondervonden gelukkig.

"Als je het kan bedenken, kan het gemaakt worden" Parcye - 14 januari 2002

Pagina: 1