Otázka:
Reverzní inženýrství (velmi) starý výpočetní program DOS
user28805
2019-06-22 21:41:43 UTC
view on stackexchange narkive permalink

Nedávno jsem se připojil ke společnosti, která se specializuje na ventilační systémy & vzduchovodů a byl jsem docela překvapen, když jsem si všiml, že stále používají program DOS k výpočtu tlakové ztráty konkrétního potrubního systému. Uvidíte, že když vzduch prochází potrubím, naráží na velký odpor (ohyby, ...) a tento program vypočítá míru odporu, jakmile vstoupíte do všech různých komponent systému.

Program stále funguje dnes, ale musí být spuštěn na virtuálním serveru se systémem Windows XP, navíc je rozložení docela ... zastaralé. Zajímalo by mě, zda je možné tento program zpětně analyzovat a vložit do „moderní“ bundy, + povolit snadnou datovou instrukci.

Například dnes musíte ručně zadat každou komponentu ze systému, ale bylo by mnohem snazší / rychlejší spustit program na seznamu komponent (extrahovaných z našeho kreslicího softwaru). (toto je extra)

Nejsem programátor, ale viděl jsem toto vlákno, což je docela podobný problém a který nakonec našel řešení.

Program pochází z roku 1990 a pokud otevřu soubory v poznámkovém bloku, vidím, že je napsán v TURBO BASIC. Mám soubory .DAT a .EXE a také soubory .KAN (myslím, že tyto poslední soubory jsou konkrétně vytvořeny programem, který se nazývá LUWKAN). Vývoj tohoto programu se před lety zastavil a software již nemá ani společnost.

Jakákoli pomoc nebo směr by byl velmi oceněn? Předpokládal bych, že zdrojový kód lze snadno prozkoumat a zkopírovat, ale mohl bych být příliš naivní.

S jakými nástroji jste se již seznámili? Existují úpravy DOSBoxu (nemluvě o tom, že si je můžete upravit sami) pro ladění programu DOS. Navíc existoval docela dobrý plugin IDA propojený s (laděným) DOSBoxem. Obecně _jakékoli nepřímé informace mohou být cenné při RCEing cíle. V dobách systému DOS také lidé používali mnohem více triků k řešení omezení zdrojů. Pravděpodobně tedy stojí za to popadnout knihu jako „Programování perel“ a přečíst si tyto triky.
Tři odpovědi:
bart1e
2019-06-22 22:47:03 UTC
view on stackexchange narkive permalink

Zajímalo by mě, zda je možné tento program zpětně analyzovat a vložit do „moderního“ pláště, + povolit snadnou datovou instrukci.

Ano, je to možné, ale ne pro neprogramátora . K tomu je třeba prověřit, jak se provádějí výpočty, a používat přesné vzorce. Poté, po získání těchto znalostí, lze napsat aplikaci pro moderní procesory zahrnující techniky použité v původním programu.

Předpokládám, že zdrojový kód lze snadno prozkoumat a zkopírovat, ale Možná jsem příliš naivní.

Mělo by být snadné prozkoumat, zvláště pokud aplikace není příliš složitá (což předpokládám, že je to pravda, protože je to stará aplikace DOS ). Zde však existuje několik nuancí:

  1. To, co získáte ze spustitelného souboru , není zdrojový kód aplikace. Jedná se o překlad ze zdrojového kódu napsaného v lidském čitelném programovacím jazyce na vysoké úrovni do takzvaného strojového kódu , což je jazyk srozumitelný počítači a instrukce v něm obsažené jsou prováděny přímo CPU .
  2. Bude nutné jej přepsat, tzn. Kód nelze zkopírovat. Jedním z důvodů je to, že způsob interakce mezi OS a programy se od doby, kdy byl software vydán, změnil.
  3. I kdybyste měli zdrojový kód této aplikace, moc by to nepomohlo a měly by být přepsány oběma směry (podívejte se na výše uvedený bod), aby byly kompatibilní s moderními operačními systémy.

Nebyl by však velký problém jej analyzovat a přepsat (+ přidat další funkce), myslím, zvláště pokud tam provedené výpočty nejsou příliš složité. Nemohu říci nic víc, protože jste nenačetli spustitelný soubor.

Mohu však říci říci, že neprogramátor to prostě neudělá ; potřebovali byste nějakou pomoc, protože to vyžaduje jak programování, tak znalosti RE, ale zdá se být proveditelné.

Nástroje, které bych mohl doporučit a které jsem použil pro obrácení programů DOS , jsou:

  • DOSBox Debugger pro dynamickou analýzu (sledování chování programu při běhu)
  • IDA pro statickou analýzu (analýza program, i když jej neběží).

Ale jak jsem uvedl výše, k jejich využití budete potřebovat pomoc.

i336_
2019-07-01 19:25:01 UTC
view on stackexchange narkive permalink

Zdá se, že se společností je stále možné komunikovat. Vynikající: zeptejte se jich, jaké mají názory na

  • reverzní inženýrství programu, výslovně pro usnadnění pokračování obchodních operací

  • veřejné šíření binární kopie programu na internetu, upravené nebo nemodifikované, rovněž pro výslovné účely reverzního inženýrství, aby se usnadnilo pokračování operací.

  • pokud není veřejné šíření souhlasné, soukromé sdílení binární s ostatními bez požadavku podepsaného NDA od budoucího příjemce

  • umožňující stejnému týmu provádějícímu reverzní inženýrství také reimplementovat požadovanou funkčnost přímo, bez nutnosti čistého prostoru být uprostřed (viz: https://en.wikipedia.org/wiki/Clean_room_design)

  • (na tuto otázku možná budete moci odpovědět sami) sdílení mnoha snímků obrazovky nebo videí (z fotoaparátu nebo ze softwaru pro nahrávání obrazovky obs-studio ), jak vypadá interakce s programem

  • (pokud máte e jakékoli soubory .bas ), které sdílejí cokoli, co by se mohlo zdát, že tvoří zdrojový kód programu, soukromě nebo veřejně.

V zásadě to žádáte mírně změňte uspořádání původní licenční smlouvy :). Dívám se na to trochu jako na záruku: váš software zcela překročil všechny původní definice údržby, spolu s tím, co lze považovat za přiměřenou údržbu následného trhu. Perspektiva dodavatele se zde může lišit.

V zájmu spolupráce, kterou můžete nabídnout, můžete odeslat prodejci jakékoli algoritmy, které obnovíte z veškerého úsilí o zpětné inženýrství, které provedete. (To, co se odesílá, může, ale nemusí, zahrnovat jakoukoli modernizaci / rozhraní, která přidáte na začátek, protože to je jedinečné úsilí, které vyvíjíte nezávisle.) Taková nabídka by samozřejmě měla pro prodejce hodnotu, pouze pokud by nenabídla moderního supercesora sami LUKWAN.

V každém případě, jakmile budete mít jasné odpovědi, budete mít konkrétní právní základ, na kterém můžete stavět, místo současného moře šedé, ve kterém právě teď jste.

Pokud můžete veřejně vypsat binární soubor na internetu, což výrazně zjednoduší záležitosti; jděte najít několik fór pro reverzní inženýrství, sdílejte program a během několika dní pravděpodobně obdržíte extrémně přesné nabídky (a ETA). Může se stát, že najmete tým dvou lidí.

Pokud můžete program sdílet soukromě bez NDA, můžete dosáhnout 90% dobré situace, zejména pokud můžete sdílet obrázky / videa programu v akci. Proces nabídky bude pouze vyžadovat, aby vás zúčastněné strany nejprve vyzkoušeli pomocí příkazu ping, a bude probíhat poněkud pomaleji, protože počáteční analýza nebude asynchronní.

Nejsem si jistý, na jaké sazby byste se dívali , protože sám v této oblasti nemám žádné zkušenosti. Video a popisy pravděpodobně dostanou dobrý hrubý počáteční odhad.


Podíval jsem se na https://en.wikipedia.org/wiki/PowerBASIC, což je na co se Turbo BASIC proměnil.

Bohužel pro vás byla jednou z hlavních funkcí tohoto konkrétního prostředí (ještě v době, kdy to bylo ještě Turbo BASIC) to, že vytvářelo nativní binární soubory, které nevyžadovaly svázaný běh.

To obecně znamená, že budete muset jít po „tvrdém režimu“ cesty úplného zpětného inženýrství v jazyce assembleru ... ale na druhé straně mince, i když je tam např. obrovské množství nástrojů např. obrátit „kompilovanou“ Javu nebo zmatený JavaScript, jakékoli nástroje pro obrácení, např. formát „kompilovaného programu“ QuickBASIC (který používal bytecode a runtime tlumočník), by pravděpodobně spadly z okraje Země nebo schovávejte se za masivní cenovkou. To je tedy docela příjemná věc, FWIW.

Obzvláště užitečné bude zjevné, že program je napsán v Turbo BASIC, když hledáte pomoc RE. Pravděpodobně existují lidé, kteří mají velké zkušenosti se zvláštnostmi překladače TB.


Zajímalo by mě, zda je možné tento program zpětně analyzovat a vložit do „moderního“ pláště, + povolit snadnou datovou instrukci.

