Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Dan 08. 05. 2013, 08:35:27

Název: Získání 3D dat z běžící aplikace/hry
Přispěvatel: Dan 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!
Název: Re:Získání 3D dat z běžící aplikace/hry
Přispěvatel: to_je_jedno 08. 05. 2013, 09:20:12
myslis, ze tu hru nikdo jeste nezkusil hacknout?
Název: Re:Získání 3D dat z běžící aplikace/hry
Přispěvatel: Zopper 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š.
Název: Re:Získání 3D dat z běžící aplikace/hry
Přispěvatel: jlx 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).
Název: Re:Získání 3D dat z běžící aplikace/hry
Přispěvatel: mon 08. 05. 2013, 10:15:55
napr. tim noveau pouziva na reverse engineering tieto nastroje https://github.com/pathscale/pscnv/wiki/RE_Tools.
Název: Re:Získání 3D dat z běžící aplikace/hry
Přispěvatel: Karel 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.
Název: Re:Získání 3D dat z běžící aplikace/hry
Přispěvatel: Neviditelný 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 (http://www.deep-shadows.com/hax/3DRipperDX.htm). OpenGL bude na Win trochu problematičtější, protože tam není zdaleka tak používané. Fungovat by prý mohl GLIntercept (http://code.google.com/p/glintercept/), pro zisk 3D scény je potřeba ještě OGLE (http://web.archive.org/web/20100709233104/http://ogle.eyebeamresearch.org/). 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ý...
Název: Re:Získání 3D dat z běžící aplikace/hry
Přispěvatel: Dan 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ě?
Název: Re:Získání 3D dat z běžící aplikace/hry
Přispěvatel: mon 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.
Název: Re:Získání 3D dat z běžící aplikace/hry
Přispěvatel: Dan 08. 05. 2013, 15:41:09
Chápu, díky tedy všem za pomoc  ;)