Guest User

Untitled

a guest
Oct 19th, 2012
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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))
  114.  
  115.         ; jeśli znak jest średnikiem, to rozpoczyna się komentarz
  116.         ; omijamy resztę pętli jeśli tak jest i ustawiamy $bCOMMENT
  117.         ; przy okazji trzeba sprawdzic czy ten srednik nie znajduje się w jakimś stringu
  118.         if (not $bQUOTE) and (not $bDQUOTE) and (StringMid($s,$x,1) = ";") then
  119.             $bCOMMENT = True
  120.             $x+=1
  121.             ContinueLoop
  122.         EndIf
  123.  
  124.         ; jeśli znak jest cudzysłowiem, to znaczy że rozpoczyna lub kończy się string
  125.         if (not $bCOMMENT) and (not $bQUOTE) and (StringMid($s,$x,1) = '"') then
  126.             $bDQUOTE = not $bDQUOTE
  127.             $x+=1
  128.             ContinueLoop
  129.         EndIf
  130.  
  131.         ; jeśli znak jest apostrofem to tak samo
  132.         if (not $bCOMMENT) and (not $bDQUOTE) and (StringMid($s,$x,1) = "'") then
  133.             $bQUOTE = not $bQUOTE
  134.             $x+=1
  135.             ContinueLoop
  136.         EndIf
  137.  
  138.         ; jeśli znak jest znakiem nowej linii, to komentarz się kończy
  139.         if (StringMid($s,$x,1) = chr(10)) or (StringMid($s,$x,1) = chr(13)) then
  140.             $bCOMMENT = false
  141.             $x+=1
  142.             ContinueLoop
  143.         EndIf
  144.  
  145.         ; jeśli aktualnie nie jesteśmy w komentarzu lub stringu
  146.         if (not $bCOMMENT) and (not $bQUOTE) and (not $bDQUOTE) Then
  147.  
  148.             ; czy aktualny znak to początek nazwy zmiennej ($)
  149.             if StringMid($s,$x,1) = '$' Then
  150.  
  151.                 ; zmienne tymczasowe
  152.                 local $bTEMP = true
  153.                 local $y = 1
  154.                 local $varname = ""
  155.  
  156.                 ; odczytujemy kolejne litery nazwy zmiennej do $varname
  157.                 while ($bTEMP)
  158.  
  159.                     if __CharCheck(stringmid($s,$x+$y,1)) then
  160.  
  161.                         $bTEMP = False
  162.                         ExitLoop
  163.  
  164.                     EndIf
  165.  
  166.                     $varname &= stringmid($s,$x+$y,1)
  167.  
  168.                     $y+=1
  169.  
  170.                 WEnd
  171.  
  172.                 ; jeśli zmienna jest już w tablicy
  173.                 ;  to zamieniamy ją na jej nową nazwę
  174.                 if __VarExists($varname) Then
  175.  
  176.                     $s = __StringReplace($s,$x,stringlen($varname),__VarName($varname))
  177.                     $x += stringlen(__VarName($varname)) - stringlen($varname)
  178.  
  179.                 ; jeśli nie to napierw nazwę generujemy a potem ją zamieniamy
  180.                 Else
  181.  
  182.                     __AddVar($varname,__RandomString(random(15,30,1))) ;random
  183.                     $s = __StringReplace($s,$x,stringlen($varname),__VarName($varname))
  184.                     $x += stringlen(__VarName($varname)) - stringlen($varname)
  185.  
  186.                 EndIf
  187.  
  188.             EndIf
  189.  
  190.         EndIf
  191.  
  192.         $x+=1
  193.  
  194.     WEnd
  195.  
  196.     return $s
  197.  
  198. EndFunc
  199.  
  200. ; te zmienne są macrami, więc ich nazwy nie powinny być zmieniane
  201. __AddVar("CmdLine","CmdLine")
  202. __AddVar("CmdLineRaw","CmdLineRaw")
  203.  
  204. ; odczytanie pliku z commandline i zparsowanie go do nazwa_obf.au3
  205. if ($CmdLine[0]>0) Then
  206.  
  207.     local $f = FileOpen($CmdLine[1],0)
  208.     local $s = fileread($f)
  209.     fileclose($f)
  210.  
  211.     if ($s<>'') Then
  212.  
  213.         $s = parse($s)
  214.         $f = FileOpen($CmdLine[1]&'_obf.au3',2)
  215.         FileWrite($f,$s)
  216.         fileclose($f)
  217.  
  218.     endif
  219.  
  220. EndIf
Advertisement
Add Comment
Please, Sign In to add comment