Ano. Napadají mě dva různé přístupy. Oba jsou složité a je těžké říci, které řešení bude snazší bez dobrého pohledu na přesné okolnosti.

  1. To, co by se dalo popsat jako „tradiční“ přístup RE, by bylo vezměte program na kousky pomocí technik, jako je statická (IDA Pro, Ghidra, radare2) a dynamická (CodeView, Turbo Debugger, SoftICE) analýza, a pokuste se škádlit matematiku od zbytku programu, kde ji lze přímo reimplementovat jinde.

    Hlavní riziko zde spočívá v tom, zda proces nezachytí důležité podrobnosti algoritmu nebo zpracování okrajových případů. Toto je jediný kousek, který zdůrazním odvážně: tomuto procesu můžete pomoci poskytnutím desítek až stovek testů. (Začněte o tomto procesu uvažovat hned - řekněme asi 10 testů každého typ konkrétního případu, který by měl program zvládnout, by měl být dobrým začátkem.)

    Pokud je program přímočarý a oblasti, kde se provádí výpočet, lze snadno identifikovat (nelze říci bez binárního bouchání), mělo by to zmírnit poněkud riskovat.

  2. Technika, která poměrně přesně sleduje doslovný překlad vaší představy o vytvoření „bundy“, by způsobila zabalení programu do emulátor (například DOSBox), který byl upraven tak, aby „exportoval“ stav obrazovky a přijímal syntetizovaný vstup z klávesnice - a poté přidal vrstvu překladu nahoře, která rychle zadá data a seškrábne obrazovku pro výsledky.

    Hlavním rizikem tohoto přístupu je počet obrazovek, které může program zobrazit, a složitost, která je s tím spojena (je potřeba posouvat, abyste získali všechna data? je další akce, která bude jednoznačně zřejmá na základě toho, jaké indikace jsou zobrazeny na obrazovce?) při seškrábávání informací.


[...] bylo by mnohem jednodušší / rychlejší spustit program na seznamu komponent (extrahovaných z našeho kreslicího softwaru). (toto je extra)

V jakém formátu je tento seznam generovaných komponent?

Může to být cokoli od triviálního po mírně složitý. Cena za přidání této funkce bude podstatně nižší než počáteční úsilí RE.


Velmi mě zajímá, jak tento projekt probíhá! Pokud tuto otázku přenesete na jiná fóra, bylo by skvělé, kdybyste mohli umístit odkazy na příslušná vlákna. :)

llm
2019-07-03 01:10:19 UTC
view on stackexchange narkive permalink
  1. Přípony souborů obvykle nepomáhají - neexistuje žádný skutečný standard, v okolí je 1000 souborů .DAT a .KAN, s absolutně ne relací, obsah souborů nám může poskytnout jakoukoli nápovědu

  2. spustitelný soubor normálně neobsahuje zdroj (nebo zdroj jako věci), pouze dostatek informací, aby s ním mohl procesor pracovat, téměř nečitelný člověkem - kromě trhlin:)

  3. Je malý nástroj příkazového řádku nebo plnohodnotná grafická aplikace?

  4. Můžete software někde nahrát ( http : //www.tinyupload.com/) - takže jsme schopni analyzovat nebo pochopit, jak software funguje - nebo výpis adresáře (snímek obrazovky nebo textový soubor), abychom získali velikosti souborů, přípony atd.

  5. Je software spuštěn pod Dosboxem (ke stažení zde: https://www.dosbox.com/), aby se zbavil závislosti VM / Win95 a získejte pocit, jak složitý je software (hardwarový klíč, hardwarové závislosti atd.) -> můžete také zkusit: https://github.com/dmsc/emu2 pokud je program opravdu jednoduchý, pouze cmd a pokud je linux možnost, ale zkuste DosBox před

  6. je to velmi možné, pokud velikost programu není velmi velká

  7. pomůže jakákoli forma videa nebo něco, co ukazuje, jak je software naplněn daty, výpočty atd. ( https://www.screentogif.com /)

  8. proč si myslíte, že exe je založeno na Turbo Basic? Info-String v den Exe? Zkuste otevřít exe v IDA freeware 5 ( https://www.scummvm.org/news/20180331/?lang=cs) - schopný je pouze freeware verze 5 otevřít spustitelné soubory systému DOS - freeware aktuální verze 7 vás nikam nepřináší -> získat více podrobných informací o spustitelném souboru

  9. VŽDY zálohujte kompletní instalaci, jeden soubor pro uložení v poznámkovém bloku zabijte své exe nebo datové soubory - použijte tento malý freewarový hex editor: https://mh-nexus.de/en/hxd/

  10. ol >

    Předtím jsem udělal několik malých až velkých projektů reverzního inženýrství - takže jsem věděl, o čem mluvím :)

    !!! 9 otázek / vyjádření => je vyžadováno 9 odpovědí / zpětných vazeb !!!

Ahoj a vítejte v RE.SE. I když jsou tyto otázky oprávněné, není opravdu vhodné je zveřejňovat jako odpovědi. Avšak když vidím, že zatím nemáte žádnou pověst, vidím hlavolam, ve kterém se nacházíte. Bylo by dobré, kdyby původní tazatel tyto otázky začlenil do OP a odpověděl na ně inline.
díky za informace bude příště lepší, ... od otázky od něj žádná odpověď, možná nedostane aktualizace jako neregistrovaný uživatel :(


Tyto otázky a odpovědi byly automaticky přeloženy z anglického jazyka.Původní obsah je k dispozici na webu stackexchange, za který děkujeme za licenci cc by-sa 4.0, pod kterou je distribuován.
Loading...