27/06/2024
I computerverdenens tidlige dage, længe før moderne operativsystemer dominerede, opstod et værktøj, der ville definere en æra inden for softwareudvikling og -analyse: SoftICE. Dette var ikke blot endnu et program; det var en kerne-debugger, designet til at give udviklere en hidtil uset kontrol og indsigt i systemets dybeste lag. Fra DOS til de tidlige versioner af Windows var SoftICE et uundværligt redskab for dem, der ønskede at forstå, fejlfinde og manipulere software på et niveau, der lå langt under applikationslaget. Lad os udforske, hvad der gjorde SoftICE så unikt, dets historie, dets indflydelse, og hvorfor det stadig huskes i dag.

Dette værktøj adskilte sig markant fra traditionelle debuggere ved sin evne til at operere i det mest privilegerede niveau af operativsystemet – kendt som 'ring 0' – hvilket gav det en uovertruffen magt og fleksibilitet. SoftICE var i stand til at stoppe alle operationer i Windows, når det blev instrueret, hvilket var en revolutionerende funktion for udviklere, der kæmpede med komplekse systemfejl og driverproblemer. Dens lavniveaufunktioner gjorde det også til et populært værktøj inden for software-krakning og reverse engineering, hvilket førte til en konstant kamp mellem softwareudviklere og dem, der søgte at analysere eller omgå deres beskyttelse.
Hvad er SoftICE?
SoftICE var primært kendt som en kerne-mode debugger. Men hvad betyder det præcist? En traditionel applikationsdebugger kører som et almindeligt program og kan kun inspicere andre programmer på applikationsniveau (user-mode). SoftICE derimod var designet til at køre 'under' operativsystemet, ofte omtalt som 'ring 0' i x86-arkitekturen, hvilket er det højeste privilegieniveau. Dette betød, at operativsystemet selv ikke var bevidst om dets tilstedeværelse, hvilket gav SoftICE en unik og kraftfuld position.
Denne unikke position gav SoftICE mulighed for at suspendere alle operationer i Windows, når det blev instrueret, hvilket var en revolutionerende funktion. Forestil dig at kunne fryse hele dit operativsystem for at inspicere hver eneste instruktion, der udføres, eller for at analysere, hvordan en driver interagerer med hardware. Det var netop, hvad SoftICE tilbød. Det var som at have et mikroskop, der kunne se ned på den mindste atomare bevægelse i et komplekst maskineri.
På grund af dets lavniveaufunktioner blev SoftICE også populært som et værktøj til software-krakning og omvendt ingeniørarbejde. Evnen til at træde igennem systemkald, sætte breakpoints i kernel-kode og ændre hukommelse i realtid gjorde det til et kraftfuldt våben i hændene på dem, der ønskede at omgå softwarelicenser eller analysere proprietære programmer. Denne dualitet i anvendelsen – fra legitim udvikling til mere kontroversiel brug – er en del af SoftICE's vedvarende arv.
Microsoft tilbød (og tilbyder stadig) deres egne kerne-mode debuggere, såsom WinDbg og KD, ofte gratis. Men den fulde funktionalitet af disse værktøjer krævede typisk to sammenkoblede computere – en til at køre den software, der skulle debugges (target-maskinen), og en anden til at køre debuggeren selv (host-maskinen), ofte forbundet via en seriel port eller netværk. SoftICE's store fordel var dens evne til at udføre 'single-machine debugging'. Dette eliminerede behovet for et separat setup, hvilket gjorde det til et usædvanligt nyttigt værktøj, især for kompleks driverudvikling, hvor den konstante genstart og forbindelse af to maskiner ville have været utroligt tidskrævende. Den sidste officielt udgivne version af SoftICE var til Windows XP, hvilket markerer slutningen på en æra for mange udviklere og reversere. Selvom det ikke længere er aktivt vedligeholdt, lever dets indflydelse videre gennem de teknikker og værktøjer, det inspirerede.
Historie og Udvikling
Historien om SoftICE begynder i 1987, hvor det oprindelige SoftICE til DOS blev skrevet af NuMega-grundlæggerne Frank Grossman og Jim Moskun. Programmet, der var skrevet i 80386 assembly-sprog, spillede rollen som et operativsystem i sig selv og kørte anden software i virtuel 8086-tilstand. Det blev solgt for 386 dollars, et beløb der dengang afspejlede dets avancerede natur og værdi for professionelle. Dette tidlige SoftICE var en game-changer for DOS-udviklere, der endelig fik et værktøj, der kunne trænge igennem de begrænsninger, som traditionelle debuggere stod overfor.
I 1990'erne blev SoftICE/W (til Windows) udviklet. Dette var en afgørende periode for værktøjet, da det spillede en instrumental rolle i skrivningen af den berømte bog 'Undocumented Windows' af Andrew Schulman, David Maxey og Matt Pietrek, som afslørede mange af Windows' interne hemmeligheder. SoftICE/W var selv afledt af et tidligere, mindre kendt produkt, SoftICE til NetWare, som var en 32-bit protected mode debugger. Denne overgang fra DOS til Windows og NetWare demonstrerede SoftICE's tilpasningsevne og NuMegas evne til at forudse markedets behov.

