Autor Beitrag
#Crasher
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23

Win 95, Win 98, Win NT, Win XP (used), Win Vista
D3, D4, D6, D7, D2005, BDS2006 Arch. UPD2
BeitragVerfasst: Fr 20.07.07 14:29 
Hallo...

Ist es realisierbar, denn Speicher zu prüfen, ob z.B. Prog1.exe auf Prog2.exe zugreift?
Wenn ja, wie?

- Crasher
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 21.07.07 01:33 
Definiere "zugreifen".
#Crasher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23

Win 95, Win 98, Win NT, Win XP (used), Win Vista
D3, D4, D6, D7, D2005, BDS2006 Arch. UPD2
BeitragVerfasst: Sa 21.07.07 15:54 
Was genau, soll ich unter dem Stichwort "zugreifen" verstehen?

- Crasher
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 21.07.07 15:59 
:shock: Du selbst hast das Wort benutzt... :lol:

Deine Frage ist genau die, die du beantworten müsstest.
Die Frage ist, was du unter "Prog1.exe greift auf Prog2.exe zu" verstehst! Es gibt ja viele verschiedene Möglichkeiten eines Zugriffs. Beispielsweise greift ein Debugger auf eine andere Exe auf eine Weise zu, ein Hex-Editor auf eine andere...
Und deshalb müsstest du genauer definieren, was du eigentlich meinst, damit dir jemand helfen kann.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Sa 21.07.07 17:01 
Im Wesentlichen befindet sich aber für die meisten Zugriffsarten die Lösung in der Handle-Tabelle von Windows, auf die man, wenn die Berechtigungen korrekt eingestellt sind, keinen Zugriff bekommen sollte (sei denn man ist Admin ODER Debugger).

Wenn Du prüfen willst, ob dein Prozess debuggt wird, versuche einfach einen weiteren Prozess zu Spawnen, der deine EXE debuggen soll. Wenn dies Fehlschlägt, wurde deine EXE bereits vorher debuggt. (Alternativ kann man aber auch einfach einen bestimmten Wert im TLS auslesen, den aber jeder gute Cracker standardmäßig ändert.)

Wie meine Vorredner bereits ausgeführt haben: solltest Du genauer beschreiben, was Du genau unter Zugreifen verstehst ...

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
#Crasher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23

Win 95, Win 98, Win NT, Win XP (used), Win Vista
D3, D4, D6, D7, D2005, BDS2006 Arch. UPD2
BeitragVerfasst: Sa 21.07.07 17:40 
Hallo!

Was ich genau herausfinden will, ist ob Programm1.exe Parameter zum Programm2.exe sendet.
Geht doch über den Arbeitsspeicher, oder?

- Crasher
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Sa 21.07.07 17:50 
Zur Übergabe von Parametern zwischen zwei Prozessen gibt es WIEDERUM viele Möglichkeiten ...

Definiere, was Du mit Senden meinst ;-)

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 21.07.07 19:51 
user profile iconBenBE hat folgendes geschrieben:
Wenn Du prüfen willst, ob dein Prozess debuggt wird, versuche einfach einen weiteren Prozess zu Spawnen, der deine EXE debuggen soll.

Warum einfach, wenn es auch kompliziert geht. Wie wäre es mit IsDebuggerPresent?
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Sa 21.07.07 21:05 
user profile iconLuckie hat folgendes geschrieben:
user profile iconBenBE hat folgendes geschrieben:
Wenn Du prüfen willst, ob dein Prozess debuggt wird, versuche einfach einen weiteren Prozess zu Spawnen, der deine EXE debuggen soll.

Warum einfach, wenn es auch kompliziert geht. Wie wäre es mit IsDebuggerPresent?

Ganz einfach: Weil IsDebuggerPresent einfach nur nen Wert setzt, den man leicht ändern kann (Siehe Folgesatz von mir). Jeder Prozess darf aber unter Windows immernur von einem Prozess debuggt werden (Systemeinschränkung). Wenn ich also zuverlässiger als "Knackt jedes Kind" überprüfen will, ob ein Debugger da ist, muss ich auch zuverlässigere Abfragen nehmen.
Außerdem hab ich in meinem Post auf IsDebuggerPresent angespielt (Der besagte Wert steht nämlich im TLS ;-)).

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
#Crasher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23

