Funktionsaufruf

Status
Nicht offen für weitere Antworten.
Guten Tag,

ich suche eine Alternative zu

Code:
hProc = OpenProcess(PROCESS_ALL_ACCESS, false, id);

OpenProcess verlangt als letzter Parameter die PID ,der Anwendung.
Gibt es hierzu eine Funktion die als Parameter die aktive Funktionsadresse akzeptiert?

Assemblertechnisch gesehen,geht es um die Funktion CALL() d.h ich möchte meinem Programm sagen ,an dieser Adresse spring call zu dieser Funktion.

Mit PID ist es natürlich möglich,aber es sollte doch auch präziser gehen.

Der Speicher für den injectierten Funktionsaufruf innerhalb des Programmes wird ja sowieso reserviert und die Funktion abgelegt.

Das bedeutet doch theopraktisch ,das ich jedes CALL einer solchen Manipulation zumuten kann.Im Klartext ,mehr als ein Programmabsturz kann nicht passieren.


Gruß
wiki911
 
Assemblertechnisch gesehen,geht es um die Funktion CALL() d.h ich möchte meinem Programm sagen ,an dieser Adresse spring call zu dieser Funktion.
Call in welchem Context? Bei OpenProcess sicherlich nicht ;). Ansonsten verstehe ich mangels Kristallkugel/Skills nicht, worauf Du hinauswillst.

Der Code soll im Kontext des anderen Programms ausgeführt werden?
Es gibt sicherlich einige Rumtricksereien, um OpenProcess nicht aufrufen zu müssen (OpenThread/Get/SetThredcontext oder SetWindowsHookEx) bzw. der Klassiker "OpenProcess/CreateRemoteThread".

Der Speicher für den injectierten Funktionsaufruf innerhalb des Programmes wird ja sowieso reserviert und die Funktion abgelegt.
Hm, ohne den anderen Prozess vorher geöffnet zu haben und Speicher zu reservieren/Code hineinzuschreiben?
 
Was macht denn OpenProcess() mit der PID? Das ist doch nur mal wieder so eine Windows Ding und intern macht die Funktion nichts anderes als die aktive Funktion im Thread mittels Adresse anzusprechen.

Und wenn du es besser weis ,na dann hau in die Tasten und erkläre mir die super komplizierte Code-Speicher-CPU Technik :D:D:D:D:D

Aber bedenke,Windows kann auch nur mit Resourcen arbeiten die es zu Verfügung hat :wink: CPU,Speicher,Festplatte .Vermutlich hat dann bei Microsoft Speicherorganisation das größte Augenmerkmal verdient,damit alles im allen schön flüßig läuft ohne das man gleich seine Tastatur zertrümmern muss wie "Der echte Gangster" :P

Tschö


Gruß
Wiki911
 
OpenProcess() gibt eine Referenz auf einen anderen Prozess zurück. Und pid ist eine Nummer durch die ein Prozess identifiziert werden kann.

OpenProcess function

ps: Meine Glaskugel sagt mir, dass du dich erst einmal intensiver mit Grundlagen beschäftigen solltest.
 
Blablabla..... und von was rede ich die ganze Zeit?

Ich würde gerne statt die PID die Referenz angeben , also eine API die direkte Adresse des aktiven Prozess akzeptiert.

Gruß
 
OpenProcess möchte einen Prozess für dich öffnen.
Also braucht du ein Merkmal, was für diesen Prozess einzigartig ist.

Was hat das mit Adressen zu tun?
 
OpenProcess möchte einen Prozess für dich öffnen.

Okey, also eine PID bekommt man nur wenn ein Prozess bereits aktiv ist,jedenfalls so der Taskmanager und ProcessMonitor.

Also wenn der Prozess schon arbeitet (Programmlaufzeit) dann gibt´s dazu auch ne Adresse.

Schau dir doch mal Spy++ an. Hier bekommt man jeden aktiven Prozess (Thread) angezeigt.Ob aktiv oder inaktiv ,die Adressen sind hardgecodet im Speicher festgelegt von Windows organisiert.

OpenProcess macht nichts anderes als anhand der PID die aktiven Threads zu öffnen um dann ggf. dort reinzuschreiben.

