Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: So Jun 09, 2024 08:17

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 15 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: [gelöst] Fraps erkennen
BeitragVerfasst: Mo Jun 04, 2012 16:21 
Offline
DGL Member

Registriert: So Mär 22, 2009 22:28
Beiträge: 26
Hallo,
Ich hab da mal wieder eine Frage...

Ist es möglich dass ich in einem Programm (C++/DirektX) erkennen kann ob Fraps (o.ä.) mitläuft?
Ich will aber nicht prüfen ob der Prozess Fraps.exe läuft oder nicht (wenn es keine bessere Lösung gibt wäre das Plan B).

Gruß,
Bentschi


Zuletzt geändert von Bentschi am Mi Jun 06, 2012 01:27, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Fraps erkennen
BeitragVerfasst: Di Jun 05, 2012 07:27 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
Gute Frage, würde mich auch interessieren.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Fraps erkennen
BeitragVerfasst: Di Jun 05, 2012 14:31 
Offline
DGL Member

Registriert: Mi Jan 05, 2011 14:55
Beiträge: 47
Programmiersprache: Delphi, C++,C
Wenn ich die Funkktionsweise von Fraps richtig verstehe, hookt Fraps die DLL von OpenGL oder Direct X. Du müsstest das dann nur überprüfen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Fraps erkennen
BeitragVerfasst: Di Jun 05, 2012 14:49 
Offline
DGL Member

Registriert: So Mär 22, 2009 22:28
Beiträge: 26
Hab bis jetzt eigentlich nur einen OpenGL-Wrapper für CS 1.6 geschrieben.
Also so viel ahnung hab ich leider nicht von Hooks und DLL-Injection (allerdings hab ich ein bisschen Ahnung von PE und wie eine EXE funktioniert).
Aber ich denke dass Fraps es tatsächlich so macht.

Wenn dem so sei, kann man sich darauf verlassen, dass Fraps immer am gleichen Offset geladen wird?
Dann müsste man eigentlich per ReadProcessMemory irgend eine Signatur oder sowas von Fraps finden können.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Fraps erkennen
BeitragVerfasst: Di Jun 05, 2012 15:32 
Offline
DGL Member

Registriert: So Mär 22, 2009 22:28
Beiträge: 26
Hab noch ein bisschen gegooglt und bin auf http://secunet.to/showthread.php?t=648 gestoßen.
Ich denke mal das wäre eine ideale Lösung.
Einfach anstelle von MessageBoxA/W die CreateFile (nicht die wrapper- sondern die basisfunktion(en)) zu hooken.
Dann sollte man erkennen sobald ein Screenshot oder Video gemacht wird.
Genau das benötige ich auch...
Lässt sich nur hoffen dass es funktioniert.
(Ich werde bescheid geben, wenn ich ein vernünftiges Ergebniss habe)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Fraps erkennen
BeitragVerfasst: Di Jun 05, 2012 18:12 
Offline
DGL Member

Registriert: So Mär 22, 2009 22:28
Beiträge: 26
Ok, ich habs versucht mit der Lib, einen primitiven in rekordzeit zusammen geschusterten OpenGL-Programm und den Funktion: CreateFileA, CreateFileW, fopen, fopen_s, _wfopen und _wfopen_s.
Leider kein Erfolg.
Ich bekomm nur beim Starten einmal angezeigt, dass CreateFileW erkannt wurde.
Leider aber ohne, dass ich einen Screenshot gemacht habe. (Vermutlich wegen dem Debugger von MSVS)
Wenn ich dann per Fraps einen Screenshot mache passiert rein gar nichts, ausser dass Fraps einen Screenshot macht.
Ich gehe mal davon aus, dass Fraps die File-Funktionen nicht im Remote-Thread (sollte es einer sein) anwendet, sonst hätte es eigentlich funktionieren müssen.
Jemand einen Vorschlag? Plz


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Fraps erkennen
BeitragVerfasst: Mi Jun 06, 2012 01:26 
Offline
DGL Member

Registriert: So Mär 22, 2009 22:28
Beiträge: 26
Mittlerweile schäme ich mich für meine Frage ein bisschen :roll:
Code:
  1. void CheckForFraps()
  2. {
  3.     if (GetModuleHandle(_T("Fraps32.dll")) || GetModuleHandle(_T("Fraps64.dll")))
  4.         MessageBox(NULL, _T("Fraps läuft"), _T("Fraps-Check"), MB_OK);
  5.     else
  6.         MessageBox(NULL, _T("Nix Fraps"), _T("Fraps-Check"), MB_OK);
  7. }

