LabVIEWForum.de
Prozess auslesen/Werte ändern - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Datenkommunikation (/Forum-Datenkommunikation)
+---- Thema: Prozess auslesen/Werte ändern (/Thread-Prozess-auslesen-Werte-aendern)

Seiten: 1 2


RE: Prozess auslesen/Werte ändern - rolfk - 08.03.2012 00:13

(07.03.2012 17:52 )Tschirno schrieb:  Meines Wissens nach geht es nicht mit Labview. Ich hatte es auch mal mit Labview versucht einen Installer automatisiert durchlaufen zu lassen. Ich habe letztendlich dafür AutoIT genommen. Dort kann man Scripten bis der Arzt kommt. Absolut schnell zu erlernen. Es gibt super viele Beispiele. Das kann Bedienelemente auslesen und Tastaturen emulieren. Wunderbar von Labview aus ansteuerbar über Commandline Argumente. Vielleicht ist ja das für dich. Labview kann nunmal nicht alles.

Du kannst mit LabVIEW prinzipiel alles tun was mit anderen Programmiersprachen auch geht, da LabVIEW turingkomplet ist, aber.....

1) Low Level Dinge wie intensive Bitschiebereien wie sie in Kompressions- und Dekompressionsalgorithmen oft verwendet werden sind in C oder Assembler wesentlich effizienter implementierbar. LabVIEW hat zwar alle Tools dazu aber man kann eben nicht so einfach alles optimalisieren wie das in C oder Assembler möglich ist.

2) Systemzugriffe kann LabVIEW nicht alle selber implementieren. Wenn man also etwas benötigt das ausserhalb der Standardfunktionen wie File IO, Netzwerk oder dergleichen liegt, muss man etwas extra Arbeit erledigen. Aber Interfaces wie die Call Library Node oder ActiveX/.Net ermöglichen hier jeglichen gewünschten Zugriffe.

3) Allenfalls ist es sinnvoll für obige Punkte einen Teil in C oder dergleichen als externer Code zu implementieren und dann mittels der Tools in Punkt 2) in LabVIEW einzubinden.

Grundsätzlich wäre es möglich um mittels dieser Tools Funktionen wie sie AutoIt mitbringt direkt in LabVIEW zu integrieren. Aber sinnvoll wäre es eher nicht, da ein Tool wie AutoIt garantiert viele Mannjahre Arbeit gekostet hat um es dahin zu bringen was es heute kann. Aber das Tool macht nichts anderes als durch Aufrufe von Windows APIs die Frontpanels von Standardwindowsapplikationen zu enumerieren und auf dessen Bedienelemente zuzugreifen, da dort jedes Bedienelement wiederum ein eigenes Windows Objekt ist das auf derselben Objektstruktur basiert wie es ein Windows Fenster auch ist. Das schlägt allerdings fatal fehl bei Programmen die mit LabVIEW gemacht wurden, da LabVIEW Kontrols keine Windows Objekte sind sondern eigenständig direkt in LabVIEW implementierte Objekte.

Aber LabVIEW ist da nicht ganz alleinstehend. Dasselbe Problem dürfte beistpielsweise bei vielen Spielen bestehen, die die Bedienelemente auch nicht als Windows Objekte implementieren sondern beispielsweise auf OpenGL oder ähnlichem basierend ihre eigenen Bedienelemente implementieren. Auch Applikationen die mittels Platformabstraktion Toolkits wie wxWidgets oder dergleichen portiert werden dürften solche Einschränkungen kennen.


RE: Prozess auslesen/Werte ändern - Tschirno - 08.03.2012 10:31

"Du kannst mit LabVIEW prinzipiel alles tun was mit anderen Programmiersprachen auch geht..."

ist auch vollkommen korrekt. Darum ging es auch nicht. Es geht sich vielmehr darum, wie kann ich Aktionen effizient in Labview umsetzten. Wenn man keine Api, keine Doku, keine DLL's hat, ist es sehr mühselig dann effizient Ergebnisse zu bringen. In meinem Fall war AutoIT perfekt für das eine Ergebnis.
Und Prozesse / Controls auslesen und manipulieren zu können wäre eine DLL oder Api echt gut. Allerding wenn es so allgemein beschrieben ist, wie in diesem Beitrag, und keine Infos über DLL/Api/Doku etc. hat, lassen sich vielmehr nur Hinweise in die richtige Richtung geben.