Nogle af de primære udviklere af SoftICE inkluderede Dom Basile ('Mr. SoftICE'), Tom Guinther (kendt for 'Kitchen Sink' og 'Symbol Engine'), Gerald Ryckman (video-drivere og 'Kitchen Sink'), Ray Hsu (video-drivere til Windows 95) og Dan Babcock (SoftICE/NT 3.1/3.5: universal video-driver, symbol-engine), med bidrag fra mange andre NuMega-udviklere, herunder Frank Grossman, Jim Moskun og Matt Pietrek. Deres kollektive ekspertise og dedikation var afgørende for SoftICE's succes og anerkendelse.
I 1998 blev kodebasen for SoftICE/95 portet til at køre på Windows NT-platformen, hvilket udvidede dets anvendelsesområde betydeligt og sikrede dets relevans i en tid med skiftende operativsystemlandskaber. Denne portning var en kompleks opgave, da Windows NT havde en fundamentalt anderledes arkitektur end Windows 95, hvilket krævede dybdegående viden om begge systemer.
SoftICE blev oprindeligt produceret af firmaet NuMega. I 1997 blev NuMega opkøbt af Compuware, som derefter solgte ejendommen videre til Micro Focus i 2009. I dag ejer Micro Focus kildekoden og patenterne, men vedligeholder ikke aktivt SoftICE. Dette betyder, at SoftICE, som vi kendte det, er et afsluttet kapitel i softwarehistorien, selvom dets innovationer fortsat påvirker moderne debugging-værktøjer.
Nyere versioner af SoftICE patchede dybt ind i Microsoft Windows. Dette betød, at ældre versioner af SoftICE sjældent var kompatible med nye versioner af Windows. Compuware tilbød derfor SoftICE som et abonnement, så det kunne holdes opdateret og synkroniseret med de nyeste Microsoft Windows-versioner. Dette var en nødvendighed for at opretholde funktionaliteten i et konstant skiftende operativsystemmiljø, hvor Microsoft løbende introducerede nye sikkerhedsforanstaltninger og arkitektoniske ændringer. SoftICE blev tidligere tilbudt som en del af Compuware's DriverStudio-pakke, men blev officielt udgået i april 2006 på grund af 'en række tekniske og forretningsmæssige problemer samt generelle markedsforhold'. Vedligeholdelsessupport blev tilbudt indtil marts 2007, hvorefter SoftICE's rejse som et aktivt kommercielt produkt sluttede.
Navnet 'SoftICE' er en elegant kombination af to elementer, der beskriver værktøjets natur og funktionalitet: 'Soft' henviser til software, hvilket er det primære fokusområde for værktøjet, da det er et program designet til at analysere og manipulere andre programmer. 'ICE' er en allusion til 'in-circuit emulator', et hardwareværktøj, der bruges til at debugge indlejrede systemer ved at give direkte kontrol over processoren. Navnet afspejlede dermed SoftICE's evne til at give en lignende lavniveaukontrol, men udelukkende gennem software, hvilket gjorde det tilgængeligt for et bredere publikum af softwareudviklere uden behov for specialiseret hardware.
Anti-SoftICE Foranstaltninger
Efterhånden som SoftICE blev et populært værktøj for software-krakning og analyse, begyndte softwareleverandører at implementere en bred vifte af modforanstaltninger for at beskytte deres produkter. Disse 'anti-debug' teknikker var designet til at detektere tilstedeværelsen af SoftICE (eller andre debuggere) og enten forhindre programmet i at køre korrekt, udløse falske fejl, eller gøre debugging unødvendigt svært. Dette skabte et intenst 'kapløb om våben' mellem softwarebeskyttere og dem, der forsøgte at omgå dem.
Et tidligt eksempel på en sådan modforanstaltning involverede kontrol af Interrupt Descriptor Table (IDT). SoftICE, som mange debuggere, modificerede systemets interrupt-vektorer (specifikt interrupt 1 og 3, som bruges til breakpoints) for at fange kontrol. En simpel kode kunne se sådan ud:
Kontroller forskellen mellem Interrupt 1 og Interrupt 3 vektorerne i IDT. Hvis forskellen ikke er den forventede standardværdi (f.eks. 0x10), er der sandsynligvis en debugger til stede, som har manipuleret disse vektorer. Denne teknik var effektiv mod de tidlige versioner af SoftICE, men debuggere udviklede hurtigt måder at omgå den på.
Mens de tidlige foranstaltninger primært kunne afskrække mindre erfarne crackere, har der siden udviklet sig langt mere sofistikerede metoder. Moderne software anti-analyse metoder er ofte baseret på avancerede pakker/beskyttere som Themida, Armadillo eller ASProtect. Disse værktøjer pakker programkoden og manipulerer indgangsadresser (Entry Point Addresses), hvilket gør det ekstremt svært at finde programmets oprindelige indgangspunkt (OEP – Original Entry Point) eller Import Address Table (IAT). Dette har gjort SoftICE mindre attraktivt for nye brugere, da det kræver en dybere forståelse og yderligere værktøjer for at navigere i den komplekse kode, som disse pakker genererer.

