Changes between Version 39 and Version 40 of WikiStart


Ignore:
Timestamp:
Feb 20, 2014, 6:19:49 PM (10 years ago)
Author:
walter
Comment:

combios modding info

Legend:

Unmodified
Added
Removed
Modified
  • WikiStart

    v39 v40  
    721721Als het goed is werkt nu de tftp server met ubuntu en freebsd gebasseerde nfs sessies!
    722722
     723== combios mod (option rom) ==
     724Na wat graven met een hexeditor in het oorspronkele soekris firmware update bestand en in de low level eprom uitlezing van de soekris combios kwam ik erachter dat de soekris combios relatief klein is voor de eeprom PLCC32 SST49xxxx SST39xxxx die daarvoor gereserveerd is, namelijk 40-72kb in een 512/256kb rom!!! Kortom er is ruimte zat om met toegevoegde pci option rom payloads te experimenteren die de functionaliteit van de bestaande combios uitbreiden zoals ipxe support of usbboot!
     725
     726De focus ligt op pci option roms, die je in het geval van ongecomprimeerde combios firmware bestand gemakkelijk kan herkennen aan de start bytecode 55aa dat toevallig ook nog eens aan het begin van dat firmware update bestand staat, zie hexeditor. Net als andere pci option roms voor bijvoorbeeld sata/scsi-raid/netwerk controllers is deze gestandardiseerd en gestructureerd en zou je vanuit theorie vanalles op de plek van de bestaande pxe(preboot execultion environment) pci option kunnen plaatsen/uitvoeren. Met die insteek is er al een klein success geboekt, maar er zijn nog wel bugjes. Daarvoor moet je toch wat dieper graven en uitzoeken hoe BIOS met int13 18/19 hooks PNP cbv/BEV hooks/routines het boot process kan kapen/ondersteunen. De vraag blijft of de beperkte combios uberhaupt wel zo goed uitgevoerd is als reguliere pcbios om met deze bootstrap interacties/routines rekening te houden, of moeten wij de option rom aanpassen om daarmee om te gaan?
     727
     728Bios flashen is zeer risicovol vooral als je deze ook nog aanpast/mod een dood/bricked board kan het resultaat zijn. Het flashen van combios via de seriele port met originele firmware is al risicovol maar er zijn veiligheid checks ingebouwd (checksum), echter gelden die veiligheden alleen voor het oorspronkelijke stukje combios binnen het firmware update bestand, maar niet voor de pci optionroms die vooraan in dat bestand staan. Deze kun je dus voorzichtig vervangen en dat is ook de aanleiding om de bestaande combios pxe boot module uit te breiden naar een ipxe of plop usb rom.
     729
     730Naast serieel flashen via de combios omgeving zelf (gebruikelijke methode) kan de soekris 48xx serie onder freebsd/debian vanuit het programma flashrom gelezen en beschreven worden, de 45xx serie kan alleen uitgelezen worden. Het type firmware bestand dat je via de seriele methode flashed is anders qua layout/grote dan dat je direct met flashrom uit de 512KB grote eeprom kan lezen, deze mogen dus nooit verwisseld worden!
     731
     732Inmiddels kan er geheel veilig zonder/met weinig risisco geexperimenteerd worden als we de combios shell memdump optie (die normaal gebruikt word voor combios updates) te gebruiken. Als er voor een bios upgrade via de seriele port eerst een image naar het werk geheugen van de soekris word gecopieerd kan deze met de flashupdate optie geladen worden, echter wij laden geen firmware update maar een test option rom module en forceren/executen direct het ram geheugen waar die staat met de "run" functie om vanaf dit geheugen adres bijvoorbeeld d4000:0000 uit te voeren. Het gedrag is niet 1 op 1 met een geintregeerde pci option rom te vergelijken, wel dat deze ook eerst vanaf de pci-kaart naar het ram geheugen geladen wordt voordat die word uitgevoerd, echter de afwijking zit in de normale bios bootstrap routine/interactie, waar vaak eerst een rom tijdelijk geprobed/geinitialiseerd word en later pas doorgeeft aan de bios of die wel bootbaar is of mag worden overgeslagen. Denk aan een scsi/sata bios die op zijn beurt weer scsi disken probeert te zoeken die mogelijk interressant zijn om van te booten, zo niet dan mag de bios deze overslaan en naar het volgende punt boot punt.
     733
     734Ideeen/aanpak:
     735*Checksums implementeren nu ik eindelijk weet hoe ;-) en PCIR / PNP code in de header controleren.
     736*Eerst zorgen dat een vervangende module niet de normale bootcyclus kaapt of zelf blijft hangen tijdens de echte boot(inth19).
     737*Extra rom naast de bestaande pxe rom plaatsen op een juiste offset van in blocks van X*2048 bytes, iets met jumps?
     738*Meerdere modules naast de bestaande heeft de voorkeur maar hoe weet ik nog niet.
     739
    723740== Links / References==
     741* [http://etherboot.sourceforge.net/doc/html/devman/extension.html BIOS PCI OPTION ROM layout/bootorder]
     742* [http://bioshacking.blogspot.com/2012/02/bios-disassembly-ninjutsu-uncovered-1st.html BIOS reverse engineer book]
     743* [https://sites.google.com/site/pinczakko/preliminary-bios-modification-guide- BIOS option rom checksum]
     744* [http://board.flatassembler.net/topic.php?t=14975 BIOS PCI OPTION ROM loading other OPTION ROM "CHAIN"]
    724745* [https://www.rubysecurity.org/freebsd_pxe-diskless-boot FREEBSD 9 disc1 iso PXE boot install]
    725746* [http://ubuntuforums.org/showthread.php?t=1969041 pxe +nfs ubuntu/debian]