RE: Prozess auslesen/Werte ändern - rolfk - 08.03.2012 17:43

(08.03.2012 10:31 )Tschirno schrieb:  "Du kannst mit LabVIEW prinzipiel alles tun was mit anderen Programmiersprachen auch geht..."

ist auch vollkommen korrekt. Darum ging es auch nicht. Es geht sich vielmehr darum, wie kann ich Aktionen effizient in Labview umsetzten. Wenn man keine Api, keine Doku, keine DLL's hat, ist es sehr mühselig dann effizient Ergebnisse zu bringen. In meinem Fall war AutoIT perfekt für das eine Ergebnis.
Und Prozesse / Controls auslesen und manipulieren zu können wäre eine DLL oder Api echt gut. Allerding wenn es so allgemein beschrieben ist, wie in diesem Beitrag, und keine Infos über DLL/Api/Doku etc. hat, lassen sich vielmehr nur Hinweise in die richtige Richtung geben.

Ich stimme Dir hier voll zu. Zum Auslesen von Prozessvariablen im Speicher eines Prozesses ist nur einies zu sagen: Absolute sinnlos. Prozesse sind ja gerade geschützt voneineander dass das nicht geht. Sonst könnte man gleich wieder zurück zu DOS und CP/M gehen.


RE: Prozess auslesen/Werte ändern - Pascha - 08.03.2012 20:33

Also werde ich wohl doch für solche "Hacks" weiterhin VB benutzen müssen.

Was ich genau machen wollte, um die Kritik an mangels Informationen aufzugreifen, ich wollte einige Adressen auslesen und Werte in diesen Adressen Verändern.


RE: Prozess auslesen/Werte ändern - rolfk - 08.03.2012 20:38

(08.03.2012 20:33 )Pascha schrieb:  Also werde ich wohl doch für solche "Hacks" weiterhin VB benutzen müssen.

Was ich genau machen wollte, um die Kritik an mangels Informationen aufzugreifen, ich wollte einige Adressen auslesen und Werte in diesen Adressen Verändern.

Das kann auch VB nicht. Das ist nicht eine Frage der Programmierumgebung, sondern eine der Betriebssystemsicherheit. Kein einziges aktuelles Betriebsystem erlaubt es gegenwärtig, dass ein Prozess in den Speicher eines anderen Prozesses schauen kann. Wenn das ginge, könnte kein Computer heutzutage noch zuverlässig arbeiten, da jeder Fehlzugriff im Speicher potentiel die ganze Maschine runterholt. Und Sicherheit vor Virussen wäre schlichtweg unmöglich.


RE: Prozess auslesen/Werte ändern - GerdW - 08.03.2012 20:40

Hallo Pascha,

Zitat:ich wollte einige Adressen auslesen und Werte in diesen Adressen Verändern.
Woher kennst du die Adressen anderer Prozesse? Wie willst du darauf zugreifen? Diese laufen in ihrem eigenen virtuellen Speicherbereich - auf den du von außen (von einem anderen Prozess aus) keinen Zugriff hast...

Kannst du uns das VB-Skript hier posten? Ich glaube, daran wären einige interessiert!


RE: Prozess auslesen/Werte ändern - Pascha - 11.03.2012 01:38

Ok dann habe ich fälschlicher weise angenommen das es VB ist.
Man kann mit Hilfe eines Programms namens Cheat Engine auf laufende Prozesse zugreifen (zumindestens bei Spielen ist es so, habe es bei anderen noch nicht probiert) und Adressen bzw Pointer auslesen, so kann man die Werte dahinter nach belieben verändern.
Das Programm arbeitet weitesgehend automon bei der erstellung des Skript, man muss nur gewisse Einstellungen vornehmen.
Warum auch immer ich hatte gedacht, dass es das ganze in VB tut.
Sorry für die Verwirrung.


RE: Prozess auslesen/Werte ändern - rolfk - 11.03.2012 11:25

