SHOW:
|
|
- or go back to the newest paste.
| 1 | ; w $zmienne są oryginalne nazwy zmiennych | |
| 2 | ; w $zmienne2 są nowe, losowe nazwy tych zmiennych | |
| 3 | global $zmienne[1] | |
| 4 | global $zmienne2[1] | |
| 5 | ||
| 6 | ; dodaje starą i nową nazwę zmiennej do tablic | |
| 7 | func __AddVar($_SO,$_SO2) | |
| 8 | for $i = 0 to UBound($zmienne) -1 | |
| 9 | if $zmienne[$i] = "" then | |
| 10 | $zmienne[$i]=$_SO | |
| 11 | $zmienne2[$i]=$_SO2 | |
| 12 | return 0 | |
| 13 | EndIf | |
| 14 | Next | |
| 15 | ||
| 16 | ; powiekszanie tablic | |
| 17 | $bo = UBound($zmienne) | |
| 18 | ReDim $zmienne[$bo+1] | |
| 19 | $zmienne[$bo] = $_SO | |
| 20 | ||
| 21 | ReDim $zmienne2[$bo+1] | |
| 22 | $zmienne2[$bo] = $_SO2 | |
| 23 | EndFunc | |
| 24 | ||
| 25 | ; usuwa zmienną | |
| 26 | ; wlasciwie tutaj niepotrzebne ale moze byc przydatne przy innym zastosowaniu dynamicznych tablic | |
| 27 | func __DelVar($_SO) | |
| 28 | for $i = 0 to UBound($zmienne) -1 | |
| 29 | if $zmienne[$i] = $_SO then $zmienne[$i]="" | |
| 30 | Next | |
| 31 | EndFunc | |
| 32 | ||
| 33 | ; sprawdza czy zmienna już istnieje w tablicy | |
| 34 | func __VarExists($_SO) | |
| 35 | for $i = 0 to UBound($zmienne) -1 | |
| 36 | if $zmienne[$i] = $_SO then return true | |
| 37 | Next | |
| 38 | return false | |
| 39 | EndFunc | |
| 40 | ||
| 41 | ; zwraca nową (losową) nazwę przyporządkowaną do starej nazwy zmiennej | |
| 42 | func __VarName($_SO) | |
| 43 | for $i = 0 to UBound($zmienne) -1 | |
| 44 | if $zmienne[$i] = $_SO then return $zmienne2[$i] | |
| 45 | Next | |
| 46 | return -1 | |
| 47 | endfunc | |
| 48 | ||
| 49 | ; wstawia string do stringa w miejsce ($iPOS) | |
| 50 | func __StringInsert($sSTRING, $iPOS, $sNEW) | |
| 51 | return StringMid($sSTRING,1,$iPOS) & $sNEW & StringMid($sSTRING,$iPOS+1,stringlen($sSTRING)-$iPOS+1) | |
| 52 | endfunc | |
| 53 | ||
| 54 | ; usuwa z stringa ($iLEN) liter od pozycji ($iPOS) | |
| 55 | func __StringCut($sSTRING, $iPOS, $iLEN) | |
| 56 | return StringMid($sSTRING,1,$iPOS) & StringMid($sSTRING,$iPOS+1+$iLEN,stringlen($sSTRING)-$iPOS+1-$iLEN) | |
| 57 | endfunc | |
| 58 | ||
| 59 | ; usuwa z stringa ($iLEN) liter od pozycji ($iPOS) i wstawia tam string ($sNEW) | |
| 60 | func __StringReplace($sSTRING, $iPOS, $iLEN, $sNEW) | |
| 61 | return __StringInsert(__StringCut($sSTRING, $iPOS, $iLEN),$iPOS,$sNEW) | |
| 62 | endfunc | |
| 63 | ||
| 64 | ; sprawdza czy znak nie może znajdować się w nazwie zmiennej | |
| 65 | func __CharCheck($sCHAR) | |
| 66 | return not ((asc($sCHAR) >= asc("a")) and (asc($sCHAR) <= asc("z"))) or _
| |
| 67 | ((asc($sCHAR) >= asc("A")) and (asc($sCHAR) <= asc("Z"))) or _
| |
| 68 | ((asc($sCHAR) >= asc("0")) and (asc($sCHAR) <= asc("9"))) or _
| |
| 69 | (asc($sCHAR) == asc("_"))
| |
| 70 | endfunc | |
| 71 | ||
| 72 | ; generuje losowy string o dlugosci ($iLEN) | |
| 73 | func __RandomString($iLEN) | |
| 74 | local $i, $r | |
| 75 | local $s = "" | |
| 76 | for $i = 1 to $iLEN | |
| 77 | $r = random(1,3,1) | |
| 78 | if $r = 1 then $s &= chr(random(asc("a"),asc("z"),1))
| |
| 79 | if $r = 2 then $s &= chr(random(asc("A"),asc("Z"),1))
| |
| 80 | if $r = 3 then $s &= chr(random(asc("0"),asc("9"),1))
| |
| 81 | next | |
| 82 | return $s | |
| 83 | endfunc | |
| 84 | ||
| 85 | func booltostring($b) | |
| 86 | if ($b) then | |
| 87 | return "true" | |
| 88 | else | |
| 89 | return "false" | |
| 90 | endif | |
| 91 | endfunc | |
| 92 | ||
| 93 | ; parsuje tekst i podmienia nazwy zmiennych | |
| 94 | func parse($_s) | |
| 95 | ||
| 96 | ; kopia parametru $s (w sumie nie wiem czy to potrzebne) | |
| 97 | local $s = $_s | |
| 98 | ||
| 99 | ; $x to aktualny znak z pliku | |
| 100 | local $x = 0 | |
| 101 | ||
| 102 | ; czy aktualny znak jest w komentarzu (po średniku) | |
| 103 | local $bCOMMENT = False | |
| 104 | ||
| 105 | ; czy znak jest w stringu (pomiędzy ' i ') | |
| 106 | local $bQUOTE = False | |
| 107 | ||
| 108 | ; czy znak jest w stringu (pomiędzy " i ") | |
| 109 | local $bDQUOTE = False | |
| 110 | ||
| 111 | While($x<stringlen($s)) | |
| 112 | ||
| 113 | - | msgbox(0,StringMid($s,$x,1),"C: "&booltostring($bCOMMENT)&", Q: "&booltostring($bQUOTE)&", D: "&booltostring($bDQUOTE)) |
| 113 | + | |
| 114 | ; omijamy resztę pętli jeśli tak jest i ustawiamy $bCOMMENT | |
| 115 | ; przy okazji trzeba sprawdzic czy ten srednik nie znajduje się w jakimś stringu | |
| 116 | if (not $bQUOTE) and (not $bDQUOTE) and (StringMid($s,$x,1) = ";") then | |
| 117 | $bCOMMENT = True | |
| 118 | $x+=1 | |
| 119 | ContinueLoop | |
| 120 | EndIf | |
| 121 | ||
| 122 | ; jeśli znak jest cudzysłowiem, to znaczy że rozpoczyna lub kończy się string | |
| 123 | if (not $bCOMMENT) and (not $bQUOTE) and (StringMid($s,$x,1) = '"') then | |
| 124 | $bDQUOTE = not $bDQUOTE | |
| 125 | $x+=1 | |
| 126 | ContinueLoop | |
| 127 | EndIf | |
| 128 | ||
| 129 | ; jeśli znak jest apostrofem to tak samo | |
| 130 | if (not $bCOMMENT) and (not $bDQUOTE) and (StringMid($s,$x,1) = "'") then | |
| 131 | $bQUOTE = not $bQUOTE | |
| 132 | $x+=1 | |
| 133 | ContinueLoop | |
| 134 | EndIf | |
| 135 | ||
| 136 | ; jeśli znak jest znakiem nowej linii, to komentarz się kończy | |
| 137 | if (StringMid($s,$x,1) = chr(10)) or (StringMid($s,$x,1) = chr(13)) then | |
| 138 | $bCOMMENT = false | |
| 139 | $x+=1 | |
| 140 | ContinueLoop | |
| 141 | EndIf | |
| 142 | ||
| 143 | ; jeśli aktualnie nie jesteśmy w komentarzu lub stringu | |
| 144 | if (not $bCOMMENT) and (not $bQUOTE) and (not $bDQUOTE) Then | |
| 145 | ||
| 146 | ; czy aktualny znak to początek nazwy zmiennej ($) | |
| 147 | if StringMid($s,$x,1) = '$' Then | |
| 148 | ||
| 149 | ; zmienne tymczasowe | |
| 150 | local $bTEMP = true | |
| 151 | local $y = 1 | |
| 152 | local $varname = "" | |
| 153 | ||
| 154 | ; odczytujemy kolejne litery nazwy zmiennej do $varname | |
| 155 | while ($bTEMP) | |
| 156 | ||
| 157 | if __CharCheck(stringmid($s,$x+$y,1)) then | |
| 158 | ||
| 159 | $bTEMP = False | |
| 160 | ExitLoop | |
| 161 | ||
| 162 | EndIf | |
| 163 | ||
| 164 | $varname &= stringmid($s,$x+$y,1) | |
| 165 | ||
| 166 | $y+=1 | |
| 167 | ||
| 168 | WEnd | |
| 169 | ||
| 170 | ; jeśli zmienna jest już w tablicy | |
| 171 | ; to zamieniamy ją na jej nową nazwę | |
| 172 | if __VarExists($varname) Then | |
| 173 | ||
| 174 | $s = __StringReplace($s,$x,stringlen($varname),__VarName($varname)) | |
| 175 | $x += stringlen(__VarName($varname)) - stringlen($varname) | |
| 176 | ||
| 177 | ; jeśli nie to napierw nazwę generujemy a potem ją zamieniamy | |
| 178 | Else | |
| 179 | ||
| 180 | __AddVar($varname,__RandomString(random(15,30,1))) ;random | |
| 181 | $s = __StringReplace($s,$x,stringlen($varname),__VarName($varname)) | |
| 182 | $x += stringlen(__VarName($varname)) - stringlen($varname) | |
| 183 | ||
| 184 | EndIf | |
| 185 | ||
| 186 | EndIf | |
| 187 | ||
| 188 | EndIf | |
| 189 | ||
| 190 | $x+=1 | |
| 191 | ||
| 192 | WEnd | |
| 193 | ||
| 194 | return $s | |
| 195 | ||
| 196 | EndFunc | |
| 197 | ||
| 198 | ; te zmienne są macrami, więc ich nazwy nie powinny być zmieniane | |
| 199 | __AddVar("CmdLine","CmdLine")
| |
| 200 | __AddVar("CmdLineRaw","CmdLineRaw")
| |
| 201 | ||
| 202 | ; odczytanie pliku z commandline i zparsowanie go do nazwa_obf.au3 | |
| 203 | if ($CmdLine[0]>0) Then | |
| 204 | ||
| 205 | local $f = FileOpen($CmdLine[1],0) | |
| 206 | local $s = fileread($f) | |
| 207 | fileclose($f) | |
| 208 | ||
| 209 | if ($s<>'') Then | |
| 210 | ||
| 211 | $s = parse($s) | |
| 212 | $f = FileOpen($CmdLine[1]&'_obf.au3',2) | |
| 213 | FileWrite($f,$s) | |
| 214 | fileclose($f) | |
| 215 | ||
| 216 | endif | |
| 217 | ||
| 218 | EndIf |