Tilsløring (software)

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 10. februar 2019; checks kræver 19 redigeringer .

Obfuscation (fra latin  obfuscare  - at obscure, obscure; og engelsk  obfuscate  - at gøre ikke-oplagt, forvirrende, forvirrende) eller kode obfuscation  - bringer kildekoden eller den eksekverbare kode for programmet til en form, der bevarer dets funktionalitet, men gør det vanskeligt at analysere, forstå algoritmerne for arbejde og modifikation under dekompilering .

"Obfuscing" af koden kan udføres både på niveau med navne på programkomponenter og på niveau med programalgoritmer . For at skabe sløret assembler-tekst kan der bruges specialiserede kompilatorer , der bruger ikke-oplagte eller udokumenterede funktioner i programafviklingsmiljøet . Der er også specielle programmer, der producerer obfuscation, kaldet obfuscators ( eng.  obfuscator ).

Obfuskationsmål

Besvær med at dekompilere / fejlfinde og undersøge programmer for at opdage funktionalitet;

Vanskeligheder ved at dekompilere proprietær software for at forhindre reverse engineering eller omgåelse af DRM- og licensverifikationssystemer ;

svært ved at knække software ;

Optimering af programmet for at reducere størrelsen af ​​den kørende kode og (hvis der anvendes et ikke- kompileret sprog) for at fremskynde arbejdet;

Demonstration af sprogets ikke-indlysende muligheder og programmørens kvalifikationer (hvis det gøres manuelt og ikke med værktøjer);

Teknologi

På kildeniveau

I JavaScript , VBScript og lignende scriptsprog er programmets kildekode tilgængelig for brugeren . I dette tilfælde kan formatering af teksten og udskiftning af navne gøre teksten mindre læsbar.

Kildetekst på C -sprog :

int COUNT = 100 ; float TAX_RATE = 0,2 ; for ( int i = 0 ; i < ANTAL ; i ++ ) { skat [ i ] = original_pris [ i ] * TAX_RATE ; pris [ i ] = originalpris [ i ] + moms [ i ]; }

Kode efter sløring [1] :

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

Mere komplekst eksempel:

char * M , A , Z , E = 40 , J [ 40 ], T [ 40 ]; main ( C ){ for ( * J = A = scanf ( M = "%d" , & C ); --E ; _ J [ E ] = T [ E ] = E ) printf ( "._" ); for (;( 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å maskinkodeniveauet

Som regel reducerer tilsløring på maskinkodeniveau hastigheden af ​​eksekveringen og øger følgelig programmets eksekveringstid. Derfor bruges den på sikkerhedskritiske , men ikke hastighedskritiske steder i programmet, såsom kontrol af registreringskoden [2] .

Den enkleste måde at sløre maskinkode  på er at indsætte inaktive konstruktioner i den (såsom or ax, ax).

På det mellemliggende kodeniveau

I modsætning til konventionelle programmeringssprog som C++ eller Pascal , der kompilerer til maskinkode , kompilerer Java-sproget , NetP og .NET platformsprogene kildekode til mellemkode ( bytecode ), der indeholder nok information til at rekonstruere kildekoden tilstrækkeligt. Af denne grund bruges mellemkodeobfuskation for disse sprog.

Udnævnelse

Komplicerer kodeforskning

Som nævnt ovenfor er det ret nemt at dekompilere Java- og .NET-programmer. I dette tilfælde giver obfuscatoren uvurderlig hjælp til dem, der ønsker at skjule deres kode fra nysgerrige øjne. Ofte, efter sløring, bliver den dekompilerede kode ikke genkompileret.

HTML - obfuskation hjælper spammere : på en e-mail-klient , der er i stand til at vise HTML, læses teksten, men anti-spam-filteret , som behandler den originale HTML-fil, sender den uønskede besked uden at genkende den forbudte linje i den.

Det enkleste eksempel på sløret HTML:

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

Ved visning vil brugeren se ordet " Machine ", mens det i kildekoden er dissekeret og opfattet som to separate ord.

Optimering

fortolkede sprog fylder sløret kode mindre end kildekoden og kører ofte hurtigere end kildekoden. Moderne obfuscatorer erstatter også konstanter med tal, optimerer array -initialiseringskode og udfører andre optimeringer, der er problematiske eller umulige på kildeniveau.

Problemet med størrelsesreduktion er vigtigt, for eksempel ved programmering til mobiltelefoner i J2ME , hvor størrelsen af ​​programmet er stærkt begrænset. JavaScript-obfuskation reducerer størrelsen af ​​HTML- filer og fremskynder dermed indlæsningen.

Beskyttelse af proprietær software

Beskyttelse af kildekoden mod at blive redigeret for profit.

Ulemper

Tab af kodefleksibilitet

Obfuskationskode kan blive mere platform- eller compilerafhængig.

Fejlretningsproblemer _

Obfuscatoren forhindrer en udenforstående i at finde ud af, hvad koden laver, men forhindrer også udvikleren i at fejlsøge den. Ved fejlfinding skal du slukke for obfuscatoren.

Utilstrækkelig sikkerhed

Selvom sløring hjælper med at gøre et distribueret system mere sikkert, bør det ikke være begrænset til det. Tilsløring er sikkerhed gennem uklarhed . Ingen af ​​de eksisterende obfuscatorer garanterer kompleksiteten af ​​dekompilering og giver ikke sikkerhed på niveau med moderne kryptografiske ordninger. Det er ret sandsynligt, at effektiv beskyttelse er umulig (i det mindste i en bestemt klasse af problemer, der skal løses).

Fejl i obfuscators

En moderne obfuscator er en kompleks softwarepakke. På trods af omhyggeligt design og test , kryber fejl ofte ind i obfuscatorer. Så der er en ikke-nul chance for, at koden, der føres gennem obfuscatoren, slet ikke virker. Og jo mere komplekst programmet er under udvikling, jo større er denne sandsynlighed.

At kalde en klasse ved navn

De fleste mellemkodesprog kan oprette eller kalde objekter ved deres klassenavne . Moderne obfuscatorer giver dig mulighed for at redde disse klasser fra at omdøbe, men sådanne begrænsninger reducerer programmernes fleksibilitet.

Se også

Noter

  1. I dette tilfælde kan det kaldes minifikation
  2. 10.2. Metoder til kontrol af registreringskoder . www.rfcmd.ru Hentet 2. februar 2016. Arkiveret fra originalen 12. december 2016.

Litteratur

  • Boytsev O. M. Beskyt din computer 100% mod virus og hackere. - Peter, 2008. - ISBN 9785388003478 .

Links