Guest User

obf

a guest
Oct 19th, 2012
101
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.         ; jeśli znak jest średnikiem, to rozpoczyna się komentarz
  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
Advertisement
Add Comment
Please, Sign In to add comment