Gibt es jetzt eine Funktion ,eine API die das selbe macht mit der Referenzangabe(Adresse , Speicherbereich) dieses aktiven Prozesses?
 
Was macht denn OpenProcess() mit der PID? Das ist doch nur mal wieder so eine Windows Ding und intern macht die Funktion nichts anderes als die aktive Funktion im Thread mittels Adresse anzusprechen.
PID = Prozessidentifier. Aufruf von NTOpenProcess ->irgendwas-> KIFastSystemCall -> SYSENTER

Und ich habe immer noch keine Ahnung, was du mit "aktiver Funktionsadresse" meinst.
Edit: aha. Direkte Adresse des aktiven Prozesses.
Und dann? Ich will gar nicht wissen, wie du diese Adresse im Userland ermittelst (und nein, EIP ist es sicherlich nicht). Nur zum Verständniss nochmal gefragt:
du willst eine Funktion ausführen lassen von einem ANDEREN Prozess?

Und wenn du es besser weis ,na dann hau in die Tasten und erkläre mir die super komplizierte Code-Speicher-CPU Technik :D:D:D:D:D
Stichworte: virtual memory/address/MMU /getrennte Speicherbereiche/GDT/Taskswitch/Kernel-Mode/User-Mode usw.
Oder reden wir doch über win 3.11?
Vielleicht sind wir aber einfach nicht qualifiziert genug, um Dir zu folgen :(. Da wärest Du sicherlich bei Heise besser aufgehoben - immerhin ist heute ja Freitag.
 
Also. Jetzt mal gaaaanz langsam und präzise.

Okey, also eine PID bekommt man nur wenn ein Prozess bereits aktiv ist,jedenfalls so der Taskmanager und ProcessMonitor.

Ähm ja, soweit richtig.

Also wenn der Prozess schon arbeitet (Programmlaufzeit) dann gibt´s dazu auch ne Adresse.

Nein. Es gibt zwar im Kernel eine EPROCESS-Struktur für jeden Prozess (und damit eine Adresse) aber das meinst du nicht.

Schau dir doch mal Spy++ an. Hier bekommt man jeden aktiven Prozess (Thread) angezeigt.Ob aktiv oder inaktiv ,die Adressen sind hardgecodet im Speicher festgelegt von Windows organisiert.

Nein. Das was Spy++ neben jedem Prozess anzeigt ist die PID. Aber eben zur Basis 16, also als Hexadezimalzahl. :wink:

OpenProcess macht nichts anderes als anhand der PID die aktiven Threads zu öffnen um dann ggf. dort reinzuschreiben.

OpenProcess liefert die ein Handle zurück, sozusagen die "Berechtigungs-Nummer" mit dem du mit dem Prozess weitere Operationen anstellen kannst. Also, wenn du Speicher vom Prozess lesen willst (ReadProcessMemory) brauchts du erst die "Berechtigungsnummer" (das Handle).
Einen Thread öffnet es nicht. Dazu gibt es OpenThread.

Gibt es jetzt eine Funktion ,eine API die das selbe macht mit der Referenzangabe(Adresse , Speicherbereich) dieses aktiven Prozesses?

Nein. Weil jeder Prozess einen virtuellen Adressraum hat, der theoretisch jede Adresse von 0x00000000 bis 0xFFFFFFFF beinhaltet.

Erst im Kernel werden diese virtuellen Speicheradressen abstrahiert und es wird ihnen die jeweilige physikalische Adresse zugeordnet.
OpenProcess() usw. gehören aber zur Usermode-API. Die können mit solchen Dingen nichts anfangen.
 
  • Like
Reactions: CDW
Nein. Das was Spy++ neben jedem Prozess anzeigt ist die PID. Aber eben zur Basis 16, also als Hexadezimalzahl.

Gut dann sind das halt HexAngaben der PID. Sind nun mal alles so logische Menschen,die logisches Schaffen ;)
Ich glaube langsam das ich ne Brille wie Heino brauche :P



OpenProcess liefert die ein Handle zurück, sozusagen die "Berechtigungs-Nummer" mit dem du mit dem Prozess weitere Operationen anstellen kannst. Also, wenn du Speicher vom Prozess lesen willst (ReadProcessMemory) brauchts du erst die "Berechtigungsnummer" (das Handle).
Einen Thread öffnet es nicht. Dazu gibt es OpenThread.


