Vraag:
Reverse Engineering (zeer) oud DOS rekenprogramma
user28805
2019-06-22 21:41:43 UTC
view on stackexchange narkive permalink

Ik ben onlangs in dienst getreden bij een bedrijf dat gespecialiseerd is in luchtkanalen & ventilatiesystemen en ik was nogal verrast toen ik merkte dat ze nog steeds een DOS-programma gebruiken om het drukverlies van een specifiek kanaalsysteem te berekenen. Zie je, wanneer lucht door het leidingwerk stroomt, ondervindt het veel weerstand (bochten, ...) en dit programma berekent de hoeveelheid weerstand zodra je alle verschillende componenten van het systeem binnengaat.

Het programma werkt nog steeds, maar moet worden uitgevoerd op een virtuele server met Windows XP, en de lay-out is behoorlijk ... verouderd. Ik vraag me af of het mogelijk is om dit programma te reverse-engineeren en in een "modern" jasje te stoppen, + om eenvoudige gegevensinstructie mogelijk te maken.

Vandaag moet u bijvoorbeeld elke component handmatig vanuit het systeem invoeren, maar het zou een stuk eenvoudiger / sneller zijn om het programma uit te voeren op een lijst met componenten (geëxtraheerd uit onze tekensoftware). (dit is een extra)

Ik ben geen programmeur, maar ik heb deze thread gezien, wat een vergelijkbaar probleem is en dat uiteindelijk een oplossing heeft gevonden.

Het programma dateert uit 1990 en als ik de bestanden in Kladblok open, kan ik zien dat het in TURBO BASIC is geschreven. Ik heb .DAT- en .EXE-bestanden, en ook .KAN-bestanden (ik denk dat die laatste bestanden specifiek zijn gemaakt door het programma, dat LUWKAN wordt genoemd). De ontwikkeling van dit programma is jaren geleden gestopt en zelfs het bedrijf heeft de software niet meer.

Alle hulp of aanwijzingen worden zeer op prijs gesteld? Ik neem aan dat de broncode gemakkelijk kan worden onderzocht en gekopieerd, maar ik ben misschien te naïef.

Met welke tools ben je al bekend? Er zijn wijzigingen in DOSBox (om nog maar te zwijgen van het feit dat u het zelf zou kunnen wijzigen) om een ​​DOS-programma te debuggen. Bovendien was er vroeger een redelijk goede IDA-plug-in die in verbinding stond met een (debug-enabled) DOSBox. In het algemeen kan alle indirecte informatie waardevol zijn bij het RCE-onderzoek van een doelwit. Ook gebruikten mensen in DOS-tijden veel meer trucs om met beperkingen van middelen om te gaan. Het is dus waarschijnlijk de moeite waard om een ​​boek als "Programming Pearls" te pakken en over die trucs te lezen.
Drie antwoorden:
bart1e
2019-06-22 22:47:03 UTC
view on stackexchange narkive permalink

Ik vraag me af of het mogelijk is om dit programma te reverse-engineeren en in een "modern" jasje te plaatsen, + om eenvoudige gegevensinstructie mogelijk te maken.

Ja, het is mogelijk, maar niet voor een niet-programmeur . Om dit te doen, moet men onderzoeken hoe de berekeningen worden uitgevoerd en de exacte formules worden gebruikt. Vervolgens, na het verkrijgen van dergelijke kennis, zou men een applicatie kunnen schrijven die werkt voor moderne processors, waarin de technieken van het originele programma zijn verwerkt.

Ik neem aan dat de broncode gemakkelijk kan worden onderzocht en gekopieerd, maar Ik ben misschien te naïef.

Het zou gemakkelijk te onderzoeken moeten zijn, vooral als de applicatie niet erg complex is (wat naar ik aanneem waar is aangezien het een oude DOS -applicatie is). Er zijn hier echter verschillende nuances:

  1. Wat u uit het uitvoerbare bestand krijgt, is niet de broncode van de toepassing. Het is een vertaling van een broncode die is geschreven in een door mensen leesbare programmeertaal op hoog niveau naar een zogenaamde machinecode , een taal die begrijpelijk is voor een computer en de daarin opgenomen instructies worden direct uitgevoerd door CPU .
  2. Het zal herschreven moeten worden, dwz je kunt de code niet zomaar kopiëren. Een van de redenen hiervoor is dat de manier van interactie tussen besturingssysteem en programma's is veranderd sinds de tijd dat de software werd uitgebracht.
  3. Zelfs als je de broncode van deze applicatie had, zou het niet veel helpen en moet hoe dan ook worden herschreven (kijk naar het punt hierboven) om compatibel te zijn met moderne besturingssystemen.

Maar het zou geen groot probleem zijn om het te analyseren en te herschrijven (+ voeg een andere features), denk ik, vooral als de berekeningen die daar worden uitgevoerd niet te complex zijn. Ik kan niet veel meer zeggen, omdat je het uitvoerbare bestand niet hebt geüpload.

Wat ik echter kan zeggen, is dat een niet-programmeur dat niet doet; je zou wat hulp nodig hebben, aangezien het zowel programmeren als RE-kennis vereist, maar het lijkt uitvoerbaar te zijn.

De tools die ik zou kunnen aanbevelen en die ik heb gebruikt voor het omkeren van DOS -programma's zijn:

  • DOSBox Debugger voor dynamische analyse (observeren van programmagedrag terwijl het wordt uitgevoerd)
  • IDA voor statische analyse (analyseren programma terwijl het niet draait).

Maar zoals ik hierboven al zei, heb je wat hulp nodig om hiervan te profiteren.

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

Het klinkt alsof het nog steeds mogelijk is om met het bedrijf te communiceren. Uitstekend: vraag hen wat hun mening is over

  • reverse engineering van het programma, uitdrukkelijk om de voortzetting van de bedrijfsactiviteiten te vergemakkelijken

  • openbare verspreiding binaire kopieën van het programma op internet, aangepast of ongewijzigd, ook met het uitdrukkelijke doel van reverse engineering om de voortzetting van de activiteiten te vergemakkelijken.

  • als openbare verspreiding niet acceptabel is, deelt u de binair met anderen zonder dat een ondertekende NDA van de potentiële ontvanger vereist is

  • waardoor hetzelfde team dat reverse engineering uitvoert, de vereiste functionaliteit ook direct opnieuw kan implementeren, zonder dat een cleanroom in het midden staan ​​(ref: https://en.wikipedia.org/wiki/Clean_room_design)

  • (mogelijk kunt u deze zelf) het delen van veel screenshots en / of video's (van een camera, of van de obs-studio schermopnamesoftware) van hoe de interactie met het programma eruit ziet

  • (als je hav e alle .bas -bestanden) die iets delen dat mogelijk de broncode van het programma vormt, privé of openbaar

In wezen vraagt ​​u om enigszins herschikt uw oorspronkelijke licentieovereenkomst :). Ik zie dit een beetje als een garantie: uw software heeft volledig alle oorspronkelijke definities van onderhoud overtroffen, samen met wat tegenwoordig als redelijk aftermarket-onderhoud kan worden beschouwd. Het perspectief van de verkoper kan hier verschillen.

In het belang van de samenwerking zou u kunnen aanbieden om de leverancier alle algoritmen te sturen die u herstelt van eventuele reverse engineering-inspanningen die u onderneemt. (Wat wordt verzonden, kan al dan niet modernisering / interfaces bevatten die u er bovenop toevoegt, aangezien dat een unieke inspanning is die u onafhankelijk levert.) Natuurlijk zou een dergelijk aanbod alleen van waarde zijn voor de verkoper als ze geen moderne supercessor bieden aan LUKWAN zelf.

In ieder geval, als je eenmaal duidelijke antwoorden hebt, heb je een concrete juridische basis om op te bouwen in plaats van de huidige grijze zee waarin je je nu bevindt.

Als je dat in het openbaar kunt dump het binaire bestand op internet, dat zal de zaken enorm vereenvoudigen; ga op zoek naar een paar reverse engineering-forums, deel het programma en je zult waarschijnlijk binnen een paar dagen extreem nauwkeurige offertes (en verwachte aankomsttijd) ontvangen. Het kan zijn dat je een team van ongeveer twee personen inhuurt.

Als je het programma privé kunt delen zonder geheimhoudingsverklaring, kun je een situatie van 90% + zo goed bereiken, vooral als je afbeeldingen / video's kunt delen van het programma in actie. Het offerteproces vereist alleen dat geïnteresseerde partijen u eerst pingen, en zal iets langzamer gaan omdat de eerste analyse niet asynchroon zal zijn.

Ik weet niet zeker naar wat voor soort tarieven u zou kijken , aangezien ik zelf geen ervaring heb op dit gebied. Video en beschrijvingen zullen waarschijnlijk een goede ruwe eerste schatting krijgen.


Ik heb een kijkje genomen op https://en.wikipedia.org/wiki/PowerBASIC, dat is waar Turbo BASIC in is veranderd.

Helaas voor jou was een van de belangrijkste kenmerken van deze specifieke omgeving (toen het nog Turbo BASIC was) dat het native binaire bestanden bouwde waarvoor geen gebundelde runtime nodig was.

Dit betekent over het algemeen dat je de "harde modus" weg van volledige assembleertaal reverse engineering moet inslaan ... maar aan de andere kant van de medaille, terwijl er bijvoorbeeld een enorm aantal tools beschikbaar is om bijvoorbeeld "gecompileerd" Java of versluierd JavaScript om te keren, tegen nu (2019), zouden alle tools om bijvoorbeeld het QuickBASIC "gecompileerde programma" -formaat (dat bytecode en een runtime-interpreter gebruikte) waarschijnlijk van de rand van de aarde zijn gevallen of verschuilen achter een enorm prijskaartje. Dus dat is best aardig, FWIW.

Het is duidelijk dat het bijzonder nuttig zal zijn om op te merken dat het programma in Turbo BASIC is geschreven als je op zoek bent naar RE-hulp. Er zijn waarschijnlijk mensen die zeer ervaren zijn met de eigenaardigheden van de TB-compiler.


Ik vraag me af of het mogelijk is om dit programma te reverse-engineeren en in een "modern" jasje te plaatsen, + gemakkelijke gegevensinstructie mogelijk te maken.

Ja. Ik kan twee verschillende benaderingen bedenken. Beide zijn complex en het is moeilijk te zeggen wat gemakkelijker zal werken zonder goed naar de exacte omstandigheden te kijken.

  1. Wat zou kunnen worden omschreven als de 'traditionele' RE-benadering, zou zijn breng het programma naar bits door middel van technieken zoals statische (IDA Pro, Ghidra, radare2) en dynamische (CodeView, Turbo Debugger, SoftICE) analyse, en probeer de wiskunde uit de rest van het programma te halen, waar het eenvoudig opnieuw kan worden geïmplementeerd elders.

    Het grootste risico hier is of het proces geen belangrijke algoritmische details of edge case-afhandeling opvangt. Dit is het enige deel dat ik vet ga maken: u kunt dit proces ondersteunen door tientallen tot vele honderden tests aan te bieden. (Denk nu aan dit proces - zeg ongeveer 10 tests van elk soort specifiek geval dat het programma afhandelt, zou een goed begin moeten zijn.)

    Als het programma rechttoe rechtaan is en de gebieden waar de berekening wordt uitgevoerd gemakkelijk te identificeren zijn (onmogelijk te zeggen zonder het binaire bestand te porren), zou dit de enigszins risico.

  2. Een techniek die redelijk nauw aansluit bij de letterlijke vertaling van uw idee om een ​​"jas" te maken, zou u ertoe moeten brengen het programma in een emulator (zoals DOSBox) die is aangepast om de toestand van het scherm te "exporteren" en gesynthetiseerde toetsenbordinvoer te accepteren - en vervolgens een vertaallaag er bovenop toe te voegen die snel gegevens invoert en het scherm schraapt voor de resultaten.

    Het grootste risico bij deze aanpak is het aantal schermen dat het programma kan weergeven en de complexiteit ervan (is scrollen nodig om alle gegevens te verzamelen? is de volgende actie die moet worden uitgevoerd ondubbelzinnig duidelijk op basis van welke indicaties op het scherm worden weergegeven?) bij het schrapen van de informatie.


[...] het zou een stuk eenvoudiger / sneller zijn om het programma uit te voeren op een lijst met componenten (geëxtraheerd uit onze tekensoftware). (dit is een extra)

In welk formaat is deze lijst met componenten gegenereerd?

Dit kan van alles zijn, van triviaal tot licht complex. De kosten om deze mogelijkheid toe te voegen zullen aanzienlijk lager zijn dan de initiële RE-inspanning.


Ik ben erg geïnteresseerd om te horen hoe dit project verloopt! Als je deze vraag naar andere forums brengt, zou het erg gaaf zijn als je links naar de relevante threads zou kunnen plaatsen. :)

llm
2019-07-03 01:10:19 UTC
view on stackexchange narkive permalink
  1. Bestandsextensies helpen normaal gesproken niet - er is geen echte standaard, er zijn 1000 .DAT- en .KAN-bestanden met absoluut geen relatie, alleen de inhoud van de bestanden kan ons enige hint geven

  2. een uitvoerbaar bestand bevat normaal gesproken geen broncode (of bronachtige dingen), alleen voldoende informatie zodat de cpu ermee kan werken, bijna niet leesbaar voor mensen - behalve door de cracks :)

  3. Is het een kleine opdrachtregelhulpprogramma of een complete grafische applicatie?

  4. Kun je de software ergens uploaden ( http : //www.tinyupload.com/) - zodat we kunnen analyseren of begrijpen hoe de software werkt - of een lijst van de directory (screenshot of tekstbestand) om bestandsgroottes, extensies enz. te krijgen.

  5. Draait de software onder Dosbox (download hier: https://www.dosbox.com/) om de VM / Win95-afhankelijkheid en krijg een idee hoe complex de software is (dongle, hardware-afhankelijkheden, enz.) -> je zou ook kunnen proberen: https://github.com/dmsc/emu2 als het programma echt eenvoudig is, alleen cmd en als linux een optie is, maar probeer DosBox eerder

  6. het is goed te doen als de grootte van het programma dat niet is erg groot

  7. elke vorm van video of iets dat laat zien hoe de software wordt gevuld met gegevens, berekeningen enz. zou helpen ( https://www.screentogif.com /)

  8. waarom denk je dat de exe gebaseerd is op Turbo Basic? Info-String in den Exe? Probeer de exe te openen in IDA freeware 5 ( https://www.scummvm.org/news/20180331/?lang=en) - alleen de versie 5 freeware is geschikt om uitvoerbare bestanden van DOS te openen - de huidige freeware van versie 7 brengt u nergens-> om ons meer gedetailleerde informatie over het uitvoerbare bestand te geven

  9. Maak ALTIJD een back-up van uw volledige installatie, een enkel opslagbestand in kladblok kun je je exe- of gegevensbestanden doden - gebruik beter deze kleine freeware hex-editor: https://mh-nexus.de/en/hxd/

  10. ol >

    ik heb al verschillende kleine tot grote reverse engineering-projecten gedaan - dus ik wist waar ik het over heb :)

    !!! 9 vragen / verklaringen gegeven => 9 antwoorden / feedback vereist !!!

Hallo en welkom bij RE.SE. Hoewel deze vragen legitiem zijn, is het niet echt gepast om ze als antwoord te posten. Aangezien u echter nog geen reputatie heeft, kan ik het raadsel zien waarin u zich bevindt. Het zou goed zijn als de oorspronkelijke onderzoeker deze vragen in het OP opneemt en ze inline beantwoordt.
bedankt voor de info zal het de volgende keer beter doen, ... geen antwoord van hem sinds vraag, misschien krijgt hij de updates niet als een niet-geregistreerde gebruiker :(


Deze Q&A is automatisch vertaald vanuit de Engelse taal.De originele inhoud is beschikbaar op stackexchange, waarvoor we bedanken voor de cc by-sa 4.0-licentie waaronder het wordt gedistribueerd.
Loading...