Paradoksalt nok udviklede der sig også værktøjer til at skjule SoftICE's tilstedeværelse for anti-debug foranstaltninger, såsom IceStealth og IceExt til Windows NT, eller Icedump og IcePatch til Windows 9x. Dette skabte et evigt 'kat og mus'-spil, hvor hver side konstant udviklede nye strategier for at overgå den anden. Selvom SoftICE ikke længere er det foretrukne værktøj for nye softwareanalytikere, har dets historie inden for anti-debug-teknikker sat varige spor i softwarebeskyttelsesindustrien.
Modtagelse
SoftICE's indflydelse og innovation blev bredt anerkendt i sin tid. I 1989 listede BYTE, et af datidens mest indflydelsesrige computermagasiner, SoftICE blandt 'Distinction'-vinderne af BYTE Awards. De udtalte, at 'Hvis du udvikler 8086-baserede applikationer på en 80386-maskine, er dette et essentielt og overkommeligt værktøj.' Denne anerkendelse understregede SoftICE's status som et banebrydende og uundværligt værktøj for sin tids professionelle udviklere. Dets evne til at give dybdegående indsigt i systemets funktioner var uden sidestykke og cementerede dets plads som en favorit blandt dem, der arbejdede med lavniveau systemprogrammering og driverudvikling.
Alternativer til SoftICE
Selvom SoftICE ikke længere vedligeholdes aktivt, er behovet for lavniveau debuggere stadig til stede. Flere alternativer er opstået, hver med sine egne styrker og svagheder, og de afspejler den fortsatte udvikling inden for debugging-teknologier:
- Syser: En kommerciel kerne-niveau debugger, der hævder at fortsætte, hvor SoftICE slap. Den sigter mod at tilbyde lignende dybdegående funktionalitet og er et populært valg for dem, der har brug for et kommercielt understøttet værktøj.
- OllyDbg: En shareware-debugger (gratis at bruge), udviklet af Oleh Yuschuk. Dette er en 32-bit assembler-niveau debugger, men den er vigtigt at bemærke, at den primært er designet til 'user-mode' debugging, ikke kerne-mode debugging. Den er dog yderst populær for applikationsanalyse og reverse engineering på grund af dens brugervenlige grænseflade og kraftfulde funktioner.
- Rasta Ring 0 Debugger (RR0D): En open source kerne-debugger, der ligner SoftICE. Den tilbyder lavniveau debugging for en række operativsystemer, herunder Microsoft Windows, Linux, OpenBSD, NetBSD og FreeBSD. Projektet ser dog ikke ud til at blive aktivt vedligeholdt, med den seneste ændring i dets GitHub-arkiv dateret tilbage til december 2008, hvilket gør det mindre pålideligt for moderne systemer.
- BugChecker (ældre version): En 32-bit single-host kerne-debugger for Windows 2000 og XP, udviklet og gjort tilgængelig som open source til uddannelsesmæssige formål. Denne version af BugChecker tillader brugere at spore både bruger- og kerne-kode på både enkelt- og multiprocessorversioner af Windows 2000 og XP, hvilket gjorde den til et værdifuldt værktøj for studerende og forskere.
- BugChecker (moderne version): En nyere efterfølger til SoftICE med samme navn (men uden relation til den ældre version) blev udgivet af Vito Plantamura i 2023. Denne moderne debugger er bemærkelsesværdig, da den understøtter Windows XP helt op til Windows 11, både 32-bit og 64-bit. For at opnå dette efterligner debuggeren, at maskinen debugges af et andet system ved at opsnappe seriel kabelkommunikation og tegner derefter sit display direkte til framebufferen. Denne metode forbedrer stabilitet og kompatibilitet betydeligt sammenlignet med tidligere tilgange, herunder SoftICE's egen, og gør den til et lovende alternativ.
- Hypervisorer: Mange hypervisorer (f.eks. VMware, VirtualBox, KVM) tillader debugging af kernen, der kører i den virtuelle maskine, ved at eksponere en form for debuggergrænseflade, der direkte kan styre den virtualiserede processor. Dette muliggør debugging, selvom kernen ikke har indbyggede debugging-faciliteter, og giver en sikker og isoleret måde at udføre lavniveau analyse på, uden at risikere den fysiske maskines stabilitet.
Disse alternativer viser, at selvom SoftICE's tid som det dominerende værktøj er ovre, lever arven fra kerne-mode debugging og behovet for dybdegående systemkontrol videre og udvikler sig med nye teknologier og metoder.
Sammenligningstabel: SoftICE vs. Microsofts Debuggere
For at illustrere SoftICE's unikke position og fordele, især i sin storhedstid, er her en sammenligning med Microsofts egne kerne-mode debuggere som WinDbg og KD:
| Funktion | SoftICE | Microsoft Debuggere (WinDbg/KD) |
|---|---|---|
| Single-maskine Debugging | Ja, en af dens største fordele. Tillod debugging på en enkelt computer. | Kræver typisk to maskiner (host/target) forbundet via seriel port eller netværk. |
| Installationskompleksitet | Relativt enkel, da den kører lokalt og integreres direkte. | Mere kompleks pga. seriel forbindelse eller netværksopsætning og driverinstallation. |
| Brugergrænseflade | Tekstbaseret, men yderst kraftfuld og intuitiv for erfarne brugere. | GUI (WinDbg) eller kommandolinje (KD), varierende kompleksitet. |
| Kerne-niveau Kontrol | Meget dyb, kan suspendere hele operativsystemet og inspicere alt. | Dyb, men ofte via ekstern forbindelse, hvilket kan give et lille latency. |
| Anvendelse (Historisk) | Driverudvikling, software-krakning, reverse engineering, systemanalyse. | Primært driverudvikling, systemfejlfinding, Microsofts interne brug. |
| Tilgængelighed (i dag) | Udgået, ingen officiel vedligeholdelse eller support. | Gratis, aktivt vedligeholdt og understøttet af Microsoft. |
| Systemkompatibilitet | Primært DOS, Windows 9x, NT, 2000, XP. Begrænset på nyere OS. | Understøtter bredt moderne Windows-versioner (32-bit og 64-bit). |
Ofte Stillede Spørgsmål (FAQ)
Hvorfor var SoftICE så populær blandt software-crackere?
SoftICE's evne til at køre 'under' operativsystemet og fuldt ud suspendere dets drift gav crackere og reversere en hidtil uset kontrol over softwarens udførelse. De kunne sætte breakpoints i lavniveaukode, inspicere hukommelse, ændre registerværdier og springe over licenskontroller, alt sammen fra en enkelt maskine. Dette gjorde det til et ideelt værktøj for at omgå beskyttelsesforanstaltninger og analysere proprietær software, uden at skulle bekymre sig om at blive opdaget af simple anti-debug-teknikker, der var designet til at fange user-mode debuggere. Dets dybdegående adgang til kernen var simpelthen uovertruffen for sin tid.
Kan jeg stadig bruge SoftICE i dag på moderne Windows-versioner?
Officielt er SoftICE udgået og understøttes ikke længere. De seneste versioner var designet til Windows XP. På grund af de dybe systemændringer i nyere Windows-versioner (Vista, 7, 8, 10, 11), især introduktionen af 64-bit arkitekturer og nye sikkerhedsforanstaltninger, er ældre SoftICE-versioner generelt inkompatible og vil sandsynligvis forårsage systemnedbrud eller slet ikke fungere. Selvom der findes uofficielle patches eller metoder til at køre det i virtuelle maskiner med ældre OS, anbefales det ikke til seriøst arbejde på moderne systemer. Alternativer som den nye BugChecker eller hypervisor-baseret debugging er langt mere stabile, funktionsdygtige og sikre at bruge på nutidens operativsystemer.
Hvad er forskellen mellem en user-mode debugger og en kernel-mode debugger?
En user-mode debugger (som f.eks. OllyDbg) kører som en almindelig applikation og kan kun debugge andre applikationer, der kører i 'user-mode' (ring 3). Den har begrænset adgang til systemets kerne og kan ikke suspendere hele operativsystemet. Den er ideel til fejlfinding af individuelle programmer, men kan ikke hjælpe med problemer, der opstår i systemets dybeste lag. En kernel-mode debugger (som SoftICE) kører i 'kernel-mode' (ring 0), det højeste privilegieniveau. Den har fuld adgang til hele systemet, inklusive operativsystemets kerne, drivere og hardware, og kan suspendere systemet fuldstændigt. Dette gør kernel-mode debuggere afgørende for fejlfinding af drivere, operativsystemkomponenter og dybt integreret software, hvor user-mode debuggere ikke kan nå.
SoftICE repræsenterede en milepæl inden for softwareudvikling og debugging, og selvom det nu er et stykke historie, lever dets principper og den innovation, det bragte, videre i moderne værktøjer og teknikker.
Hvis du vil læse andre artikler, der ligner SoftICE: En Dybdegående Guide til Kerne-Debug, kan du besøge kategorien Iskrem.
