Archive for Mai. 2014

Hardware, COM-Ports und Python

Aus ist es mit .NET, Windows und grafischen Oberflächen! Easysurfer is Python-Begeistert und steuert Hardware an! Weg mit dem Klickibunti-Kram, gebt mir einen Lötkolben und ein paar Drähte! Nein, ganz so schlimm hat es mich nicht erwischt. Dennoch folgt jetzt ein Beitrag, der sich dieses mal etwas hardwarenäher abspielt.

Ich gebe zu dass ich von Elektrotechnik keine Ahnung habe. Vielleicht finde ich es gerade deshalb so toll einen Geldscheinprüfer in der Hand zu haben und ein Protokoll zu implementieren. Man schickt ein Befehl und der Prüfer fängt an zu Blinken, zu surren und schließlich einen Geldschein zu verschlucken. Toll!

Genug der Euphorie, es stellt sich die Frage: Woher hat er so ein Ding? Und wozu braucht er es überhaupt? Ein Freund und ich bauen mit minimalistischer Hardware ein Art Bitcoin-Transfer-Automat. Die Idee dahinter ist simple: Der Kunde wählt einen Betrag und eine Bitcoin-Adresse aus, der Automat frisst die Scheine und transferiert den entsprechenden Betrag in Bitcoin an die eingelese Adresse. Es wird zu gegebener Zeit einen vollen Artikel zu diesem Projekt geben, aber heute ist der Geldscheinprüfer dran.

Es handelt sich um einen Apex 7000 der Firma Pyramid Technologies. Die genauen Spezifikationen interessieren uns gerade wenig, wir wollen das Ding anschließen und Programmieren. Im Lieferumfang waren 2 Kabel dabei: Ein USB zu 6-Pin-Kabel mit welchem man die Firmware flashen und einstellen kann, sowie ein USB zu 18-Pin Kabel, welches noch zusätzlich mit Strom über ein 4 Pin-Kabel vom Netzteil versorgt wird. Wer sich jetzt unter meinem untechnischen gebrabbel nichts vorstellen kann hat hier noch ein frisch fotografiertes Bild:

Apex7000

Nachdem der PC aufgeschraubt, ein Stromkabel geklaut und die Treiber installiert sind kann es losgehen. Angesprochen wird das Teil über einen seriellen COM-Port. Das Gerät sendet keine Daten raus, sofern wir sie nicht anfordern (pollen). Daher schauen wir erstmal ein Blick in die PDF, in welcher das Transferprotokoll beschrieben ist: RS-232 Serial Interface Specifications.

Weiterlesen

8 people like this post.

Apex AntiCheat – Zwiebeln sorgen für Tränen

Weiter geht es direkt an der Stelle, an welcher der letzte Blogpost endete: Das Patchen der ersten Apex Schicht automatisieren und den Rest “debugbar” zu bekommen. Dazu werden wir einen eigenen Loader schreiben, der es uns erlaubt DLLs vor Programmstart zu Injecten und somit bequem Patches ermöglicht.

Erfahrenere Leser dieses Blogs werden sich wundern, warum der Umweg über einen Loader genommen wurde, statt die zu importierenden DLLs direkt in die ImportTable zu schreiben (von welcher sie direkt geladen werden). Nun, Apex schickt Hashsummenchecks der Wolfteam-Binary an den Gameserver, der uns einen Kick spendiert wenn die Checksumme nicht stimmt.

Das Prinzip des Loaders ist quasi von Opcode0x90 Blog geklaut. Die Idee dahinter ist simpel: Wir starten den Prozess im Status “SUSPENDED” und Patchen den Entry Point, welcher zuvor über die PE Header rausgeparst wird, mit EBFE. 0xEBFE ist Assembler-Code für eine Endlosschleife, also ein Sprung der immer auf sich zurückgeht. Somit haben wir ein “laufendes” Programm, welches aber noch nicht richtig gestartet ist. An diesem Punkt können wir bequem DLLs Injecten und im Anschluss den Prozess wieder anhalten. Der EntryPoint wird wiederhergestellt und der Prozess fortgesetzt, dieses mal allerdings mit einem richtigen Programmstart. Da der Blogpost zu dieser Injecten-Technique so gut geschrieben ist, spare ich mir Codesamples aus meinem Loader.

Das nächste Problem ist der Fenstermodus: Um bequem debuggen zu können ist ein Fenstermodus von nöten, da die maximized Fenster bei einem Breakpoint meist einfrieren und sich im Vordergrund befinden. So kann der Debugger unmöglich bedient werden. Das “rausspringen” aus dem Fenster über ALT+TAB liefert eine viel geringere Auflösung und einen nativen Fenstermodus bringt Wolfteam nicht mit. DxWnd, das Tool das bereits bei Sieder 3 gute Dienste geleistet hat, erkennt bei einem normalen Programmstart von Wolfteam das Fenster und setzt selbstständig die Hooks. Nicht so, wenn kein Child-Prozess verwendet wird (den wir ja durch Patchen der ersten Schicht “deaktivert” haben). So muss DxWnd zu seinem Glück gezwungen werden, d.h. wir injecten die DxWnd.dll einfach von “Hand”. Die Hooks werden dementsprechend gesetzt und das Fenster startet gepatched ebenfalls im Fenstermodus. Weiterlesen

