Forvirring (programvare)

Forvirring ( Engl. Forvirret "obskur", "obfuscate", "forvirret", "skjul") er et begrep som brukes i programvareteknikk og beskriver den bevisste modifiseringen av programkoden , slik at kildekoden for de som er vanskelige å forstå eller vanskelig å gjenopprette. Målet er å øke innsatsen for reverse engineering for å gjøre endringer, uønsket kopiering av programdeler eller tyveri av immateriell eiendom vanskeligere eller for å forbedre funksjonaliteten f.eks. B. for å skjule skadelig programvare.

I tilfelle tolk- eller manuspråk , hvis kildeteksten blir levert, betyr dette å gjøre den leverte kopien av kildeteksten uleselig og vanskeligere å lese (for mennesker). I et kompilert program krypterer en obfuscator ikke kildekoden, men heller kompilering eller en kopi av kildekoden rett før kompilering. Fremfor alt bør (automatisk) dekompilering forhindres, eller dekompilering skal være så uforståelig som mulig.

kjennetegn

Forvirring endrer kjørbar programkode uten å endre programfunksjonen. For eksempel blir navnene på variabler og funksjoner omdøpt hvis de kan hentes fra programmet. Maskinkoden eller byte-koden (i tilfelle av et kompilert program) kan også krypteres på en slik måte at kommandoseksjonene som tilsvarer en høyt-nivå-språkkommando blandes med de i forrige / påfølgende høyt-nivå-språkkommando; ofte settes også inn ekstra unødvendige (maskin) kommandoer. Dette kan gjøre en maskindekompilering til det opprinnelige språket på høyt nivå mye vanskeligere eller umulig.

Avhengig av kodenes art, kan en bivirkning også være reduksjon av minnekravene (spesielt med skriptspråkprogrammer), f.eks. B. ved å gi nytt navn til lange koder til kortere. Dette er gunstig for nettstedsskript for å redusere overføringsvolumet. Det kan også være fordelaktig når det gjelder applikasjonsprogrammer for terminaler med lav lagringskapasitet eller datakraft.

Avgrensning

Generelt krypterer ikke forvirring programmet og er derfor ikke en anvendelse av steganografi og generelt heller ikke kryptografi . Imidlertid kan tegnstrenger, filer eller hele klasser som er lagret i programmet, krypteres slik at de ikke kan leses i ren tekst (se nedenfor).

Eksempler på kodemuskelingsmetoder

Tilsvarende formler og konstante transformasjoner
For eksempel kan et tillegg +10 erstattes med “legg til 15 og trekk 5”.
Endre kontrollflyten
Rekkefølgen som programinstruksjonene utføres i, kan noen ganger ordnes uten å påvirke funksjonaliteten. Dette kan gjøres både i kildeteksten og i samlingen (da med maskinkommandoer).
Variabel erstatning
Enkelt å endre navn på variabelnavn som "fakturabeløp" eller "adresse" til genererte navn som "ax7zhgr".
Betingede instruksjoner og hopp
Dette inkluderer også overflødige sammenligninger som alltid resulterer i sant eller usant, lenker eller pekere .
Endring i det funksjonelle hierarkiet
Individuelle instruksjoner eller blokker kan - i motsetning til den logiske strukturen - byttes ut i underrutiner eller kopieres fra underrutiner til anropspunktet.
Innsetting av overflødig kode
Overflødig kode settes inn i sekvensen av instruksjoner som bare utfører irrelevante beregninger.
Sett inn kode som gjør dekompilering vanskelig
For eksempel å sette inn kode etter slutten av en metode, som får noen dekompilere til å krasje.
Kryptering
Kryptering er spesielt egnet for å kamuflere individuelle byte eller strenger som hardkodede passord eller filer som leveres i koden, eller til og med hele klasser og biblioteker.
Blandingsfunksjoner
Instruksjonene (maskin) for to funksjoner / språkkommandoer på høyt nivå kan skrives vekselvis. Dette utvisker grensene mellom funksjonene.
Kolonner med variabler
Omstrukturering av matriser eller lister
  • en endimensjonal matrise kan deles i flere endimensjonale matriser
  • en endimensjonal matrise kan utvides til en multidimensjonal matrise
  • en flerdimensjonal matrise kan krympes til en endimensjonal matrise
  • to eller flere endimensjonale matriser kan slås sammen til en endimensjonal matrise.
Anti-feilsøking
Rutiner som sikter mot oppdagelse og deretter tidlig avslutning av et program når en feilsøkingsprogram oppdages. For å gjøre dette skanner de for eksempel minnet for søkestrenger fra forskjellige feilsøkere.

Programmer

Det er forskjellig antall obfuscators for å skjule programvare, avhengig av programmeringsspråk og plattform. Mange av disse er tilgjengelige for direkte anvendelse på kildekoden, eller for plattformer hvis kildekode ville være lett tilgjengelig uten bruk av obfuscators, for eksempel ved å bruke et bytecode-lignende mellomspråk før kjøring. Imidlertid er det også tilstoppere som tilslører programmer skrevet på programmeringsspråk som kompileres direkte til kjørbar kode.

C / C ++

Følgende obfuscatorer for C / C ++ vedlikeholdes aktivt: Stunnix C ++ Obfuscator, StarForce C ++ Obfuscate, Morpher C / C ++ Obfuscator, Semantic Design C og C ++ Obfuscators

Windows Script Encoder

For å skjule forskjellige skript som JScript , VBScript og spesielt ASP- filer, anbefaler Microsoft å bruke Windows Script Encoder. Hvis den webserveren er kompromittert , skal angriperen ikke kunne forstå hvordan ASP programmet fungerer. Imidlertid er det nå dekodere for å angre forvirringen.

