Autor Beitrag
Aya
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: Di 13.03.12 17:33 
Hi,

mein Chef ist zur Zeit auf dem Trip das er alle erdenklichen Angriffe gegen unsere Software verhindern möchte..
Ob das bei unserer Software sinn macht oder nicht sei mal dahin gestellt, aber bei einem Thema würde es mich auch Interessieren.

Es gibt ja die Möglichkeit via ReadProcessMemory() den RAM auszulesen.
Wenn nun ein fremdes Programm den Speicher von meinem Programm ausliest, kann ich das irgendwie mitbekommen?

Die einzige Lösung die mir einfallen würde, wäre das ich die ReadProcessMemory-Funktion Hooke und überprüfe ob auf meinen Process zugegriffen wird - aber, geht das so ohne weiteres?

Oder gibt es noch andere Wege?

Das ganze ist deswegen Interessant da ich ja auch an Spielen bastle in meiner Freizeit und gewisse Werte würde ich um sie vor Cheaten zu schützen versuchen besser zu verpacken als sie einfach stupide in ne Variable zu packen. Wenn man das Cheaten über ReadProcessMemory aber einfach verhindern könnte indem man einfach das spiel beendet wenn es jemand versucht, wäre auch praktisch :)

Aya~


Moderiert von user profile iconNarses: Topic aus Off Topic verschoben am Di 13.03.2012 um 17:06

_________________
Aya
I aim for my endless dreams and I know they will come true!
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Di 13.03.12 20:25 
gegf. Hookst Du eine bereits gehookte Funktion ... ich glaube nicht dass Du aus Deiner Software eine Sicherheit herstellen kannst....

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
Aya Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: Mi 14.03.12 12:03 
Aber selbst wenn ich eine gehookte Funktion hooke macht das ja nix, oder?

Also ich bekomme so oder so in jedem Falle ja dann mit das die Funktion aufgerufen wurde, auch wenn da noch andere 5 Hooks mit zwischen hängen. .. oder?

_________________
Aya
I aim for my endless dreams and I know they will come true!
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Mi 14.03.12 12:09 
ich meinte den Fall dass der böse Prozess bereits die Funktion gehookt hat, er kann dann aufrufen ohne dass Du es mitbekommst ...

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
Aya Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: Mi 14.03.12 12:41 
Kann er?

Sagen wir der böse Prozess ist "A" und mein Prozess ist "B".

Wenn jetzt A den Hook vor B setzt, dann ist doch die Aufruf Reihenfolge folgende:

ausblenden Quelltext
1:
ReadProcessMemory() -> A -> B -> Original Funktion					


Wenn ich es zuerst Hooke:

ausblenden Quelltext
1:
ReadProcessMemory() -> B -> A -> Original Funktion					


Oder kann in dem ersten Fall A irgendwie verhindern das der Hook B noch aufgerufen wird?

Aya~

_________________
Aya
I aim for my endless dreams and I know they will come true!
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Mi 14.03.12 16:36 
Ich hätte es zumindest so verstanden ...

assarbad.net/stuff/t...ks/hook_tutorial.pdf
8/20

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
uall@ogc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1826
Erhaltene Danke: 11

Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
BeitragVerfasst: Mi 14.03.12 21:24 
Es kommt doch ganz drauf an was du für einen Hook setzt, es gibt da ziemlich viele verschiedene Möglichkeiten:

Import-Table
Export-Table
Relocation
PageGuard und Exception Handler
Code Overwriting
SSDT

Selbst im Usermode wirst du es nicht unterbinden können, da immer der Syscall/Sysenter/int21, also der Sprung zur entsprechenden Kernelfunktion direkt aufgerufen werden kann.
z.B. für ReadProcessMemory:

DeinProgramm -> kernel32.ReadProcessMemory -> ntdll.ZwReadVirtualMemory -> Eintrag $3C in der SSDT

Um generell zu überprüfen ob jemand was bei deinem Programm ausliest: Schütze deinen Speicher mit VirtualProtect und entzieh die Read-Rechte (dann schlägt ReadProcessMemory fehl). Man kann zwar wieder mit VirtualProtectEx den Speicherbereich ändern, aber das könntest du u.U. durch pollen mitbekommen. Zusätzlich gibt es verschiedene Möglichkeiten mit denen du das Öffnen des Handles verbieten kannst.

Wenn du von einem anderen Usermode Programm verbieten willst auf deinen Speicherbereich zuzugreifen -> schreib dir nen Treiber und hooke SSDT Eintrag -> das machen die Virenscanner genau so.

_________________
wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit