View difference between Paste ID: nivKHz5X and zd05Nf10
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