Java bytecode og MSIL

Det finnes en rekke proprietære og åpen kildekode-obfuscators for å forvirre Java- bytecode og .NET Common Intermediate Language .

Følgende obfuscators for Java bytecode er aktivt opprettholdes: DashO, JavaGuard, ProGuard , yGuard og Zelix Klassmaster. ProGuard anbefales av Google for å skjule Android-programmer .

JavaScript

For å skjule JavaScript- kode er det et stort antall skjul. De fleste av disse obfuscatorene støtter også reduksjonen av koden, eller det er mange minimizers som også inneholder obfuscation teknikker. Følgende liste over JavaScript-obfuscatorer er programmer der hovedfunksjonen er obfuscation av JavaScript-kode: JScrambler, JSObfuscator, Javascript Obfuscator, UglifyJS, Compressor and Minimizer, Stunnix, Jasob.

Ulemper ved tilvirkning

Forvirring kan gjøre reverse engineering av et program vanskeligere eller tidkrevende, men ikke nødvendigvis gjøre det umulig. I tillegg begrenser det bruken av refleksjon til forvirret kode.

Noen antivirusprogrammer , for eksempel AVG , varsler brukeren når de besøker et nettsted med forvirret JavaScript-kode, siden forvirring også kan brukes til å skjule ondsinnet kode.

Forvirring gjør det vanskelig å lage meningsfulle feilmeldinger, siden standard feilmeldinger som stakkspor knapt er meningsfulle, og utviklerne ikke tillater at det trekkes noen konklusjoner om den aktuelle kildekoden.

Forvirring og copyleft-lisensen

Hvorvidt det er lovlig å omgå en copyleft- programvarelisens ved å avsløre forkledd kildekode, har vært gjenstand for debatt i open source- fellesskapet. Denne typen bypass skjer når forfatteren ikke er villig til å publisere kildekoden til sitt eget program, men blir tvunget til å gjøre det med lisensen til det opprinnelige programmet. Emnet er adressert i GNU General Public License ved å angi kildekoden som den foretrukne versjonen av publisert kode. Den GNU nettsted kunngjør at sært kildekoden er ikke ekte kildekoden og teller ikke som kildekode, noe som betyr at bruk av obfuscators på GPL-beskyttet kildekode utgjør en lisens brudd i øynene av GNU-prosjektet.

Andre

Det er programmeringskonkurranser for kreativt forkledde programkildetekster, men dette tilsvarer bare forvirring for manuspråk:

weblenker

Individuelle bevis

  1. ^ Richard R. Brooks: Disruptive Security Technologies with Mobile Code and Peer-to-Peer Networks . CRC Press, 14. mai 2012, kap. 7 , s. 155 ff . (Engelsk).
  2. a b Codewall .Net Obfuscation ( Memento fra 25. desember 2014 i Internet Archive ) - "Control Flow Obfuscation. Control Flow Obfuscation krypterer kjøringsbanene til metodekroppene i applikasjonen din som gjør dekompilere krasj."
  3. Proguard-resultater - "Det reduserer primært størrelsen på den behandlede koden, med en viss potensiell økning i effektivitet som en ekstra bonus."
  4. Control Flow Obfuscation , Microsoft Developer Network, Visual Studio 2005
  5. JBCO: Java ByteCode Obfuscator - "JBCO har vist seg å forårsake feil eller krasj i to av de mer moderne dekompilatorene Dava og SourceAgain"
  6. DexGuard-nettsted - Krypter strenger, krypter hele klasser, krypter innfødte biblioteker, krypter eiendeler
  7. Åpen katalog - Datamaskiner: Programmering: Språk: JavaScript: Verktøy: Obfuscators . Dmoz.org. 3. august 2013. Hentet 25. november 2013.
  8. Open Directory - Datamaskiner: Programmering: Språk: PHP: Utviklingsverktøy: Forvirring og kryptering . Dmoz.org. 19. september 2013. Hentet 25. november 2013.
  9. Stunnix C ++ Obfuscator-hjemmeside
  10. Star-Force obfuscator-hjemmeside
  11. Morpher hjemmeside
  12. Semantic Design C Obfuscator
  13. ^ Semantic Design C ++ Obfuscator
  14. Liste over Java Code Obfuscators på java2s.com
  15. ProGuard-alternativer i henhold til ProGuard
  16. DashO hjemmeside
  17. JavaGuard hjemmeside
  18. YGuards hjemmeside
  19. Zelix Klassmaster hjemmeside
  20. ProGuard i Android-utviklerdokumentasjonen
  21. JScrambler-hjemmesiden ( Memento fra 20. mars 2015 i Internett-arkivet )
  22. JSObfuscator-hjemmesiden
  23. Javascript obfuscator hjemmeside
  24. UglifyJS hjemmeside
  25. Javascript obfuscator hjemmeside
  26. Stunnix hjemmeside
  27. Jasobs hjemmeside
  28. ^ "Kan vi forvirre programmer?" av Boaz Barak . Math.ias.edu. Arkivert fra originalen 10. august 2014. Hentet 25. november 2013.
  29. AVG ThreatLabs (virusdatabase) via forvirret JavaScript , åpnet 1. mars 2015
  30. securityfocus.com , åpnet 8. februar 2015.
  31. resonnement bak "foretrukne form av arbeidet for å gjøre endringer i det språket i GPL . Lwn.net. Nås på 25 november 2013
  32. Definisjon av fri programvare - www.gnu.org