5 people like this post.

Apex AntiCheat - Erste Schicht einer großen Zwiebel

Da hat das Reverse Engineering Fieber wieder zugeschlagen und mir dieses mal einen sehr hartnäckigen Gegner entgegen geworfen: Ein Anti-Cheat System Namens Apex (Avital), welches u.a. von den Spielen Wolfteam und StarGateZ verwendet wird. Im konkreten wird es in dieser Serie um das (hoffentliche erfolgreiche) Bypassen des AntiCheats für Wolfteam gehen.

BackGround

Fangen wir mit ein paar Basics an und analysieren, wo wir Apex vermuten: Im Ordner von Wolfteam gibt es einen Unterordner “avital” mit verschiedensten Dateien drin:

axxalog, TrayDlg.bin, ApexProgress.da_, LoadSysControl.da_, ApexProgress.dat, LoadSysControl.dat, SysDownLoad.dll, SysLoad.dll, TrayDlg.dll, ApexProgress.exe, LoadSysControl.exe, Config.ini, vssver2.scc, update.u, apexprogress.xoe, bootthunker.xoe, childprocboot.xoe, childprocfuncloader.xoe, chk.xoe, initgamer.xoe, loaddrv.xoe, packmodboot.xoe, parentprocboot.xoe, parentprocfuncloader.xoe, showerrorinfo.xoe, thegameonlymod.xoe, trdlg.xoe, usedrv.xoe, webd.xoe, AXCMN_DRVMAIN.XSE, axpack.xse

Die .xoe Dateien sind lediglich unbenannte DLL Dateien, welche jeweils 1-5 Funktionen exportieren. Diese werden per GetProcAddr geladen und anschließend aufgerufen. Damit können wir bisher wenig anfangen, denn alle Dateien einzeln zu analysieren wäre stundenlange Arbeit.

Der nächste Ansatz ist der Launcher, welcher Spieleupdates herrunterläd und Wolfteam im Anschluss Startet. Irgendwo hier muss auch Apex geladen werden! Die Vermutung liegt nahe, dass der Launcher das eigentliche Wolfteam-Spiel per CreateProcess startet, also direkt mal OllyDbg angeschmissen und reindebugged:

Address   Value      ASCII Comments
0018D108  /0018D388  ˆÓ   ; |ApplicationName = "C:\Program Files (x86)\Wolfteam\WolfTeam.bin"
0018D10C  |0018D490  Ô   ; |CommandLine = ""C:\Program Files (x86)\Wolfteam\WolfTeam.bin" easysurfer 6c65696465725f6e696368745f6d65696e5f7077 72"
0018D110  |00000000        ; |pProcessSecurity = NULL
0018D114  |00000000        ; |pThreadSecurity = NULL
0018D118  |00000000        ; |InheritHandles = FALSE
0018D11C  |00080000       ; |CreationFlags = 80000
0018D120  |00000000        ; |pEnvironment = NULL
0018D124  |00000000        ; |CurrentDirectory = NULL
0018D128  |0018D168  hÑ   ; |pStartupInfo = 0018D168 -> STARTUPINFOA {Size=72., Reserved1=NULL, Desktop=NULL, Title=NULL, X=0, Y=0, Width=0, Height=0, XCountChars=0, YCountChars=0, FillAttribute=0, Flags=0, ShowWindow=SW_HIDE, Reserved2=0, Reserved3=NULL, hStdInput=NULL, hStdOutput=
0018D12C  |0018D230  0Ò   ; \pProcessInformation = 0018D230 -> PROCESS_INFORMATION {hProcess=NULL, hThread=NULL, ProcessID=0 (0.), ThreadID=0}

Damit können wir doch schon mehr anfangen! Anscheinend startet der Launcher die Wolfteam.bin und übergibt als Argumente den Usernamen, das Passwort (Hex Codiert) und die Nummer 72, die vieleicht für das Patchlevel steht. In Zukunft brauchen wir den Launcher also nicht mehr, um Wolfteam zu starten! Wir Übergeben also Olly unsere Argumente und starten Wolfteam erneut, aber diesesmal direkt. Das Laden/Updaten des Anticheats blinkt kurz auf und schon ist unser Spiel im Fullscreen gestartet. Der Anticheat scheint also schnell geladen zu werden! In OllyDbg die Option setzen, dass er bei jedem neuen Module “anhalten” soll schafft Abhilfe.

Weiterlesen

8 people like this post.

Simplest PHP Counter

Hallo zusammen,

gestern wurde spät in der Nacht einem Bekannten ein minimalistisches PHP Counter Script zusammengebastelt. Mein PHP und MySQL war etwas eingerostet, aber dennoch etwas (hoffentlich) brauchbares draus geworden. Vielleicht fängt ja jemand etwas mit dem Source an oder verwendet es sogar in eigenen Projekten.

Geloggt wird die aufgerufene Seite, der UserAgent, Referer und die IP des Nutzers. Im Panel werden dann die Hits und Unique Hits der letzen 24, sowie die Gesammtanzahl der Hits ausgegeben. Ein paar Statistiken zeigen, welche Seite besonders oft frequentiert wurde.

SimpleCounterSystem

Wenn jemand XSS oder SQLi findet, so darf er mir gerne Bescheid geben!

Download: Simplest PHP Counter (292)

Greez

2 people like this post.