Oder in etwa sowas, wenn man nicht speziell nach Fraps sucht...
Code:
  1. ...
  2. #include <Psapi.h>
  3. #pragma comment(lib, "psapi.lib")
  4.  
  5. void PrintModules()
  6. {
  7.     HMODULE hMods[1024];
  8.     HANDLE hProcess;
  9.     DWORD cbNeeded;
  10.     unsigned int i;
  11.     hProcess = OpenProcess(PROCESS_QUERY_INFORMATION |PROCESS_VM_READ, FALSE, GetCurrentProcessId());
  12.     if (hProcess==NULL)
  13.         return;
  14.     if(EnumProcessModules(hProcess, hMods, sizeof(hMods), &cbNeeded))
  15.     {
  16.         for ( i = 0; i < (cbNeeded / sizeof(HMODULE)); i++ )
  17.         {
  18.             TCHAR szModName[MAX_PATH];
  19.             if (GetModuleFileNameEx(hProcess, hMods[i], szModName, sizeof(szModName)))
  20.             {
  21.                 MessageBox(NULL, szModName, _T("<Hier Titel eingeben>"), MB_OK);
  22.                 //Oder printf oder sowas für Consolenanwendungen
  23.             }
  24.         }
  25.     }
  26.     CloseHandle(hProcess);
  27. }

Es ist zwar nicht meine Absicht Fraps zu beenden.
Aber es funktioniert (getestet!)
Code:
  1. FreeLibrary(GetModuleHandle(_T("Fraps32.dll"))); //Bzw. "Fraps64.dll"

Sorry, an euch Delphianer, kann leider kein Delphisch, daher C++

Trotz allem danke für hilfe!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [gelöst] Fraps erkennen
BeitragVerfasst: Mi Jun 06, 2012 08:05 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
nun so ganz professionell find ich das nicht. Du hast ja gesagt du willst nicht gucken ob der Prozess läuft... ist ja fast das gleiche wenn du prüfst ob dessen DLL im speicher hängt.. Es gibt bestimmt noch zahlreiche weitere Tools die sowas aufzeichnen können. Cool wäre eine generelle Möglichkeit Capturingprogramme zu erkennen....


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [gelöst] Fraps erkennen
BeitragVerfasst: Mi Jun 06, 2012 13:22 
Offline
DGL Member

Registriert: So Mär 22, 2009 22:28
Beiträge: 26
Eigentlich will ich nur ganz einfach erkennen, ob es läuft.
Ich will nicht verhindern, dass eine Aufnahme erfolgt.
Daher ist die Lösung für mich eigentlich ausreichend.

Man kann sich ohnehin nicht zu 100% vor einer Aufnahme schützen.
Wenn man mit OpenGL programmiert, reicht ein Programm dass nichtmal irgend einen Hook anwenden muss, sondern nur per GDI den DC aufnimmt.
Bei DirectX funktioniert das nicht mehr.
Der DC von DirectX-Programmen ist im Normalfall immer leer, da der Ganze kram in der Hardware (Grafikkarte) erst auf das Fenster gezeichnet wird.
Dafür muss also ein Code in das DirectX-Programm injeziert werden.
Man kann also eine DLL, Nativen Code oder sogar einen ganzen Thread injezieren.

Wenn man mit DirektX anstelle von OpenGL programmiert, hat man schonmal alle primitiven Programme ausgeschlossen die nichts injezieren.
Wenn man die DLLs überprüft (im Beispiel oben) und die Anzahl der Threads zählt hat man dann fast alle anderen Aufnahmeprogramme.
Ein Nativer Code ist wohl am schwersten zu erkennen.
Eventuell im Speicherbereich des eigenen Programms die Code-Sektionen gegen eine Prüfsumme prüfen (wird aber wohl zu aufwendig sein).

