Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; w $zmienne są oryginalne nazwy zmiennych
- ; w $zmienne2 są nowe, losowe nazwy tych zmiennych
- global $zmienne[1]
- global $zmienne2[1]
- ; dodaje starą i nową nazwę zmiennej do tablic
- func __AddVar($_SO,$_SO2)
- for $i = 0 to UBound($zmienne) -1
- if $zmienne[$i] = "" then
- $zmienne[$i]=$_SO
- $zmienne2[$i]=$_SO2
- return 0
- EndIf
- Next
- ; powiekszanie tablic
- $bo = UBound($zmienne)
- ReDim $zmienne[$bo+1]
- $zmienne[$bo] = $_SO
- ReDim $zmienne2[$bo+1]
- $zmienne2[$bo] = $_SO2
- EndFunc
- ; usuwa zmienną
- ; wlasciwie tutaj niepotrzebne ale moze byc przydatne przy innym zastosowaniu dynamicznych tablic
- func __DelVar($_SO)
- for $i = 0 to UBound($zmienne) -1
- if $zmienne[$i] = $_SO then $zmienne[$i]=""
- Next
- EndFunc
- ; sprawdza czy zmienna już istnieje w tablicy
- func __VarExists($_SO)
- for $i = 0 to UBound($zmienne) -1
- if $zmienne[$i] = $_SO then return true
- Next
- return false
- EndFunc
- ; zwraca nową (losową) nazwę przyporządkowaną do starej nazwy zmiennej
- func __VarName($_SO)
- for $i = 0 to UBound($zmienne) -1
- if $zmienne[$i] = $_SO then return $zmienne2[$i]
- Next
- return -1
- endfunc
- ; wstawia string do stringa w miejsce ($iPOS)
- func __StringInsert($sSTRING, $iPOS, $sNEW)
- return StringMid($sSTRING,1,$iPOS) & $sNEW & StringMid($sSTRING,$iPOS+1,stringlen($sSTRING)-$iPOS+1)
- endfunc
- ; usuwa z stringa ($iLEN) liter od pozycji ($iPOS)
- func __StringCut($sSTRING, $iPOS, $iLEN)
- return StringMid($sSTRING,1,$iPOS) & StringMid($sSTRING,$iPOS+1+$iLEN,stringlen($sSTRING)-$iPOS+1-$iLEN)
- endfunc
- ; usuwa z stringa ($iLEN) liter od pozycji ($iPOS) i wstawia tam string ($sNEW)
- func __StringReplace($sSTRING, $iPOS, $iLEN, $sNEW)
- return __StringInsert(__StringCut($sSTRING, $iPOS, $iLEN),$iPOS,$sNEW)
- endfunc
- ; sprawdza czy znak nie może znajdować się w nazwie zmiennej
- func __CharCheck($sCHAR)
- return not ((asc($sCHAR) >= asc("a")) and (asc($sCHAR) <= asc("z"))) or _
- ((asc($sCHAR) >= asc("A")) and (asc($sCHAR) <= asc("Z"))) or _
- ((asc($sCHAR) >= asc("0")) and (asc($sCHAR) <= asc("9"))) or _
- (asc($sCHAR) == asc("_"))
- endfunc
- ; generuje losowy string o dlugosci ($iLEN)
- func __RandomString($iLEN)
- local $i, $r
- local $s = ""
- for $i = 1 to $iLEN
- $r = random(1,3,1)
- if $r = 1 then $s &= chr(random(asc("a"),asc("z"),1))
- if $r = 2 then $s &= chr(random(asc("A"),asc("Z"),1))
- if $r = 3 then $s &= chr(random(asc("0"),asc("9"),1))
- next
- return $s
- endfunc
- func booltostring($b)
- if ($b) then
- return "true"
- else
- return "false"
- endif
- endfunc
- ; parsuje tekst i podmienia nazwy zmiennych
- func parse($_s)
- ; kopia parametru $s (w sumie nie wiem czy to potrzebne)
- local $s = $_s
- ; $x to aktualny znak z pliku
- local $x = 0
- ; czy aktualny znak jest w komentarzu (po średniku)
- local $bCOMMENT = False
- ; czy znak jest w stringu (pomiędzy ' i ')
- local $bQUOTE = False
- ; czy znak jest w stringu (pomiędzy " i ")
- local $bDQUOTE = False
- While($x<stringlen($s))
- msgbox(0,StringMid($s,$x,1),"C: "&booltostring($bCOMMENT)&", Q: "&booltostring($bQUOTE)&", D: "&booltostring($bDQUOTE))
- ; jeśli znak jest średnikiem, to rozpoczyna się komentarz
- ; omijamy resztę pętli jeśli tak jest i ustawiamy $bCOMMENT
- ; przy okazji trzeba sprawdzic czy ten srednik nie znajduje się w jakimś stringu
- if (not $bQUOTE) and (not $bDQUOTE) and (StringMid($s,$x,1) = ";") then
- $bCOMMENT = True
- $x+=1
- ContinueLoop
- EndIf
- ; jeśli znak jest cudzysłowiem, to znaczy że rozpoczyna lub kończy się string
- if (not $bCOMMENT) and (not $bQUOTE) and (StringMid($s,$x,1) = '"') then
- $bDQUOTE = not $bDQUOTE
- $x+=1
- ContinueLoop
- EndIf
- ; jeśli znak jest apostrofem to tak samo
- if (not $bCOMMENT) and (not $bDQUOTE) and (StringMid($s,$x,1) = "'") then
- $bQUOTE = not $bQUOTE
- $x+=1
- ContinueLoop
- EndIf
- ; jeśli znak jest znakiem nowej linii, to komentarz się kończy
- if (StringMid($s,$x,1) = chr(10)) or (StringMid($s,$x,1) = chr(13)) then
- $bCOMMENT = false
- $x+=1
- ContinueLoop
- EndIf
- ; jeśli aktualnie nie jesteśmy w komentarzu lub stringu
- if (not $bCOMMENT) and (not $bQUOTE) and (not $bDQUOTE) Then
- ; czy aktualny znak to początek nazwy zmiennej ($)
- if StringMid($s,$x,1) = '$' Then
- ; zmienne tymczasowe
- local $bTEMP = true
- local $y = 1
- local $varname = ""
- ; odczytujemy kolejne litery nazwy zmiennej do $varname
- while ($bTEMP)
- if __CharCheck(stringmid($s,$x+$y,1)) then
- $bTEMP = False
- ExitLoop
- EndIf
- $varname &= stringmid($s,$x+$y,1)
- $y+=1
- WEnd
- ; jeśli zmienna jest już w tablicy
- ; to zamieniamy ją na jej nową nazwę
- if __VarExists($varname) Then
- $s = __StringReplace($s,$x,stringlen($varname),__VarName($varname))
- $x += stringlen(__VarName($varname)) - stringlen($varname)
- ; jeśli nie to napierw nazwę generujemy a potem ją zamieniamy
- Else
- __AddVar($varname,__RandomString(random(15,30,1))) ;random
- $s = __StringReplace($s,$x,stringlen($varname),__VarName($varname))
- $x += stringlen(__VarName($varname)) - stringlen($varname)
- EndIf
- EndIf
- EndIf
- $x+=1
- WEnd
- return $s
- EndFunc
- ; te zmienne są macrami, więc ich nazwy nie powinny być zmieniane
- __AddVar("CmdLine","CmdLine")
- __AddVar("CmdLineRaw","CmdLineRaw")
- ; odczytanie pliku z commandline i zparsowanie go do nazwa_obf.au3
- if ($CmdLine[0]>0) Then
- local $f = FileOpen($CmdLine[1],0)
- local $s = fileread($f)
- fileclose($f)
- if ($s<>'') Then
- $s = parse($s)
- $f = FileOpen($CmdLine[1]&'_obf.au3',2)
- FileWrite($f,$s)
- fileclose($f)
- endif
- EndIf
Advertisement
Add Comment
Please, Sign In to add comment