OldComp.cz http://oldcomp.cz/ |
|
Prosba o pomoc s reverzním inženýrstvím http://oldcomp.cz/viewtopic.php?f=55&t=9388 |
Stránka 1 z 1 |
Autor: | tomascz [ 03.02.2021, 16:31 ] |
Předmět příspěvku: | Prosba o pomoc s reverzním inženýrstvím |
Jedná se o zápis na KryoFlux. Jak jsem reportoval před pár dny, dokázal jsem zjistit packety, které DTC posílá KryoFluxu když zapisuje jednu stopu - zapnutí motoru, najetí na cylindr, vybrání strany, čekání na index, začátek streamování, poslání dat přes pípu, flush pípy, konec streamování, čekání na dokončení. V tuhle chvíli jsem předpokládal, že je hotovo. Jenže - DTC přes pípu neposílá KryoFluxu soubor se Streamem (jeho specifikace), nýbrž to "předchroupe" a posílá něco, co má v hlavičce "KFW\x1" (hexa 4B 46 57 01). Co jsem vypozoroval, tak hlavička nemá pevnou délku (v obrázku níže je dlouhá 132/0x84 bajtů). Pak následujou data, který (opět co jsem vypozoroval) jsou "nějak" formulovaný násobky 2µ. Píšu "nějak," protože dlouhé fluxy (např. neformátovaná část stopy coby protipirátská ochrana) se musí řešit speciálně rychlou sekvencí "jedniček," aby signál na čtecí hlavě po danou dobu nespadnul na nulu. Čili z tohodle hlediska chápu konverzi Streamu na něco interního, ale doufal jsem, že se to děje až na straně hardwaru! V oficiálním popisu KryoFluxu si k zápisu dávají rezervu s tím, že zařízení není určeno pro duplikování disket, ale jejich čtení - čili nepředpokládám, že by "KFW\x1 formát" uměl dobře reprezentovat neformátovanou oblast nebo fuzzy bity - prostě tam "něco" přidělali aby umožnili aspoň zápis "dobře vypadajích" dat (nebudu vás zbytečně zahlcovat detailama). V každém případě začátek mojí uměle sestavený stopy zní "010101010101...," kde "01" trvá 2x2µ=4µ. Proč je to reprezentovaný zrovna bajtama 0x01 místo 0x02 (tu a tam přerušenýma něčím jiným) zatím netuším. Pokud 0x01 nahradím bajtama 0x02, zapíše se totéž. Každopádně prekompenzovaná stopa pak vypadá jinak. Jednak hlavička už nemá délku 132 bajtů, ale 196/0xC4 bajtů a fluxy jsou reprezentovaný malinko jinak (u patternu "0101010101..." jsou sudý smrštěný a lichý natažený, přesně jak se požaduje u 2DD disket, "aby to pasovalo" a jeden flux trval co nejblíž cílovým 4µ). Transformaci fluxů na vhodný násobky 2µ si už pořeším sám, v tom nevidím zásadní problém. Ale nedokážu rozluštit hlavičku. Jediný, čeho se chytám je zmíněná značka "KFW\x1" a little-endian délka dat na offsetu 0x10 (výše 0xB1E8, zelenej kroužek to trochu překrývá). Co je uloženo ve zbývajících bajtech netuším. Určitě tam bude něco jako hodiny KryoFluxu (vizte výše uvedená specifikace Stream formátu). Bohužel binárku nepřečtu. Disassemblovací tooly mi nepomůžou, protože neovládám 386 assembler. Decompiler to vysype do funkcí jenom o malinko čitelnějších než disassembler (opět registry). Z dekompilerů jsem zkoušel IDA Freeware, Snowman (ten mi bohužel padal), Binary Ninja a další z této stránky. Bohužel nebyl jsem v těch toolech schopnej dohledat ani ono "KFW\x1" Nenašel by se zde někdo, mistr ve svém oboru, kdo by si na to troufnul? Vím že zde máme velice šikovné členy! Edit: Dá se aplikace nějak debugovat ve Visual Studiu? Že bych si najel na případné volání funkce CreateFile a odtud si to krokoval? |
Autor: | Busy [ 03.02.2021, 18:12 ] |
Předmět příspěvku: | Re: Prosba o pomoc s reverzním inženýrstvím |
Posli mi ten exac alebo daj nejaky link, pozriem nan. |
Autor: | tomascz [ 03.02.2021, 19:31 ] |
Předmět příspěvku: | Re: Prosba o pomoc s reverzním inženýrstvím |
Děkuji za aspoň jeden ohlas. Binárka DTC je zde - soubor DTC/DTC.exe (v podadresáři DTC_x64 je 64-bitová verze, kterou nepoužívám). Další v adresáři je pak firmware firmware_kf_usb_rosalie.bin. Veškeré dokumenty jsou pak ke stažení v sekci Download na oficiálních stránkách KryoFluxu, včetně zmíněné dokumentace Stream protokolu. Jeho implementace je pak v souboru KryoFluxBase.cpp, konkrétně metody CKryoFluxBase::StreamToTrack (pro čtení; v první fázi hledám chyby ve Streamu a pokud je to ok, pak v druhé fázi produkuju interní reprezentaci stopy), resp. CKryoFluxBase::TrackToStream (pro tvorbu, což je možná přehlednější). Typ TLogTime představuje logickej čas v nanosekundách (původně jsem ho zamýšlel jako bezrozměrnou informaci, nicméně nakonec to zakotvilo u nanosekund). Připravil jsem k tomu i pár souborů (Uložto).
Předem děkuji za jakýkoliv posun! |
Autor: | tomascz [ 04.02.2021, 20:47 ] |
Předmět příspěvku: | Re: Prosba o pomoc s reverzním inženýrstvím |
Ok, něco málo bych měl Zkoušel jsem spoustu variací téže stopy až mi vykristalizoval aspoň určitej pattern, o který bych se rád podělil.
Budu rád, pokud se nám podaří dešifrovat i ony žlutě podtržené bajty |
Autor: | tomascz [ 07.02.2021, 22:03 ] |
Předmět příspěvku: | Re: Prosba o pomoc s reverzním inženýrstvím |
Je to až neuvěřitelné, ale HABEMUS CONSCRIPTIO - MÁME ZÁPIS !! Zatím tedy pro 300rpm 2DD floppy - u ostatních typů budu muset ještě odzkoušet, jestli pro ně platí totéž. A teď celou tu práci hlavně zazálohovat! |
Stránka 1 z 1 | Všechny časy jsou v UTC + 1 hodina [ Letní čas ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |