Hallo Mikrocontroller-Gemeinde,
ich programmiere der Zeit ein Anti-Cheat Tool für Counterstrike:
1.6/Source!
Ich mache mir viele Gedanken, wie man eine unknackbare
Screenshotfunktion realisieren könnte. Da ich mit der Materie µC und
Elektronik auskenne(Kenntnisse sind halt vorhanden.:P), habe ich da an
eine Blackbox zwischen PC und Monitor gedacht, die außerdem über einen
USB-Port verfügt, der mit dem PC verbunden werden muss.
Jetzt stelle ich mir vor, dass ein Signal vom PC zur Blackbox geht und
dort einmal kurz die aktuellen Pegel an den Ausgängen gespeichert werden
und an den PC übertragen werden, wo sie dann in eine JPG-Datei
umgewandelt wird.
Bis hierhin komme ich denke ich alleine, aber jetzt. :P
...
Ist das überhaupt so möglich wie ich mir das vorstelle?
Sind irgendwelche Signale verschlüsselt?
Kann ich überhaupt die Pegel wieder in eine JPG Datei umrechnen? Wenn
ja, jemand ne Idee wie?
Das Anticheat-Tool ist in .net geschrieben
Liebe Grüße Kevin
Du brauchst einen FrameGrabber. Mit einer fertigen Karte bist Du am
schnellsten fertig, aber ich denke, dass es dort auch einen Copy-Schutz
gibt. Der ist - wie im Audiosignal - eincodiert. ("copy bit")
Daher muss man sich sowas selber bauen. FPGA mit DVI-Input-Karte (Chip +
Video-ADC) und dann das timing interpretieren. Ist nicht so schwer. Über
USB kriegt man das dann auch wieder in den PC und zwar volldigital ohne
Verluste.
Am Einfachsten müsste es mit einer alten digitalen Video-Karte gehen,
denn die hatten sicher noch keinen Kopierschutz. Mit denen konnte man
digitales Fernsehen direkt aufzeichnen und auch das, was die VGA-Karte
geschickt bekommt.
Oder, Du schnappst Dir das Signal voll analog, 5-kanalig (r,g,b, hs,vs),
musst dann Du halt das timing selber machen. Es bliebe da noch der
S-Video-Stecker - je nachdem, was den Rechner ausgibt. Das sind nur 3
Signale glaube ich (Video composite).
Hallo,
danke erstmal für deine schnelle Antwort!
Voll Analog gibt es aber doch nur bei dem VGA-Stecker oder nicht?
Wie genau rechne ich das ganze denn wieder in ein JPG Bild zurück? Die
BITS in den PC bekommen ist nicht das Problem, denke ich.
Jedoch was mache ich, wenn ich in einer Variable jetzt die Daten habe?
Wie zaubere ich mir daraus wieder ein Bild?
Liebe Grüße Kevin
Es gibt eine Reihe von Bildverarbeitungsprogrammen, die Rohdaten lesen
und als JPG abspeichern können. Wenn Du einen frame grabber oder eine
Videokarte hast, bekommst du aber schon einen video stream.
Wenn Du ein Copyproblem bekommst:
Mit einem VGA auf Videowandler einen Videorekorder ansteuern und dann
das so analog gespeicherte Signal mit einer Videokarte lesen. Die alten
Videorecorder wissen nichts von copy bits :-)
Zwei Problemchen gibts noch zu lösen: HDCP und die Datenrate. Ersters
dürfte ein technisches K.O. sein wenn sich die Anwender beschweren, dass
sie ihre geliebten blauen Scheiben nicht mehr kucken können. Zweiteres
ist bei einem einzelnen Bild natürlich kein Problem. Wenns aber mal
'Video' sein soll, dann kommen da schnell mal 400MiB/s zusammen, das
will erst mal gewuppt werden.
Achja und ich hätte hier auch schon einen "Lösung" für Deine unknackbare
Anti-Cheat-Screenshot-Funktion - dürfte wesentlich einfacher zu
implementieren sein als Dein Tool: man nehme zwei Monitösen, in des
einen Zuleitung hängt man Deine Blackbox, die andere schließt man direkt
an. Sodann lässt man die Ausgabe zweifach rendern, einmal ganz normal
und einmal aufgehübscht extra für Dich.
Nix für ungut.
Kevin J. schrieb:> Ich mache mir viele Gedanken, wie man eine unknackbare> Screenshotfunktion realisieren könnte. Da ich mit der Materie µC und> Elektronik auskenne(Kenntnisse sind halt vorhanden.:P), habe ich da an> eine Blackbox zwischen PC und Monitor gedacht, die außerdem über einen> USB-Port verfügt, der mit dem PC verbunden werden muss.
Schau Dir mal den AD9888 von Analog Devices an:
http://www.analog.com/en/audiovideo-products/analoghdmidvi-interfaces/ad9888/products/product.html
Der ist auch auf diversen KVM-Over-IP Karten drauf und dafür gemacht,
ein VGA-Signal zu digitalisieren. Das wäre also schon einmal das
passende Frontend. Kopierschutz oder so gibt bei VGA nicht.
Der AD9888 liefert Dir 24 Bit RGB-Daten plus HSYNC/VSYNC mit Pixelraten
von bis zu 200 MHz (je nach Auflösung und Bildwiederholrate, bis UXGA
(1600*1200@75 Hz)), die Du dann in ein entsprechend schnelles RAM
ablegen musst. Das sind dann 600 MB an Daten pro Sekunde, wobei Du ja
nur einen Frame brauchst. Aber da Du Dich mit Elektronik auskennst,
sollte das für Dich dann kein Problem mehr sein.
Bei DVI ohne HDCP ist halt das Frontend ein anderes.
Viel Spaß noch.
fchk
speichere deine rgb samples in eine datei und verpasse ihnen einen pnm
header (ansi-c implementierung -> http://netpbm.sourceforge.net/). dann
hast du ein raw image welches du z.b.: mit imagemagick komprimieren
kannst.
e.g.:
$ echo -e "P6\n1024 768\n255" > header
$ cat header grabbeddata > frame.pnm
$ convert frame.pnm frame.jpg
Was gäbe es diesbezüglich an FPGA-basierten Karten? Der Chip von AD
konvertiert ja nur das timing auf ein RAM Interface, was sich mit jedem
AD-Board+PLd auch machen liesse. Danach brauchte man noch einen MCU der
die Daten zum Rechner schickt.
Lieber wäre mir eine kleine FPGA-Karte mit DVI-Digitaleingang, die
direkt an den PC angeschlossen werden kann, idealerweise über USB. Kennt
da jemand was?
Oben wurde Phytec erwähnt, jedoch scheinen die nur DSP Karten zu haben.
Da brauchst du aber einen richtig großen FPGA dann. HDMI basiert auf DVI
und da hast du mehrere serielle Hochgeschwindigkeits-Kanäle. Es gibt ein
Board mit Spartan 6 und 2 DVI Schnittstellen, damit haben die den HDCP
Koierschutz umgangen. Das wäre ein Anfangspunkt. Aber für 8 HDMI
Schnittstellen brauchst du ja schon 24 MultiGigabit Receiver, das ist
dann schon ein recht großer und teurer FPGA.