Win 95, Win 98, Win NT, Win XP (used), Win Vista
D3, D4, D6, D7, D2005, BDS2006 Arch. UPD2
BeitragVerfasst: Sa 21.07.07 22:19 
Hallo!

Redet mal nicht soviel, über zeug von dem 0 Ahnung hab...^^
Danke!

- Crasher
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 22.07.07 05:36 
Ja, also wir wissen eben immer noch nicht, was du eigentlich genau meinst. Mir fallen dutzende verschiedener Möglichkeiten ein, was du gemeint haben könntest :roll: .
Zum Beispiel:
Du willst wissen, ob das eine Programm durch das andere gestartet wurde (und dabei Parameter übergeben wurden).
Du willst wissen, ob das eine Programm dem anderen Windows-Botschaften sendet (mit entsprechenden Parametern).
Du willst wissen, ob das Programm etwas im Speicher des anderen manipuliert, zum Beispiel um bei einem Spiel den Spielstand zu ändern. (Der Spielstand wäre ja auch ein Parameter des Spiels.)
...

Das könnte ich jetzt noch endlos fortsetzen und jede Möglichkeit erfordert eine andere Herangehensweise.

Dass du eventuell nicht weisst, wie du dein Problem beschreiben sollst, weil du dich vielleicht nicht so gut auskennst mit der Materie, verstehe ich, aber ohne konkrete Angaben, ein Beispiel oder die Angabe um welche Programme es sich handelt bzw. was die machen, können wir dir nicht helfen.

user profile icon#Crasher hat folgendes geschrieben:
Redet mal nicht soviel, über zeug von dem 0 Ahnung hab...^^

Sei du mal lieber nicht so wortkarg und schreibe etwas mehr... :wink:
(In deinen Miniposts steht nicht viel an Informationen zu deinem Problem drin :roll: .)
#Crasher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23

Win 95, Win 98, Win NT, Win XP (used), Win Vista
D3, D4, D6, D7, D2005, BDS2006 Arch. UPD2
BeitragVerfasst: So 22.07.07 12:21 
Hallo!

user profile iconjaenicke hat folgendes geschrieben:
Du willst wissen, ob das Programm etwas im Speicher des anderen manipuliert, zum Beispiel um bei einem Spiel den Spielstand zu ändern. (Der Spielstand wäre ja auch ein Parameter des Spiels.)


Genau das will ich versuchen.
Da ich aber (noch) keine Ahnung davon hab, weiß ich natürlich auch
nicht wie ich das anstellen soll. Deswegen bin ich hier!

- Crasher
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: So 22.07.07 13:59 
Wenn das so ist, geb ich mal 2 Möglichkeiten an:

1. Verstecke den Wert (z.B. Extended statt Integer für ne Punktzahl), dass dieser nicht so leicht zu finden ist. Weiterhin Schreibst Du an einer Weiteren Speicherstelle eine Art Prüfsumme mit der man prüfen kann, ob die Werte noch konsistent sind. Wenn nun jemand einen Wert ändert OHNE die Prüfsumme zu aktualisieren (deren Integrität Du natürlich VOR jeder eigenen Änderung prüfst), dann weißt Du, dass jemand Cheatet.

2. (Expert Only ;-)) Du machst einen Kernel-Mode-Entry und hookst dort den für OpenProcess zuständigen IV. Danach hookst Du jeden Aufruf von OpenProcess und verweigerst Zugriff auf deinen eigenen Prozess. Um bereits bestehende Zugriffe zu erkennen fragst Du die Handle-Tabelle aller fremden Prozesse ab, ob diese einen Token auf deinen Prozess besitzen. Wenn ja, schließt du diese.

3. (Advanced Only) Du schreibst dein Programm so, dass es eine zweite Instanz von sich aufruft und sich beide Instanzen gegenseitig debuggen. Danach verweigern beide Prozesse gegenseitig den Zugriff auf den eigenen Prozess.

4. Du wartest auf Luckie, ob der noch andere Vorschläge hat ;-)

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Chryzler
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1097
Erhaltene Danke: 2



BeitragVerfasst: So 22.07.07 15:03 
Er hat ja nicht geschrieben, dass er verhindern will, dass andere Programme sein Programm manipulieren können. Er will ja herausfinden, ob irgendein Programm ein anderes Programm manipuliert, so wie ich das verstanden habe. Und das müsste ja dann auch über diese Handle-Tabellen der anderen Programme gehen. Also schauen, ob das eine Programm per OpenProcess ein Handle "geöffnet" hat.
user profile iconBenBE hat folgendes geschrieben:
Wenn das so ist, geb ich mal 2 Möglichkeiten an:

Das waren 4 Möglichkeiten...
user profile iconBenBE hat folgendes geschrieben:
2. (Expert Only ;-)) Du machst einen Kernel-Mode-Entry und hookst dort den für OpenProcess zuständigen IV. Danach hookst Du jeden Aufruf von OpenProcess und verweigerst Zugriff auf deinen eigenen Prozess. Um bereits bestehende Zugriffe zu erkennen fragst Du die Handle-Tabelle aller fremden Prozesse ab, ob diese einen Token auf deinen Prozess besitzen. Wenn ja, schließt du diese.

Also das klingt ja mal mehr als interessant. :) Da hätte ich ein paar Fragen:

1. Was ist ein Kernel-Mode-Entry?
2. Was ist ein IV?
3. Wie kann man die eigene/fremde Handle-Tabelle auslesen?

EDIT: Und dann hab ich nochmal ne Frage an user profile iconLuckie & Co:
Um einen Hook zu umgehen, könnte man doch theoretisch die betreffende Funktion einfach nochmal selbst in sein Programm implementieren. Also z.B. man holt sich den Assembler-Code von OpenProcess und deklariert einfach in seinem Programm seine eigenen OpenProcess-Funktion, mit demselben Assembler-Code. Man müsste halt drauf achten, dass die Funktion nicht irgendwo ins Leere springt, also halt dann CALLs wieder in die richtige DLL umleiten. Sollte doch von der Theorie gehen?


Zuletzt bearbeitet von Chryzler am So 22.07.07 15:10, insgesamt 1-mal bearbeitet
#Crasher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23

Win 95, Win 98, Win NT, Win XP (used), Win Vista
D3, D4, D6, D7, D2005, BDS2006 Arch. UPD2
BeitragVerfasst: So 22.07.07 15:07 
Hallo!

Das würde ich auch gerne wissen! ^^

- Crasher
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: So 22.07.07 16:24 
user profile iconChryzler hat folgendes geschrieben:
user profile iconBenBE hat folgendes geschrieben:
Wenn das so ist, geb ich mal 2 Möglichkeiten an:

Das waren 4 Möglichkeiten...

Falsch, da für den normalsterblichen hier im Forum nur 1. und 4. gedacht sind. die anderen waren nur als Vorschläge genannt.

Deine 3 Fragen:
1. Ist eine von verschiedenen Methoden in den System-Modus zu kommen (wo u.a. auch Treiber laufen)
2. IV = Interrupt Vector
3. Gibt's inzwischen Units für, die ich hier aber nicht verlinken werde. Bei Interesse einfach selber suchen (findet man relativ einfach, wenn man nach den Richtigen Begriffen sucht).

Ach ja @Hook umgehen bei OpenProcess: Geht eben durch selbstschreiben NICHT, da man einige Teile in OpenProcess drin hat, die auf den Kernel-Mode angewiesen sind. Und wenn man im Kernel-Mode erst den Hook ansetzt (machen einige gute Desktop-Firewalls), dann bringt auch das Selbstschreiben nicht viel. Für einen solchen Fall müsste man den GESAMTEN Source (User-Mode + Kernel-Mode selbst schreiben, was aber übertrieben für einen derartigen Schutz ist.

Ich schreib aber nicht explizit Expert Only vor eine Möglichkeit, damit sich jeder Möchtegern daran versucht ... :puke:

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
#Crasher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23

Win 95, Win 98, Win NT, Win XP (used), Win Vista
D3, D4, D6, D7, D2005, BDS2006 Arch. UPD2
BeitragVerfasst: Mo 23.07.07 12:47 
Ja, aber ich kenne mich mit diesem Thema aber nicht so aus.
Ich habe mich vorher noch nie damit befasst, habt Ihr evtl. Tutorials?

- Crasher