Also kann ich das mit den Adressen vergessen..... Wieso wird Windows 8 nicht wie Windows 9.11 komplett Hardwarenah.

Wieso entfernt Windows sowie Linux den Menschen von der Maschinentechnik. Schau mal wie das alles verwirrt,diese ganzen virtuellen Dinge. Und dazu noch die unlogischen PID NUMMER = Hex bei Spy++ .


Ich verstehe die Führer nicht,wieso sie das nicht so mach wie es sich gehört,die Wirtschaft würde doch dann auch genügend Firmen hervorrufen die Gegenmaßnahmen gegen Hacker,Cracker entwickeln würde.Aber alles gesund und sauber,nämlich maschinennah so wie das Verständnis sein sollte.

Nur damit diese Führer wieder als Herdentier und Besserwisser stahlen könne.

Aber danke erst mal +++ATHO
 
Mit dem HANDLE ist ja auch ein Satz Berechtigungen verbunden (der process/thread manager fragt die über eine implizit mit ZwOpenProcess (über OpenProcess von NtOpenProcess aufgerufen) erstellten Security Descriptor (genau genommen refernziert der HANDLE nur eine struktur im kernel, die die PID/einen zeiger auf nen EPROCESS und eben diesen sd enthalten) beim seref ab, wenn ich mich recht erinnere). Ohne die läuft erstmal gar nix, seit XP sollte es ohne SeDebugPrivilege nicht mehr möglich sein, in den Speicher fremder Prozesse zu schreiben.
Eine PID ist im grunde auch nichts weiter als eine abstrahierung von der EPROCESS addresse. der kernel hat irgendwo ein mapping rumliegen von PIDs auf EPROCESS*. hat natürlich auch einen sicherheitshintergrund, weil anwendungen soweit irgend möglich überhaupt keine ahnung von den addressen im kernel mode haben sollen... das sind dürften auch heute noch reale addressen sein...

die Adressen sind hardgecodet im Speicher festgelegt von Windows organisiert.
Nein. Definitiv nein. Es gibt eine Struktur, die auch schon erwähnt wurde, namens EPROCESS die der Kernel für jeden Prozess erstellt.
Dann gibt es natürlich noch für jeden Prozess den primären Thread und der hat auch eine Addresse, die sehr prominent verwendet wird. Nämlich die Einsprungaddresse, also die Addresse der main()-Funktion im virtuellen Addressraum des Prozesses zu dem dieser Thread gehört.
Davon gibts nur eine pro Prozess, ja.

Die hat aber nach dem Prozessstart ... äh keinen praktischen Nutzen und ist auch nicht eindeutig. Sie ist sogar sehr wahrscheinlich nicht eindeutig, weil das system images fast immer an ihre preferred base laden und bei gleichem compiler/linker die main() oft an der gleichen stelle landet. nur bei DLLs die nicht auf einer whitelist (user32, kernel32 usw.) sind wird ASLR angewandt...

Kurz gesagt: Ein Prozess hat keine Addresse, basta.
 
enkore

Das interessiert mich doch nicht , ich bin der Meinung, wenn das gutmütige Herdengetier ein Betriebsystem für die Masse rausbringen,dann sollte das ganze OS Maschinennah sein.

Das bedeutet, das alle Systemprozesse sowie Userprozesse die im Speicher sind ,eindeutig vom System Adressiert sein sollen.

Das bedeutet : das jedes Programm welches gestartet wird ob Systemprogramm oder Userprogramm ,Windows dafür integrierte Tools haben soll,um alle Variable,Befehle,Funktion eindeutig zu erkennen ,wo sie im Speicher gerad adressiert sind.

Damit der Bürger auch ein bisschen was von der Technik hat,der sich dafür interessiert.


Virtuelle Adressräume (nicht maschinennah) ,seltsame Bezeichnungen(PID) sind und haben Pöbelambitionen.

Unsere Wirtschaftführer möchten nur als Klugscheisser mit (Inzuchtsrechtvertigung) mit ihrer rosa Brille durch die Welt laufen um sagen zu können , das hätte wirtschaftliche Aspekte.

Aber es ist doch ganz klar.Man könnte diese Aspekte auch erzeugen wenn die Technik maschinennah wäre,somit würden Sicherheitsfirmen solide Lösungen finden anstatt rumzucaspern.

