Dekompilera kod från EEPROM - Vintage utrustning från -88

Elektronikrelaterade (på komponentnivå) frågor och funderingar.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45176
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Dekompilera kod från EEPROM - Vintage utrustning från -88

Inlägg av TomasL »

Oavsett vilket, för att återgå till ursprungsfrågan.
Det TS måste göra, in nan han ens funderar på att dis-assemblera koden är:

1. Få fram ett schema på apparaten, antingen om det finns online eller rita ett eget.
2. Genom schemat kontrollera så inte man har "hårdvaru-krypterat" koden.

Det var inte helt ovanligt på den tiden att man kastade om address och datalinor, så att man läste minnen från helt andra adresser än normalt.
Om det är på detta sättet, får man tillverka en adapter som gör samma sak innan man läser ut minnet.
Eftersom koden då hamnar huller om buller i programminnet, och det går då inte att dis-assemblera det.

Denna teknik användes också för att patcha upp existerande program.
Man skickade ut ett patchminne och en PAL eller liknande, PALens uppgift var att koda om adresslinorna, så man för de patchade adresserna läste från patchminnet istället för huvudminnet
Användarvisningsbild
Icecap
Inlägg: 26106
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: Dekompilera kod från EEPROM - Vintage utrustning från -88

Inlägg av Icecap »

Såklart kan man dekompilera programkoden - men det blir en hel del timmar som går åt.
Såklart kan man dela upp i funktioner som man kan analysera och ge vettiga namn och beskrivningar.

Jag har gjort detta med TRS-80 i sinom tid. Det tog väl bara 6 månader innan jag dels hade hittat en del "unika signaturer" i koden och fixat dom och till slut kunde kompilera en komplett PROM som fungerade perfekt.

Lägg till ytterligare en månad och jag hade lagt in egna funktioner som nyttjade Level-3 BASIC ihop med en solid ombyggning av datorn till 32kB SRAM som huvudminne + 128kB SRAM i bankar som kunde användas som hårddisk (batteri backup inbyggt också).

Så har du MYCKET fritid och bra kännedom om programmering är det definitivt lösbart.

Ett annat sätt kan vara att leta efter värdet man vill ändra. Detta lär förekomma MÅNGA gångar i källkoden men då oftast (om det är en skaplig programmör som skrev koden i sin tid) i form av maskinkod.

Konstanter brukar vara samlat i ett område så om man känner till andra värden som man kan söka på kan man rimligt snabbt ringa in området med konstanter.
Användarvisningsbild
AndLi
Inlägg: 17051
Blev medlem: 11 februari 2004, 18:17:59
Ort: Knivsta
Kontakt:

Re: Dekompilera kod från EEPROM - Vintage utrustning från -88

Inlägg av AndLi »

hummel skrev: 13 september 2020, 10:42:09 Nu kostar IAR Systems kompilator bara 60000:- :-)
Det beror ju vilken du köper.. man kan få tag på varianter run 20 000 med :) men billiga är de inte.. (och det till uc som det finns gcc)
xxargs
Inlägg: 10183
Blev medlem: 23 september 2006, 14:28:27
Ort: Södertälje

Re: Dekompilera kod från EEPROM - Vintage utrustning från -88

Inlägg av xxargs »

gcc fanns inte någon större utsträckning 1988, däremot kunde man få via BBS och modem tag i källkod för olika C-kompilatorer som genererade mellankod och kunde koppla till olika set av assemblerkod. Dock dessa hade en hel del övrigt att önska, kodkvaliten var låg till obefintlig och ingen av dessa var tänkta för processorer med extremt begränsad stack-djup (typ 8 returadresser max) och väldigt lite RAM överlag varav en del kunde vara delad med IO. Många av den tidens 'open source C-kompilatorer hade tex. ingen hantering av flyttal och ingen möjlighet med inline-kod

sedan är det inte bara C-kompilator, man behöver en passande assembler och en länkare samt hantering av bibliotek av programfunktioner.

Länkaren var viktig för det var där man bestämde var saker skulle hamna, startadresser, kod, RAM, statiska och dynamiska variabler etc. och till slut genererar en intel hex-kod eller mototola S-kod för att brännas i prom.
peolah
EF Sponsor
Inlägg: 502
Blev medlem: 22 mars 2010, 02:10:47

Re: Dekompilera kod från EEPROM - Vintage utrustning från -88

Inlägg av peolah »

Jag har reverse-engineerat många EPROM och till och med maskprogrammerade processorer, som någon innan här sa fanns inga skydd för att läsa ut ens maskprogrammerade processorer på 80 - 90 talet.
Enda skyddet som fanns var hårdvaruskydd när man använde externa EPROM, som någon nämner skiftade adress/data pinnar till EPROM. Den mest sinnrika lösningen var att EPROM som satt i ett eget litet adapterkort med en processor/pal-krets som skiftade några adress/datapinnar det första xxx klockcyklarna efters reset, sedan var denna kod som kördes i denna initala fas enbart gjord för att den skulle komma till "entrypoint" och sedan inaktivera skyddet. När man läste av ett sådant EPROM med sockeln såg det mesta av koden rätt ut, med texter och annat! Väldigt smart, men enkelt att hacka så klart!
Anledningen till detta skydd (som var en trimchip till en bil) var att man inte skulle kunna kopiera av det rakt av i en EPROM-Läsare / Brännare - lite svårt att föklara i detalj varför. Lite mer tekniskt !

Att läsa av och disassemblera ett 27C64 och ändra lite tider och annat anser jag inte skuller vara något större problem, eller ta någon längre tid. Dock kan det mycket väl vara så att det finns en Checksumma (CRC) som är lagrad i EPROMET för att dels skydda mot ändringar och upptäcka om EPROMET har blivit korrupt. Och denna subrutin måste hittas och antingen avaktiveras eller lära sig hur CRC'n är skapad. Oftast väldigt enkla rutiner med add och addc (add carry) av hela programminnet exklusive två bytes med CRC lagrad (Oftast ligger dessa sist eller i slutet av minnet).

Jag använder IDA PRO från HexRays för sådana projekt. Är köpt för väldigt länge sedan, men väldigt potent. Inbyggd emulering och exportering av olika format till assembleringsprogram.
Oftas använder jag någon Open Source assembler, och det första man gör som IceCap beskriver är att få en assemblerbar "asm" fil som ger en identiskt hex-fil man läst ut från EEPROM och disassemblerat.

Mycket jobb, ja. Som nybörjare extremt mycket jobb!

Edit : Lade till en enkel förklaring om EPROM-Skyddets funktion!
Senast redigerad av peolah 13 september 2020, 14:11:53, redigerad totalt 1 gång.
Användarvisningsbild
säter
Inlägg: 32514
Blev medlem: 22 februari 2009, 21:16:35
Ort: Säter

Re: Dekompilera kod från EEPROM - Vintage utrustning från -88

Inlägg av säter »

Intressant.
Menar du att man kan göra dettà utan att veta hur in- utgångar är kopplade?
peolah
EF Sponsor
Inlägg: 502
Blev medlem: 22 mars 2010, 02:10:47

Re: Dekompilera kod från EEPROM - Vintage utrustning från -88

Inlägg av peolah »

TS skriver ändra några tidsbegränsningar. Så är det inte flera tidsbegränsningar som är exakt samma, så kan man göra det genom att leta upp "värdet" som troligtvis är lagrad som en byte eller ett word.

Om det nu skulle vara skrivit i C blir det svårare än om det vore skrivit i Assembler. Det ser man ganska snabbt på koden man disassemblerar!

Som exempel har jag reverse-engineerat en microkontroller som faktiskt var så modern att den kunde vara låst för utläsning av flashen i detta fallet. (PIC18F252)
Jag har adderat en rutin som kommunicerar med en nano microcontroller som sänder larm via wifi när det blir driftavbrott! Inga större problem då det var gott om flashminne kvar att utnyttja.

Så här kan en del av en disassemblering ser ut, låt säga vi letar efter ett värde som är 28 - här är en subbrutin som använder 28 och kallar på en subbrutin!

Kod: Markera allt

ROM_1850:			; CODE XREF: sub_ROM_1B62+282p
					; sub_ROM_1B62+326p ...
		movlb	0

		movwf	byte_RAM_85, BANKED
		movlw	28 ; '('
		call	sub_ROM_4C6, 0
		movf	byte_RAM_85, w,	BANKED
		call	sub_ROM_6EA, 0
hummel
Inlägg: 2259
Blev medlem: 28 november 2009, 10:40:52
Ort: Stockholm

Re: Dekompilera kod från EEPROM - Vintage utrustning från -88

Inlägg av hummel »

AndLi skrev: 13 september 2020, 11:56:46
hummel skrev: 13 september 2020, 10:42:09 Nu kostar IAR Systems kompilator bara 60000:- :-)
Det beror ju vilken du köper.. man kan få tag på varianter run 20 000 med :) men billiga är de inte.. (och det till uc som det finns gcc)
Priser jag angav är för ARM. Det finns en variant som ligger på drygt 30000:- för ett fåtal varianter. Du kan hyra en licens för drygt 20000:- per år.
Akai
Inlägg: 1345
Blev medlem: 21 oktober 2016, 21:14:49
Ort: Västmanland, Norra

Re: Dekompilera kod från EEPROM - Vintage utrustning från -88

Inlägg av Akai »

Jag inser att det här är inget jag klarar av själv, det är för avancerat. (Jag är heller inte så duktig på programmerIng)

Det är inte värre än att man får leva med egenheterna i systemet. Inte hela världen, även om det hade varit kul att fixa det.

Det är ändå intressant att så pass gammal utrustning är så pass komplex som den verkar vara.
Maalobs
Inlägg: 1299
Blev medlem: 3 februari 2005, 14:35:15
Ort: Stockholm

Re: Dekompilera kod från EEPROM - Vintage utrustning från -88

Inlägg av Maalobs »

Som kuriosa, här är en beskrivning av hur det går till att göra dissemblering av 6502-kod med IDA Pro:
Användarvisningsbild
peak@svelfo
Inlägg: 187
Blev medlem: 13 april 2016, 16:48:57
Ort: Stockholm

Re: Dekompilera kod från EEPROM - Vintage utrustning från -88

Inlägg av peak@svelfo »

Akai skrev: 13 september 2020, 00:39:47 Är det möjligt att dekompilera detta på något sätt och få ut läsbar kod?
Ja, om du kan maskinkod och vet vilken processor som ska exekvera den koden. Med all respekt men det du beskriver är inte självklart. Har du programmerat i ren maskinkod (hex)? Om inte, (fortfarande med all respekt) kan du nog glömma ditt projekt.
Castor
Inlägg: 1981
Blev medlem: 24 mars 2012, 13:03:49

Re: Dekompilera kod från EEPROM - Vintage utrustning från -88

Inlägg av Castor »

Det finns ett antal disassembleringsprogram, så man behöver inte programmera i maskinkod, det går utmärkt att disassemblera, ändra och sedan assemblera. Det tar dock tid, mycket tid och kräver att man är mycket bekant med både assembler och den processor det gäller.
xxargs
Inlägg: 10183
Blev medlem: 23 september 2006, 14:28:27
Ort: Södertälje

Re: Dekompilera kod från EEPROM - Vintage utrustning från -88

Inlägg av xxargs »

Akai skrev: 13 september 2020, 16:17:47 Jag inser att det här är inget jag klarar av själv, det är för avancerat. (Jag är heller inte så duktig på programmerIng)

Det är inte värre än att man får leva med egenheterna i systemet. Inte hela världen, även om det hade varit kul att fixa det.

Det är ändå intressant att så pass gammal utrustning är så pass komplex som den verkar vara.
Det handlar om hur många 100-tals timmar man är villig att stoppa in i detta för att lösa problemet.

Givetvis går det fortare om man har en bakgrund att någon gång i sin karriär faktiskt hållit på med med programmering i assembler och senare 'C' (som många som bara hade assembler suktade efter men var för dyrt att köpa), läsa ut och bränna prommar, följa ledare på kretskort och plota schema med dessa (det är i alla fall görbart på grejorna från den tiden då man ogärna gjorde mer än 2-lagers - idag från 4 - 7 lagerskort så vete fasen) - har man någonsin hållit på med demo-kodning på Amiga i sin tonårstid så har man bättre blick i vad det hela handlar om - och vilket jobb det är att analysera andras färdiga binärer för att sedan kanske hacka dem (det var så demoscenen började - la man en massa tid på en lyckat crack så ville man också lämna ett bomärke...).

Lite deduktiv skill skadar heller inte för att ganska snabbt hitta troliga ställen man kan ändra i, och prova, flera gånger... - och detta köper man inte instruktionsböcker i hur man gör utan det är något som redan finns i en.


