Obfuskation (programvara)

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 10 februari 2019; kontroller kräver 19 redigeringar .

Obfuscation (från latin  obfuscare  - att obscure, obscure; och engelska  obfuscate  - för att göra icke-uppenbar, förvirrande, förvirrande) eller kodobfuskation  - bringar källkoden eller den körbara koden för programmet till en form som bevarar dess funktionalitet, men gör det svårt att analysera, förstå algoritmerna för arbete och modifiering under dekompilering .

"Obfuskera" koden kan utföras både på nivån för namn på programkomponenter och på nivån för programalgoritmer . För att skapa obfuskerad assemblertext kan specialiserade kompilatorer användas som använder icke-uppenbara eller odokumenterade funktioner i programexekveringsmiljön . Det finns också speciella program som producerar obfuscation, som kallas obfuscators ( eng.  obfuscator ).

Obfuskationsmål

Svårighet att dekompilera / felsöka och undersöka program för att upptäcka funktionalitet;

Svårigheter att dekompilera proprietär programvara för att förhindra omvänd konstruktion eller kringgående av DRM- och licensverifieringssystem ;

Svårigheter att knäcka programvara ;

Optimering av programmet för att minska storleken på körkoden och (om ett icke- kompilerat språk används) för att påskynda arbetet;

Demonstration av språkets icke-uppenbara möjligheter och programmerarens kvalifikationer (om det görs manuellt och inte med verktyg);

Teknik

På källnivå

I JavaScript , VBScript och liknande skriptspråk är källkoden för programmet tillgänglig för användaren . I det här fallet kan formatering av texten och byte av namn göra texten mindre läsbar.

Källtext på C- språk :

int COUNT = 100 ; float TAX_RATE = 0,2 ; för ( int i = 0 ; i < ANTAL ; i ++ ) { moms [ i ] = ursprungspris [ i ] * TAX_RATE ; pris [ i ] = ursprungspris [ i ] + moms [ i ]; }

Kod efter obfuskation [1] :

för ( int a = 0 ; a < 100 ; a ++ ){ b [ a ] ​​= c [ a ] ​​* 0,2 ; d [ a ] = c [ a ] + b [ a ];}

Mer komplext exempel:

char * M , A , Z , E = 40 , J [ 40 ], T [ 40 ]; main ( C ){ för ( * J = A = scanf ( M = "%d" , & C ); --E ; _ J [ E ] = T [ E ] = E ) printf ( "._" ); för (;( A -= Z =! Z ) || ( printf ( " \n |" ) , A = 39 , C -- ) ; Z || printf ( M )) M [ Z ] = Z [ A - ( E = A [ J - Z ]) &&! C & A == T [ A ] | 6 << 27 < rand () ||! C &! Z ? J [ T ​​[ E ] = T [ A ]] = E , J [ T [ A ] = A - Z ] = A , "_." : "|" ];}

På maskinkodnivå

Som regel minskar obfuskering på nivån för maskinkod exekveringshastigheten och ökar följaktligen exekveringstiden för programmet. Därför används den på säkerhetskritiska , men inte hastighetskritiska ställen i programmet, som att kontrollera registreringskoden [2] .

Det enklaste sättet att fördunkla maskinkoden  är att infoga inaktiva konstruktioner i den (som or ax, ax).

På den mellanliggande kodnivån

Till skillnad från konventionella programmeringsspråk som C++ eller Pascal som kompilerar till maskinkod , kompilerar Java-språken , NetP och .NET - plattformsspråken källkod till mellankod ( bytecode ) som innehåller tillräckligt med information för att rekonstruera källkoden på ett adekvat sätt. Av denna anledning används mellanliggande kodobfuskering för dessa språk.

Utnämning

Komplicerar kodforskning

Som nämnts ovan är det ganska enkelt att dekompilera Java- och .NET-program. I det här fallet ger obfuscatorn ovärderlig hjälp till dem som vill dölja sin kod från nyfikna ögon. Ofta, efter obfuskering, kompileras inte den dekompilerade koden om.

HTML -obfuskation hjälper spammare : på en e- postklient som kan visa HTML läses texten, men anti-spam-filtret , som hanterar den ursprungliga HTML-filen, skickar det oönskade meddelandet utan att känna igen den förbjudna raden i det.

Det enklaste exemplet på obfuskerad HTML:

< b > Mash </ b >< b > ina </ b >

Vid visning kommer användaren att se ordet " Maskin ", medan det i källkoden dissekeras och uppfattas som två separata ord.

Optimering

I tolkade språk tar obfuskerad kod mindre utrymme än källkoden och går ofta snabbare än källkoden. Moderna obfuscatorer ersätter också konstanter med siffror, optimerar arrayinitieringskod och utför andra optimeringar som är problematiska eller omöjliga på källnivån.

Problemet med storleksminskning är viktigt, till exempel vid programmering för mobiltelefoner i J2ME , där storleken på programmet är kraftigt begränsad. JavaScript-obfuskering minskar storleken på HTML- filer och påskyndar därmed laddningen.

Skydda proprietär programvara

Skydda källkoden från att redigeras i vinstsyfte.

Nackdelar

Förlust av kodflexibilitet

Obfuskationskod kan bli mer plattforms- eller kompilatorberoende.

Felsökningssvårigheter _

Obfuscatorn hindrar en utomstående från att ta reda på vad koden gör, men hindrar också utvecklaren från att felsöka den. Vid felsökning måste du stänga av obfuscatorn.

Otillräcklig säkerhet

Även om obfuskering hjälper till att göra ett distribuerat system säkrare, bör det inte begränsas till det. Obfuskation är säkerhet genom dunkel . Ingen av de befintliga obfuscatorerna garanterar komplexiteten i dekompileringen och ger inte säkerhet på nivån för moderna kryptografiska system. Det är ganska troligt att ett effektivt skydd är omöjligt (åtminstone i någon speciell klass av problem som ska lösas).

Misstag i obfuscators

En modern obfuscator är ett komplext programpaket. Ofta, trots noggrann design och testning , kryper buggar in i obfuscators. Så det finns en chans som inte är noll att koden som passeras genom obfuscatorn inte kommer att fungera alls. Och ju mer komplext programmet som utvecklas, desto större är sannolikheten.

Ringa en klass vid namn

De flesta mellankodspråk kan skapa eller anropa objekt efter deras klassnamn . Moderna obfuscatorer låter dig rädda dessa klasser från att byta namn, men sådana begränsningar minskar programmens flexibilitet.

Se även

Anteckningar

  1. I det här fallet kan det kallas minifiering
  2. 10.2. Metoder för att kontrollera registreringskoder . www.rfcmd.ru Hämtad 2 februari 2016. Arkiverad från originalet 12 december 2016.

Litteratur

  • Boytsev O. M. Skydda din dator till 100 % från virus och hackare. - Peter, 2008. - ISBN 9785388003478 .

Länkar