Zur Frage, "Warum ist es nicht zu 100% möglich, wo es doch für alles eine Lösung gibt".
Wenn man es von der anderen Seite mal betrachtet...
Angenommen ich kann Code in ein anderes Programm injezieren, kann ich das Programm doch auch gleich dran hindern, dass es meinen Code erkennt. :wink:
Selbst wenn man sich gegen alle Varianten schützen kann, kann man dann noch ein Video per Hardware aufnehmen (einen Rekorder am HDMI-Ausgang der Grafikkarte oder sowas).
Dann sind die Chancen das per Software zu verhindern, gleich 0.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [gelöst] Fraps erkennen
BeitragVerfasst: Mi Jun 06, 2012 15:24 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Thmfrnk hat geschrieben:
Du hast ja gesagt du willst nicht gucken ob der Prozess läuft... ist ja fast das gleiche wenn du prüfst ob dessen DLL im speicher hängt...
Nein, da gibt es einen Unterschied. Er prüft nämlich, ob das Modul in seinem (Bentschis) Prozess geladen ist. Ein global existierender Fraps-Prozess könnte ja auch ein anderes Programm aufzeichnen.

Bentschi hat geschrieben:
Zur Frage, "Warum ist es nicht zu 100% möglich, wo es doch für alles eine Lösung gibt".
Wer sagt, dass es für alles eine Lösung gibt? Das stimmt nicht. Das ist eine sehr grundlegende Fehlannahme auf dem Gebiet der Informatik ;).

grüße

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [gelöst] Fraps erkennen
BeitragVerfasst: Mi Jun 06, 2012 17:15 
Offline
DGL Member

Registriert: So Mär 22, 2009 22:28
Beiträge: 26
Lord Horazont hat geschrieben:
Thmfrnk hat geschrieben:
Bentschi hat geschrieben:
Zur Frage, "Warum ist es nicht zu 100% möglich, wo es doch für alles eine Lösung gibt".
Wer sagt, dass es für alles eine Lösung gibt? Das stimmt nicht. Das ist eine sehr grundlegende Fehlannahme auf dem Gebiet der Informatik ;).

Software ist Mathematik...
Ändere ich hier und da ein paar Bytes macht die Software was anders.
Wenn ich dann auch noch weiß was ich wo ändern sollte, damit es macht was ich will, dann macht die Software auch das.
Nur kann dann immer noch jemand kommen der dieselben oder andere Bytes ändert um es wieder in Ordnung zu bringen, oder nochmal was anderes zu machen.
Da kann dann auch immer nochmal einer kommen und an den Bytes rumschrauben.

Wenn man also verhindern will/wollte dass irgendeine Software gehackt wird müsste schon an der Basis begonnen werden.
In dem Fall meine ich das Betriebssystem, und Microsoft hätte wohl auch keine Funktionen wie "CreateRemoteThread" in die API gepackt, wenn sie nicht irgend einen Vorteil daraus ziehen würden.
Ganz zu schweigen davon dass man auch Programme ändern kann die noch nicht im Speicher geladen sind.
Wenn man den Gedanken dann noch weiter verfolgt ist ja das Betriebssystem nichts anderes als Software die gehackt werden kann damit man ein Spiel darauf hacken könnte. :wink:

So oder so. Es stimmt schon die Aussage von mir war nicht wirklich gut formuliert.
Ob es eine Lösung gibt oder nicht, kommt immer von der Seite der Betrachtung an.
-> Ist es möglich diese und jene Software zu hacken... Ja
-> Ist meine Software zu 100% sicher... Nein


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [gelöst] Fraps erkennen
BeitragVerfasst: Mi Jun 06, 2012 19:26 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Bentschi hat geschrieben:
Software ist Mathematik...

Eben. Auch in der Mathematik gibt es Probleme, die als unlösbar bewiesen wurden ;).

grüße

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [gelöst] Fraps erkennen
BeitragVerfasst: Do Jun 07, 2012 07:35 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
Bentschi hat geschrieben:
Software ist Mathematik...


Nö, gibt auch unlogische Definitionen :)

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [gelöst] Fraps erkennen
BeitragVerfasst: Do Jun 07, 2012 13:51 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Unlogische Definitionen finde ich dir in der Mathematik auch.

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [gelöst] Fraps erkennen
BeitragVerfasst: Do Jun 07, 2012 16:41 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
Lord Horazont hat geschrieben:
Finde ich dir in der Mathematik auch.

natürlich, dann müssten aber auch die "Methoden","Properties","Structs", etc. unlogisch sein.... *einige Drogen später*...
also quasi nen assert mit 0 muss möglich sein -> z.B. Analogsysteme können keine Software nutzen was aber definitiv der Fall ist ^^

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 15 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 37 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.035s | 15 Queries | GZIP : On ]