Prom-programmerare fanns på var och varannan företag som höll på med elektronik på 80,90 och tom. en bit in på 2000-talet - idag rätt sällsynt och bara de som håller på med underhåll av gammal utrustning typ - och förstås hobbyister som kommit över maskiner som annars förmodligen blivit nermalt som elektronik-skrot.
Användarvisningsbild
säter
Inlägg: 32514
Blev medlem: 22 februari 2009, 21:16:35
Ort: Säter

Re: Dekompilera kod från EEPROM - Vintage utrustning från -88

Inlägg av säter »

xxargs skrev: 13 september 2020, 11:19:59 @säter.

med lämplig programmerare bör det gå att läsa av - på den tiden hade man inte lässkydd av prominnehållet utan var först med modernare arkitekturer som PIC och även 68HC11 (para partiellt på sin EEPROM-del) som man börja införa sådana saker.
Jag tror att processorn är en 8751.
Jag har en brännare som är utlånad just nu.
Den heter DATA I/O 29B
peolah
EF Sponsor
Inlägg: 502
Blev medlem: 22 mars 2010, 02:10:47

Re: Dekompilera kod från EEPROM - Vintage utrustning från -88

Inlägg av peolah »

xxargs skrev: 13 september 2020, 17:39:29
Akai skrev: 13 september 2020, 16:17:47 Jag inser att det här är inget jag klarar av själv, det är för avancerat. (Jag är heller inte så duktig på programmerIng)

Det är inte värre än att man får leva med egenheterna i systemet. Inte hela världen, även om det hade varit kul att fixa det.

Det är ändå intressant att så pass gammal utrustning är så pass komplex som den verkar vara.
Det handlar om hur många 100-tals timmar man är villig att stoppa in i detta för att lösa problemet.

Givetvis går det fortare om man har en bakgrund att någon gång i sin karriär faktiskt hållit på med med programmering i assembler och senare 'C' (som många som bara hade assembler suktade efter men var för dyrt att köpa), läsa ut och bränna prommar, följa ledare på kretskort och plota schema med dessa (det är i alla fall görbart på grejorna från den tiden då man ogärna gjorde mer än 2-lagers - idag från 4 - 7 lagerskort så vete fasen) - har man någonsin hållit på med demo-kodning på Amiga i sin tonårstid så har man bättre blick i vad det hela handlar om - och vilket jobb det är att analysera andras färdiga binärer för att sedan kanske hacka dem (det var så demoscenen började - la man en massa tid på en lyckat crack så ville man också lämna ett bomärke...).

Lite deduktiv skill skadar heller inte för att ganska snabbt hitta troliga ställen man kan ändra i, och prova, flera gånger... - och detta köper man inte instruktionsböcker i hur man gör utan det är något som redan finns i en.


Prom-programmerare fanns på var och varannan företag som höll på med elektronik på 80,90 och tom. en bit in på 2000-talet - idag rätt sällsynt och bara de som håller på med underhåll av gammal utrustning typ - och förstås hobbyister som kommit över maskiner som annars förmodligen blivit nermalt som elektronik-skrot.
Hundratals timmar la jag nog inte på mitt första reverse-engineer som var att interfacea ett philips G7000 tvspel till min ABC80. Hyrde spelen i radioaffär och kopierade och la in på en 720 kB floppdisk.
En raminterface med en massa 2114 på ett europakort och en flatkabel till en skrotad cartridge. Låter det nördigt nog, jag var nog 16 år då.

Offtoptic som ovan är , tror jag inte det skulle ta 100 tals timmar. Det som tar mest tid är att som Maloobs visade i videon att Hjälpa disassmeblern att hitta kod som är markerad som data och vice versa.
och 10 - 20 timmar i Notepad++ för att tabba, sortera göra assemblerbar fil..

Slängda brännare, nja. Min ALL-11-P3 är kvar. Var väl ett år sedan jag startade den, men håller på med bilektronik-projekt med tuning, tom komersiellt.. så jag är väl lite ovanlig.

Mitt sista svar i denna tråd, är ju bara "in the beginning" .. finns så mycket jag inte orkar förklara .. bestämt mig vara offline ett tag..

Edit: tagit bort offtopic
Senast redigerad av peolah 14 september 2020, 09:31:18, redigerad totalt 1 gång.
Skriv svar