(11.03.2012 01:38 )Pascha schrieb:  Ok dann habe ich fälschlicher weise angenommen das es VB ist.
Man kann mit Hilfe eines Programms namens Cheat Engine auf laufende Prozesse zugreifen (zumindestens bei Spielen ist es so, habe es bei anderen noch nicht probiert) und Adressen bzw Pointer auslesen, so kann man die Werte dahinter nach belieben verändern.
Das Programm arbeitet weitesgehend automon bei der erstellung des Skript, man muss nur gewisse Einstellungen vornehmen.
Warum auch immer ich hatte gedacht, dass es das ganze in VB tut.
Sorry für die Verwirrung.

Es gibt natürlich DebugBetriebssytemroutinen um in einen Prozess zu schauen. Sonst könnte ein Debugger ja nicht funktionieren.

Aber: Diese Funktionen können nur in elevated mode ausgeführt werden. Das Program das sie aufruft muss also zwingend mit Administratorrechten gestartet werden.
Zudem ist das alles schön und gut aber damit hast Du noch immer einfach einen linearen Adressbereich von heutzutage schnell mal vielen MB Grösse. Da die richtige Addresse zu finden für die eine spezielle Variable ist ein Unding. Je nach Programmierung kann diese Adresse auch noch varieren zwischen Programmaufrufen. Ein Debugger macht das indem der Compiler für den Debugbuild Unmengen an extra Informationen in das Executable schreibt die dem Debugger die Addresse und den Namen von Variablen mitteilen. Bei Releasesoftware ist diese Informationen beinahe immer entfernt, sowohl wegen der extra Grösse die es verursacht und damit auch langsamerer Lade- und sogar Ausführungszeit, aber natürlich auch weil die wenigsten Programmierer einem Hacker soviel Einblick in die Applikation bieten wollen.

Die von Dir angesprochenen CheatEngine dürfte nur darum funktionieren weil sich da jemand (wahrscheinlich ein paar jemanden) viel Mühe gemacht haben um mit einem Disassembler die Spiele zu untersuchen und die entsprechenden Adresstabellen für bestimmte Spiele zu erstellen. Das wird wahrscheinlich noch wesentlich erleichtert weil viele Spiele die gleichen oder ähnlichen Engines benützen um ein Spiel zu implementieren. Wenn die dann ein Spiel anschauen und feststellen dass es die gleiche Engine verwendet wie Spiel X, das sie schon disassembliert haben, ist es viel einfacher um da auch rein zu schauen.

Ohne spielspezifische Tabellen zu dem Spiel dass Du cheaten willst, funktioniert das aber sicher nicht. Und die Verwendung von einem Disassembler (oder überhaupt jegliche Art von Reverse Engineering) für solche Zwecke ist inzwischen in vielen Ländern ziemlich strafbar. Und in manchen ist auch die Verwendung der so erhaltenen Resultate schon strafbar.


RE: Prozess auslesen/Werte ändern - Pascha - 11.03.2012 14:06

Danke erstmal für die Aufklärung.
Aber ich glaube rechtlich nicht, dass man strafrechtlich verfolgt wird wenn man den Geldwert im Spiel von 2 auf 4 setzt.


RE: Prozess auslesen/Werte ändern - rolfk - 11.03.2012 15:44

(11.03.2012 14:06 )Pascha schrieb:  Danke erstmal für die Aufklärung.
Aber ich glaube rechtlich nicht, dass man strafrechtlich verfolgt wird wenn man den Geldwert im Spiel von 2 auf 4 setzt.

Das hängt vom Hersteller des Spieles ab. Wenn er das will und Du in einem Land lebst dass das als illegale Handlung definiert, kann das schon passieren. Die Chance ist klein, ausser Du machst das bei einem Online-Spiel, da Du damit andere Spieler die dafür meist Geld bezahlen, benachteiligst. Und wenn sich das rumspricht dann ist die Animo für so ein Spiel schnell weg, was Einnahmeeinbussen für den Spieleproduzent bedeutet, und wenns um echtes Geld geht hört bei den meisten Herstellern jeder Spass sehr schnell auf. Und soviel ich weiss hat Deutschland ein sehr praktisches Abmahnwesen wo sich mehr oder weniger dubiöse Rechtsanwälte bei Herstellern gerade dazu aufdringen um deren Interessen gegen jegliche Art von Verstössen mit viel Elan und hohen Gebühren zu verteidigen. Und die Rechnung bezahlt immer derjenige der nicht beweisen kann dass er die entsprechenden Verstösse nicht getan hat, oder schlicht nicht das Risiko eines Rechtsverfahrens eingehen will.