beskyt din flash filer fra decompilers gennem brug af kryptering

, beskytte din flash filer fra decompilers gennem brug af kryptering,,,,, 4,,,,,,,,, 10,,,,,,, det cyber - mandag envato tuts + kurser vil blive reduceret til $3.- og' t miss.,,, to gange om måneden, kan vi se på nogle af vores læsere favorit stillinger fra hele historien om activetuts +.denne pædagogiske først blev offentliggjort i februar 2010,.,,,, i denne forelæsning vil jeg demonstrere en teknik, jeg har brug for at beskytte koden og aktiver fra tyveri.,,, decompilers er en reel bekymring for folk, der skaber flash indhold.du har gjort en stor indsats for at skabe de bedste spil derude, så kan nogen stjæle det, erstatte det logo, og læg det på deres område uden at spørge dig.hvordan?ved hjælp af en flash decompiler.medmindre du har en vis beskyttelse over din omvendt kan det være har med et tryk på en knap, og decompiler vil produktionen læsbare kildekode.,, før vi begynder, jeg brugte en lille projekt jeg for at vise, hvor sårbare statsejede investeringsfonde er at dekompilering.du kan downloade og teste dig selv via kilde led ovenfor.jeg plejede sothink stg decompiler 5 til decompile det omvendt og se under den hjelm.koden er læselig, og du kan forstå og genanvende det forholdsvis nemt, hvad kan vi gøre ved det?jeg kom op med en teknik til at beskytte statsejede investeringsfonde fra decompilers og jeg vil bevise det i denne forelæsning.vi bør være i stand til at producere dette:,, den kode, der er har faktisk er koden til at kryptere indhold og har intet at gøre med din vigtigste kode.desuden er de navne, der er ulovlige, så den ikke udarbejde tilbage.prøv at decompile det selv, før vi går videre, vil jeg gerne påpege, at denne lektion er ikke egnet til begyndere, og du burde have solid viden om as3, hvis du vil følge efter.denne lektion handler også om lavt niveau, programmering, der involverer bytes, bytearrays og manipulere stg filer med en forbandelse redaktør. her er, hvad vi har brug for en til at beskytte, og omvendt. du kan downloade stg, jeg arbejdede på.,, flex sdk. vi vil bruge den til at integrere indhold ved hjælp af den omfatter et.du kan downloade fra opensource. adobe. kom.,, en forbandelse redaktør. jeg skal bruge en fri redaktør ringede hex-ed. du kan downloade fra nielshorn.net, eller du kan bruge en redaktør af dit valg, en decompiler., selv om de ikke er nødvendige, ville det være rart at kontrollere, om vores beskyttelse rent faktisk fungerer,.du kan få en undersøgelse af sothink stg decompiler fra sothink.com, trin 1: belastning og omvendt på runtime, åbne et nyt actionscript 3,0 - projektet, og sæt den til at udarbejde med flex sdk (i brug flashdevelop skrive kode).vælg en omvendt, du ønsker at beskytte og styrke det binære data ved hjælp af omfatter tag:,, [omfatter (kilde: "verletcloth. stg" mimetype - = "anvendelse /oktet stream")] //kilde = vej til stg, du ønsker at beskytte private var indhold: klasse; omvendt, nu er indbyggede som, bytearray, i lader og omvendt, og det kan lastes gennem skovl. loadbytes(),., var at lade: lad = nye loader(); addchild (lad); at lade. loadbytes (nye content(), nye loadercontext (falsk, nye applicationdomain())); i sidste ende skal vi have denne kode:, pakke (import flash.display.loader; import flash.display.sprite; import flash.system.applicationdomain; import flash.system.loadercontext; [stg (bredde = 640 højde = //den dimension 423)]der bør være samme som ladt stg offentlige klasse vigtigste udvider sprite {[omfatter (kilde: "verletcloth. stg" mimetype - = "anvendelse /oktet stream")] //kilde = vej til stg, du ønsker at beskytte private var indhold: klasse; offentlig funktion main(): ugyldig (var - anordninger: anordninger = nye loader(); addchild (lad); at lade. loadbytes (nye content(), nye loadercontext (falsk, nye applicationdomain())}}}, samle og se om det virker (skal).fra nu af vil jeg kalde det indbyggede stg "beskyttede stg", og vi har udarbejdet en "omvendt - stg.,, trin 2: analysere resultatet, lad os prøve at decompile og se om det virker. - fedt!aktiver og den oprindelige kode er væk!det er vist nu er den kode, der indlæser beskyttede stg og ikke dens indhold.det ville sikkert ikke i de fleste af de nye angreb, som ikke er bekendt med - - men det er stadig ikke godt nok til at beskytte deres arbejde fra kvalificerede angribere, fordi de beskyttede stg venter dem uberørt i lastning stg.,, trin 3: klemmes det omvendt, lad os åbne lastning og omvendt med en forbandelse redaktør:, bør det ligner tilfældige binære data, fordi det er presset, og det skal begynde med ascii - "cws".vi er nødt til at slappe af.(hvis deres stg begynder med "fws", og du ser meningsfuld tråde i omvendt er det sandsynligt, at det fik ikke komprimeret.du skal gøre det muligt for motorer til følge). først det lyder svært, men det er det ikke.den stg format er et åbent format, og der er et dokument, der beskriver det.download det fra adobe.com og rulle ned på side 25 i dokumentet.der er en beskrivelse af de kampe, og hvordan den omvendt er komprimeret, så kan vi pakker alt ud det let. hvad står der, at de første 3 bytes er en underskrift (cws eller fws), den næste byte er flash - version, de næste 4 bytes er størrelsen af og omvendt.de resterende er komprimeret, hvis underskrift er cws eller ukomprimerede, hvis underskrift er fws.lad os skrive en enkel opgave at slappe af en omvendt:, privat funktion dekompresse (data: bytearray): bytearray {var overskrift: bytearray = nye bytearray(); var komprimeret: bytearray = nye bytearray(), var decompressed: bytearray = nye bytearray(); header. writebytes (data, 3, 5): //læse den usammenpressede header bortset fra undertegnelsen komprimeret. writebytes (data, 8); //læse resten, komprimeret komprimeret. uncompress(); decompressed. writemultibyte ("fws", "os ascii -"); //mark som sammenpressede decompressed. writebytes (header); //skrive hovedet tilbage decompressed. writebytes (komprimeret) /skriv nu ikke sammenpressede indhold tilbage decompressed;}, funktion er et par ting, læs:den usammenpressede header (de første 8 bytes) uden underskrift og husker det. det lyder resten af data og uncompresses., det skriver tilbage hovedet (med "fws" underskrift) og den usammenpressede data, at skabe en ny, sammenpressede stg.,, trin 4: at skabe et forsyningsselskab, næste gang vil vi skabe en praktisk anvendelighed i flash til at komprimere og klemmes stg filer.i en ny as3 projekt, opstille følgende kategori som et dokument, klasse:, pakke (import flash.display.sprite; import flash.events.event; import flash.net.filefilter; import flash.net.filereference; import flash.utils.bytearray; offentlige klasse kompressor udvider sprite (private var - ref: filereference; offentlig funktion compressor() {ref = nye filereference(); ref.addeventlistener (event.select, belastning); ref.browse ([nye filefilter ("stg files", "*. stg")]);} privat funktion belastning (e: begivenhed): ugyldig (ref.addeventlistener (event.complete, processswf); ref. load();}privat funktion processswf e: begivenhed): ugyldig (var - og omvendt: bytearray; skift (ref.data. readmultibyte (3, "os ascii -") ("cws": stg = dekompresse (ref.data); bryde; sag "fws": stg = kompres (ref.data); bryde; default: smid fejl ("ikke omvendt..."); pause.} nye filereference(). redde (og omvendt)} privat funktion kompres (data: bytearray): bytearray {var overskrift: bytearray = nye bytearray(), var decompressed: bytearray= nye bytearray(); var komprimeret: bytearray = nye bytearray(); header. writebytes (data, 3, 5): //læse overskriften, bortset fra undertegnelsen decompressed. writebytes (data, 8); //læse resten decompressed. compress(); komprimeret. writemultibyte ("cws", "os ascii -"); //mark, som komprimeret komprimeret. writebytes (header); komprimeret. writebytes (decompressed); tilbage komprimeret;} privat funktion dekompresse (data: bytearray): bytearray {var overskrift: bytearray = nye bytearray(); var komprimeret: bytearray = nye bytearray() var d.ecompressed: bytearray = nye bytearray(); header. writebytes (data, 3, 5): //læse den usammenpressede header, undtagen underskrift komprimeret. writebytes (data, 8); //læse resten, komprimeret komprimeret. uncompress(); decompressed. writemultibyte ("fws", "os ascii -"); ////////mark som sammenpressede decompressed. writebytes (header); //skrive hovedet tilbage decompressed. writebytes (komprimeret); //skriver nu usammenpressede indhold tilbage decompressed;}}}, som du sikkert har bemærket, har jeg tilføjet to ting: fil - og komprimering af funktion., omslag funktion er identisk med forrådnelsenress - systemet fungerer, men i bakgear.filen lastningen er færdig med filereference (fp10 nødvendigt) og ladt fil er komprimeret eller ukomprimerede.bemærk, at du skal løbe stg lokalt fra en uafhængig aktør, som filereference. browse(), skal påberåbes af interaktion med brugeren (men de lokale enkeltstående aktør mulighed for at køre uden).,, løntrin 5: uncompressing lastning og omvendt, at afprøve værktøjet, fyr op, udvælge lastning og omvendt og vælge - for at redde den.luk den op med en forbandelse redaktør og skrubbe af.du skulle se ascii - tråde indenfor sådan her:,, trin 6: analysere igen, lad os vende tilbage til trin 2.mens decompiler ikke viser nogen nyttig information om beskyttede og omvendt, er det nemt at få stg fra nu usammenpressede lader bare finde den underskrift, cws "(hvis den beskyttede stg er usammenpressede søgen efter" fws ") og se resultaterne:,, hvad vi har fundet en, der definebinarydata indeholder den beskyttede og omvendt, og at der dér er et stykke kage.vi er ved at tilføje endnu et lag af beskyttelse i lastning og omvendt: kryptering.,, trin 7: kryptering for at gøre den beskyttede stg mindre "adgang" vil vi tilføje en form for kryptering.jeg valgte at bruge as3crypto og du kan downloade fra code.google.com.du kan bruge et bibliotek, du vil i stedet (eller deres egen gennemførelse, endnu bedre, det eneste krav er, at det bør være i stand til at kryptere og dekryptere binære data ved hjælp af en nøgle.,, trin 8: kryptering data, den første ting, vi ønsker, er at skrive en service til at kryptere den beskyttede stg, før vi integrere det.det kræver meget grundlæggende kendskab til as3crypto biblioteks - og det er ret ligetil.tilføj biblioteket i dit bibliotek vej, og lad os begynde med at skrive følgende:, var bivirkninger: aeskey = nye aeskey (binkey) var bytestoencrypt: int = (data.length & § 15); //sørge for, at det kan blive delt med 16, 0 - de sidste fire bytes til (var - jeg: int = 0. jeg < bytestoencrypt; jeg + = 16) aes. kryptering (data, jeg), hvad foregår der her?vi bruger en time fra as3crypto ringede aeskey til kryptering af indholdet.klasse encrypts 16 bytes i en tid (128 - bit), og vi skal til sløjfe over data til kryptering af det hele.note 2: data.length & § 15.det er sikker på, at det antal bytes krypteret kan deles med 16, og at vi ikke løber tør for data, når de ringer, røv. encrypt(),.,, note: det er vigtigt at forstå meningen med kryptering i denne sag.det er ikke rigtig kryptering, men snarere forvirring, da vi er nøglen i stg.formålet er at gøre dataene til binære sludder, og kode ovenfor ikke er arbejde, selv om det kan gå op til 15 ukrypteret bytes (hvilket betyder ikke noget i vores tilfælde).jeg er ikke kun kryptograf, og jeg er helt sikker på, at denne kodeks kunne se og for svagt fra kun kryptograf perspektiv, men som jeg sagde, det er helt irrelevant, da vi medtager de vigtigste i stg.,, trin 9: kryptering nytteværdi, tid til at skabe en anden værdi, som vil hjælpe os kryptere stg filer.det er næsten det samme som kompressoren, skabte vi tidligere, så jeg vil ikke tale om det.udarbejde det i et nyt projekt, som et dokument, klasse:, pakke (import com.hurlant.crypto.symmetric.aeskey; import flash.display.sprite; import flash.events.event; import flash.net.filereference; import flash.utils.bytearray; offentlige klasse encryptor udvider sprite (private var centrale: string = "activetuts"; //- hardcoded de vigtigste private var - ref: filereference; offentlig funktion encryptor() {ref = ny filereference(); ref.addeventlistener (event.select, belastning); ref. browse();} privat funktion belastning (e: begivenhed): ugyldig (ref.addeventlistener (event.complete, kryptering) erf. load();} privat funktion kryptere e: begivenhed): ugyldig (var - data: bytearray = ref.data, var binkey: bytearray = nye bytearray(); binkey. writeutf (centrale); //aeskey kræver binære nøgle var bivirkninger: aeskey = nye aeskey (binkey) var bytestoencrypt: int = (data.length &. - 15); //sørge for, at det kan deles med 16, 0 de sidste fire bytes til (var - jeg: int = 0. jeg < bytestoencrypt; jeg + = 16) aes. kryptering (data, i); nye filereference(). redde (data)}}}, løb det, og gøre en krypteret kopi af beskyttede stg ved at vælge den først og så redderdet under et andet navn.,, trin 10: ændring af den platform, vende tilbage til lastning stg - projektet.da indholdet er krypteret, vi er nødt til at ændre lastning og omvendt, og der tilsættes dekryptering kode ind i det.glem ikke at ændre src i omfatter et punkt til krypterede stg., pakke (import com.hurlant.crypto.symmetric.aeskey; import flash.display.loader; import flash.display.sprite; import flash.system.applicationdomain; import flash.system.loadercontext; import flash.utils.bytearray; [stg (bredde = 640, højde = 423)] //dimensioner skal være det samme som den ladt stg er offentlige klasse vigtigste udvider sprite {[omfatter (kilde: "verletclothen. stg" mimetype - = "anvendelse /oktet stream")] //kilde = vej til stg, du ønsker at beskytte private var indhold: klasse; private var centrale: string = "activetuts" offentlig funktion main(): ugyldig (var - data: bytearray = nye content(), var binkey: bytearray = nye bytearray(); binkey. writeutf (centrale); //aeskey kræver binære nøgle var bivirkninger: aeskey = nye aeskey (binkey) var bytestodecrypt: int = (data.length & § 15); //sørge for, at det kan divideres med 16 nul de sidste fire bytes til (var - jeg: int = 0. jeg < bytestodecrypt; jeg + = 16) aes. dekryptere (data, i) var at lade: rampe = nye loader(); addchild (lad); at lade. loadbytes (data, ny loadercontext (falsk, nye applicationdomain())}}}, det er det samme som før, undtagen med dekryptereion - kode fanget i midten.nu samler lastning og omvendt og test, hvis det virker.hvis du følger nøje op til det beskyttede stg bør belastning og udstilling uden fejl.,, trin 11: se ind, ved hjælp af en decompiler, åbne nye lastning og omvendt med en decompiler og se. det er over tusind linjer af hård efter koden, og det er nok sværere at få beskyttede stg ud af det.vi har tilføjet et par skridt han forpligter sig til, at han eller hun er at finde definebinarydata, der holder den krypterede indhold og udvinde det. han skal skabe en service til at afkode det., er problemet, at skabe en nytteværdi er så enkelt som kopi slaget fra decompiler i kodeksen redaktør og den kode, en lille smule.jeg prøvede at bryde min beskyttelse, og det var nemt - det lykkedes at gøre det om 5 minutter.så vi er nødt til at tage nogle målinger mod.,, trin 12: string obskurantismen, vi ville sætte den beskyttede stg til lastning og omvendt, så krypteret, og nu skal vi lægge sidste hånd på lastning og omvendt.vi vil kalde klasser, funktioner og variabler til ulovlig navne. ved at sige, ulovlig navne, jeg mener navne, f.eks.!vi si 'r, ^&#^ og ^ _ ^).det gode er, at det forhold, at de ansvarlige, men ikke til flash - spiller.når de støder på ulovlig tegn indenfor identifikatorer, men undlader at analysere dem og dermed projektet undlader at udarbejde.på den anden side er den aktør, ikke har nogen problemer med disse ulovlige navne.vi kan samle stg med juridiske identifikatorer, dekomprimere og kalde dem en masse meningsløse ulovlige symboler.den decompiler vil produktionen ulovlig kode, og han bliver nødt til at gå ud over de hundredvis af linjer kode manuelt, fjerne ulovlige identifikatorer, før han kan samle det.han fortjener det!dette er, hvordan det ser ud, før nogen streng formørkelse:,, lad os starte!- og omvendt ved hjælp af nytte slappe af vi skabte før og fyre en hex redaktør.,, trin 13: din første obskurantismen, lad os prøve at omdøbe det dokument, klasse.hvis du har forladt den oprindelige navn (primære), lad os finde den i den usammenpressede pålæsser stg med en forbandelse redaktør:,, omdøbe "primære";;.,.nu søger andre "primære" s og kalde dem,;;,,.,, når omdøbe sørg for ikke at omdøbe unødvendigt strenge eller omvendt vil ikke løbe.,, redde og køre og omvendt.det virker!og se, hvad de decompiler siger:,, sejr!.:), punkt 14: at omdøbe resten af klasser, hold at omdøbe resten af dine klasser.vælg en klasse navn og lede efter den, at erstatte det med ulovlige symboler, indtil du når til slutningen af den fil.som jeg sagde, er det vigtigste, at bruge deres sunde fornuft, og sørg for ikke at ødelægge din stg.efter at omdøbe de klasser, du kan begynde at omdøbe de pakker.bemærker, at når omdøbe en pakke, du kan slette den perioder for og gøre det til et længe ulovlige pakke navn.se, hvad jeg har lavet:,, når du er færdig med at omdøbe de klasser og pakker, du kan begynde at omdøbe funktioner og variabler.de er endnu nemmere at omdøbe, som de normalt anføres kun én gang i en stor sky.en gang til, så du omdøbe "dit" metoder og ikke den indbyggede flash metoder.sørg for ikke at udslette den centrale ("activetuts" i vores tilfælde), trin 15: sammenpresser stg, når du er færdig med at omdøbe, ville du nok vil sammenpresser stg, så det vil blive mindre.intet problem, vi kan bruge til at presse anvendelighed skabte vi før, og det vil gøre arbejdet.løb den nytte, udvælge og omvendt, og redde det under et andet navn,.,, konklusion: en endelig se, åbner det en sidste gang, - - og se.de klasser, de variabler og metode navne er uforståelig og beskyttede stg er indenfor, krypteret.denne teknik kan være langsomt til anvendelse i starten, men efter et par gange, det tager kun et par minutter. for nogen tid siden skabte jeg en automatisk nytte at injicere den beskyttede stg for mig til lastning og omvendt, og det virkede.det eneste problem er, at hvis det kan injiceres ved brug af en automatisk nytte, kan det være adskilt ved hjælp af en anden værdi, så hvis han gør en nytteværdi for, at han vil få alle dine stg let.jeg foretrækker at beskytte de statsejede investeringsfonde manuelt, hver gang, ved at tilføje en lille ændring, så ville det være sværere at automatisere. en god anvendelse af teknikken, er låst.i stedet for at afkode den stg med en konstant snor du kan afkode det med område og omvendt, er på nuværende tidspunkt.så i stedet for at have en hvis erklæring til at kontrollere domæne, kan man indføre en mere effektiv måde at beskytte stg fra placering på andre områder. en sidste ting, du måske ønsker at erstatte koden med deres egen gennemførelse.hvorfor?vi har investeret bestræbelser på at skabe krypto - kode ulovligt, men den kode, vi bruger, er en populær open source - bibliotek, og han kunne genkende det som sådan.han vil downloade en ren kopi, og alle forvirringer arbejde er unødvendig.på den anden side at bruge din egen gennemførelse vil kræve ham til at ordne alle de ulovlige navne, før han kan fortsætte.,, andre beskyttelsesmetoder, fordi stg tyveri er et stort problem i flash verden, er der andre muligheder for beskyttelse af statsejede investeringsfonde.der er adskillige programmer ud på at forvirre, som på bytecode niveau (som kindisoft er secureswf).de ødelægger de indsamlede bytecode, og når decompiler forsøg på at output - kode vil mislykkes, og endog sove indimellem.naturligvis er denne beskyttelse er bedre med hensyn til sikkerhed, men det koster $, så før valget om at beskytte din stg overveje størrelsen af den nødvendige sikkerhed.hvis det handler om at beskytte et proprietært algoritme dine 50 ansatte flash - studie har udviklet sig i de sidste to år, kan du overveje noget bedre end at omdøbe de variabler.på den anden side, hvis man ønsker at forhindre, at børn fra at afgive falske høje karakterer kan overveje at anvende denne teknik.,, hvad jeg kan lide ved denne metode er, at deres beskyttede stg er urørt, når de gennemføres.som formørkelse svindler med byte - kode, og det kunne skade det omvendt og forårsage insekter (selv om jeg ikke har set nogen selv. det var alt for i dag, jeg håber, du nød den pædagogiske og lærte noget nyt!hvis du har spørgsmål, føle sig fri til at smide en kommentar.



















Previous:
Next Page: