Získání 3D dat z běžící aplikace/hry

Dan

Získání 3D dat z běžící aplikace/hry
« kdy: 08. 05. 2013, 08:35:27 »
Zdravím,
mám teoretickou otázku. Představte si běžící aplikaci (pro zjednodušení hru), řekněme naprogramovanou v C++ s použitím OpenGL (ale mělo by to být nejlépe řešení nezávislé na jazyku/technologii/platformě) a moje otázka zní, jestli by šlo získat, ať softwarovou nebo hardwarovou cestou, 3D data která se v takovéto aplikaci za jejího běhu zobrazují. Například souřadnice XYZ jednotlivých bodů, polygonů apod. A ty předat nějaké jiné aplikaci která běží současně, nebo třeba jen uložit do souboru. Jde o to, že by to mělo být aplikovatelné na již vytvořené aplikace, do jejichž zdrojových kódů už není přístup, tak jestli je nějaká cesta jak to udělat. Třeba i přímo přes grafickou kartu, která tyhle informace určitě musí od aplikace obdržet a nějak s nimi pracovat aby je vůbec mohla zobrazit na monitoru, pouze nevím konkrétní cestu jak se k nim dostat.

Jakékoliv nápady jsou vítány :)

Díky za rady!


Re:Získání 3D dat z běžící aplikace/hry
« Odpověď #1 kdy: 08. 05. 2013, 09:20:12 »
myslis, ze tu hru nikdo jeste nezkusil hacknout?
Děkuji za možnost editace příspěvku.

Re:Získání 3D dat z běžící aplikace/hry
« Odpověď #2 kdy: 08. 05. 2013, 09:48:42 »
Tak teoreticky to možné je, na podobném principu vlastně fungují ty 3D zobrazovače pro hry, např. Nvidia 3D Vision.

Ale bez podpory v ovladačích nic nevytáhneš.

jlx

Re:Získání 3D dat z běžící aplikace/hry
« Odpověď #3 kdy: 08. 05. 2013, 10:07:32 »
Zajimava otazka. Napadlo mne, ze mozne reseni by bylo pouziti Virtualboxu. Ten je open-source a ma virtualizovany OpenGL driver (pass-through). Tam by teoreticky bylo mozne pridat nejaky odchytavac, ktery by ukladal stream OpenGL prikazu a bufferu.

Zdrojaky toho ovladace jsou zde: https://www.virtualbox.org/browser/vbox/trunk/src/VBox/HostServices/SharedOpenGL a zda se, ze je tam i nejaka podpora rozbalovani toho streamu (unpacker, ale to uz je jenom spekulace).

mon

Re:Získání 3D dat z běžící aplikace/hry
« Odpověď #4 kdy: 08. 05. 2013, 10:15:55 »
napr. tim noveau pouziva na reverse engineering tieto nastroje https://github.com/pathscale/pscnv/wiki/RE_Tools.


Karel

Re:Získání 3D dat z běžící aplikace/hry
« Odpověď #5 kdy: 08. 05. 2013, 11:01:48 »
Běžně se používají dvě metody. Ta první je pustit to ve virtualizaci, ve vhodnou chvíli uložit virtuální stroj a prostě si pak prohlédnout paměť. Řada datových formátů vytváří v paměti poměrně rozeznatelné vzorce, takže najít mp3 nebo mesh v paměti není až tak těžké. Tato metoda je vhodná pokud chete vytáhnout data v použitelné formě ("ukrást" hudbu nebo 3D modely). Na internetu se dají najít nástroje nebo návody, jak různé formáty v paměti rozpoznat.

Druhá metoda je rozjet tu hru pod "vlastním" OpenGL ovladačem, který dokáže na požádání ukládat instrukce. Tato metoda je vhodná pokud chcete restaurovat obraz nebo ho chcete jako 3D. Nedostanete se tím sice k 3D modelům jednotlivých objektů, ale někdy jen chcete "típnout screenshot ve 3D" a to to umí výborně. Na internetu jsem svého času na toto viděl upravenou verzi MESA.

Neviditelný

Re:Získání 3D dat z běžící aplikace/hry
« Odpověď #6 kdy: 08. 05. 2013, 13:04:40 »
Pokud vám jde o nástroje pro Windows, pro Direct3D aplikace používající verzi 6 až 9 lze použít 3D Ripper. OpenGL bude na Win trochu problematičtější, protože tam není zdaleka tak používané. Fungovat by prý mohl GLIntercept, pro zisk 3D scény je potřeba ještě OGLE. Absolutně nezávislé na použitém 3D API nebo nedej bože platformě to bez virtualizace asi neuděláte. Jinak Google je v tomto ohledu velmi sdílný...

Dan

Re:Získání 3D dat z běžící aplikace/hry
« Odpověď #7 kdy: 08. 05. 2013, 14:02:34 »
Skvěle, díky moc za tipy! Chvíli se tím budu prokousávat  :)
Mě nejde ani moc o jednorázové řešení, nebo vykrádání modelů z her, spíše o stabilní řešení se kterým bych se nemusel tajit (jak říkám, nejde o vykrádání čehokoliv), tak aby mohlo fungovat souběžně s hrou, právě jako Jan Ť. například zmínil Nvidia 3D vision.
Ještě se zeptám ohledně vlastního ovladače, řekněme že by se jednalo o klasický ovladač který by komunikoval s externím zařízením (ať to bude kus hardwaru, nebo jen výstup do souboru) je možné ho vytvořit tak aby stávající funkcionalita zůstala nedotčená, hra nebo aplikace by tedy běžela jako doposud, jen by tento ovladač zpracovával stejná data jako standardní ovladač OpenGL - tedy že by běželi dva současně?

mon

Re:Získání 3D dat z běžící aplikace/hry
« Odpověď #8 kdy: 08. 05. 2013, 14:28:16 »
Ještě se zeptám ohledně vlastního ovladače, řekněme že by se jednalo o klasický ovladač který by komunikoval s externím zařízením (ať to bude kus hardwaru, nebo jen výstup do souboru) je možné ho vytvořit tak aby stávající funkcionalita zůstala nedotčená, hra nebo aplikace by tedy běžela jako doposud, jen by tento ovladač zpracovával stejná data jako standardní ovladač OpenGL - tedy že by běželi dva současně?

to je zbytocna praca, staci pouzit vyssie spomenuty daky call interceptor, ktory zachyti volanie, moze ho ulozit a dalej ho posle povodnemu ovladacu.

Dan

Re:Získání 3D dat z běžící aplikace/hry
« Odpověď #9 kdy: 08. 05. 2013, 15:41:09 »
Chápu, díky tedy všem za pomoc  ;)