Gruß :D
 
Das bedeutet, das alle Systemprozesse sowie Userprozesse die im Speicher sind ,eindeutig vom System Adressiert sein sollen.

Was bedeutet das?
Was soll an der Adresse genau sein?

Möchtest du die Prozesse anhand der physikalischen Adresse identifizieren, wo die ausführbare Datei (also die exe) hingeladen wird?

Das wird wohl nix...
Denn dann hätten alle svchost.exe Prozesse die gleiche physikalische Adresse, weil svchost.exe sich physikalisch nur einmal im Speicher befindet, solange man sie nicht verändert.

Was soll an dieser Adresse sein? Und warum soll man nach komplizierten langen Adressen die Prozesse identifizieren und nicht mit kleinen eindeutigen Nummern (PIDs)?

Virtuelle Adressräume (nicht maschinennah) ,seltsame Bezeichnungen(PID) sind und haben Pöbelambitionen.

Diese sind durchaus sinnvoll.
Ich würde mir an deiner Stelle etwas Wissen in Betriebssystemarchitektur aneignen.
Wie sonst kannst du denn darüber urteilen, was gut oder schlecht an einem Betriebssystem ist?

Wenn du keine virtuelle Adressräume magst, dann installier dir doch Windows 98. :wink:
 
Das interessiert mich nicht , alles soll maschinennah sein ,nix virtuelles, keine Nerd-Otto-Umschreibungen wie PID´s.

Alles sinnlos und hat nichts mehr mit der eigentlichen Materie zu tun. Jeder kann das so sehen wie er will!!!
 
Ja, sry Junge, aber da musst halt mit dem Basiskram zurecht kommen. Der krasse Scheiß, der erst in ein paar Jahren Public wird, wird hier nur intern getraded und nur an verdiente Member weitergegeben!
 
Ich finde zwar nicht unbedingt, dass xrayn gutes tut hier unsere Regeln so rauszuposaunen, aber recht hat der gute Mann.
 
Das interessiert mich nicht , alles soll maschinennah sein ,nix virtuelles, keine Nerd-Otto-Umschreibungen wie PID´s.

Das ist(!) maschinennah. Moderne CPUs sind darauf ausgelegt soetwas zu leisten. (bezüglich virtuellem Adressraum)
(siehe: http://de.wikipedia.org/wiki/Ring_(CPU))

Das, was du hier sagst, ist überhaupt nicht maschinennah, sondern maschinenfern!

wiki911 hat gesagt.:
Das bedeutet : das jedes Programm welches gestartet wird ob Systemprogramm oder Userprogramm ,Windows dafür integrierte Tools haben soll,um alle Variable,Befehle,Funktion eindeutig zu erkennen ,wo sie im Speicher gerad adressiert sind.

Die von Neumann-Architektur macht diese Eindeutigkeit ja gerade unmöglich!
Die Uneindeutigkeit ist also maschinennah!

Warum bist du für maschinenferne, wiki911?

Ich bin lieber ein sehr maschinenaher Mensch. Ich liebe Reverse Engineering und Assembly. :wink:
 
Code:
         \|||/       
         (o o)       
,----ooO--(_)-------.
| Please            |
|   don't feed the  |
|     TROLL's !     |
'--------------Ooo--'
        |__|__|      
         || ||        
      ooO Ooo
PS: durch einen eigenhändig geschriebenen CS Wallhack gehörst Du natürlich zur Elite. Denn von RawMemory-Manipulation können wir mit unseren Java/NET/Pythonskillz nur träumen :(. Und durch viele Fachtermini wie "Injection" und "Assembler" wirst Du so richtig unheimlich (und lässt Neid aufkommen)!!1

Daher: bleib doch bitte bei einfachen Fragen.
Oder trolle etwas gescheiter. Ich kann den Witz nicht nachvollziehen, sinnloses Zeug in den Raum zu werfen und sich über "dumme" zu erfreuen, die Zeit in ernsthafte Antworten investieren :rolleyes:
Die unbestrittene Überlegenheit über die "nonoldschool-hax0rs" kann schliesslich auch mit informatieren Postings gezeigt werden :rolleyes:.
 
Status
Nicht offen für weitere Antworten.
Zurück
Oben