[TOOL] AHK Dynamic Obfuscator L - Protect your code by Obfuscation

Post your working scripts, libraries and tools for AHK v1.1 and older
AHKtreasureland
Posts: 9
Joined: 12 Mar 2018, 10:30

Re: [TOOL] AHK Dynamic Obfuscator L - Protect your code by Obfuscation

23 Jun 2018, 15:21

I'm amazed at the way it works. truly amazed. have one question, Don. Would it work with AHK_H? I kinda need that multithread power of H. Thank you again, Don.
DigiDon
Posts: 178
Joined: 19 May 2014, 04:55
Contact:

Re: [TOOL] AHK Dynamic Obfuscator L - Protect your code by Obfuscation

25 Jun 2018, 10:47

HI, thanks for the feedback.

I didn't use ahk_h for now but I would say that normally the obfuscator should work without problem on AHK_H.

Nevertheless I think it would not work with AHK v2 or AHK_H v2 because there are major syntax changes the obfuscator will probably not recognize.
EverFastAccess : Take Notes on anything the Fast way: Attach notes, Set reminders & Speed up research in 1 gesture - AHK topic
AHK Dynamic Obfuscator L - Protect your AHK code by Obfuscation - AHK topic
QuickModules for Outlook : Sort Outlook emails very quickly to multiple folders - AHK topic
Coding takes lots of time and efforts. If I have helped you or if you enjoy one of my free projects, please consider a small donation :thumbup:
Sorry I am working hard at the moment at a new job and can't commit on delays of answers & updates
DDook

Re: [TOOL] AHK Dynamic Obfuscator L - Protect your code by Obfuscation

28 Jul 2018, 15:30

Obfuscation is very good. There is one problem.
Gui's Glabel is obfuscated just like label:.
This is obfuscation of the source in my example.

Code: Select all

gui, add, button, xm y+20 G[b]k#fkfk@k#kk@f@@f@kk#k@k@@fkkk##k@k[/b], Test gui submit
	gui, add, button, x+20 yp G#fkkfkfkkfkkfff#fkff@kff@kf@k@, Cancel program
	gui, show
}


;LABEL ORIGINAL NAME: testguisubmit
[b]k#fkfk@k#kk@f@@f@kk#k@k@@fkkk##k@k[/b]:
	gui, submit, nohide
	msgbox, TESTING OBF OF Vvariablename IN 'gui, add':`n`nyou entered "%kfk#kfff%%f#kff#@fk@%%k@#kk##f%"
return
This is a source already obfuscated to the example.

Code: Select all

gui, add, button, xm y+20 G[b]fkfk%f@fffk%%fffff@%%f@fkkf%kff@%k#f@k#k#f@k#kfkfk#fkfffk%f%fkk#ffk#ffffk#fffkfkfkf@%fk#fkkfffk#ff[/b], Test gui submit
	gui, add, button, x+20 yp G%kff@f@k#fkffffffffk#f@f@k#k#%%k#f@k#fk%%fff@kf%, Cancel program
	gui, show
}


;LABEL ORIGINAL NAME: testguisubmit
[b]fkfkkff@ffkfk#fkkfffk#ff[/b]:
	gui, submit, nohide
	msgbox, TESTING OBF OF Vvariablename IN 'gui, add':`n`nyou entered "%fkf@k#k#%%kfkfk#kfk#%%fff@k#fk%"
return
What is the solution to this?
What am I doing wrong?
DigiDon
Posts: 178
Joined: 19 May 2014, 04:55
Contact:

Re: [TOOL] AHK Dynamic Obfuscator L - Protect your code by Obfuscation

29 Jul 2018, 08:46

Hello DDook,

I'm not sure to understand.
It seems you provide two obfuscated script parts. Where is the unobfuscated original source code?

Which example exactly are you using? I had to search for it, there are several : "min-straight-obfuscation"?
If yes then if you create the TransMap for "straightobf.ahk", then run the obfuscation, you will see that gLabels are obfuscated correclty.
EverFastAccess : Take Notes on anything the Fast way: Attach notes, Set reminders & Speed up research in 1 gesture - AHK topic
AHK Dynamic Obfuscator L - Protect your AHK code by Obfuscation - AHK topic
QuickModules for Outlook : Sort Outlook emails very quickly to multiple folders - AHK topic
Coding takes lots of time and efforts. If I have helped you or if you enjoy one of my free projects, please consider a small donation :thumbup:
Sorry I am working hard at the moment at a new job and can't commit on delays of answers & updates
DDook

Re: [TOOL] AHK Dynamic Obfuscator L - Protect your code by Obfuscation

29 Jul 2018, 15:09

Thank you for your reply.
This is part of the code in your example (mindynobf_obfuscated.ahk).

Code: Select all

k#kfk#ffk#f@kfk#() { 
	global
	local fff@kfffkff@k#kffkff, fff@f@k#f@k#k#k#kf, fkk#fffkk#fkfkkfff, f@fffkk#kffffk
;$OBFUSCATOR: $DEFLOSVARS: ff%kff@fk%f%f@fff@fk%@k%f@f@f@k#kfkfkff@k#k#%ff%ffk#ff%kff@k#kffkff, fff@f%ffk#ffk#%%k#k#kfffffkff@fkffff%k#f@k%k#f@fffk%#k#k#kf, fkk#ff%f@k#k#fkfffkffk#f@%%kfff%%kffff@%kk#fkfkkfff, f@%ffkfkfkf%ff%fkk#k#%f%k#f@k#fkkffkk#f@f@kffffk%k#%kfkffkkffff@k#kf%%fffk%ffffk

	fff@k%k#f@fffffff@fkf@ff%ffkff%ffkf%@k#kf%k#f@kfffk#k#fkffkffk%kff 		= % "s22"
	ff%k#f@kfffk#k#fkffkffk%@f@%fffk%k#f%k#k#fffk%@%f@fk%k#k#k#kf 		= % "s18"	
	%ffk#%%k#ffffk#fkk#ffk#kfff%%f@fk% 	= % "s14"
	f@f%fffff@%ffkk%fffkff%#%ffkfffkffffkf@fk%ffffk := "from Dynamic Obfuscator"

	gui 2:default
	gui, destroy
	gui, margin, 20, 20
	
	;the h1font variable below should be obfuscated
	gui, font, %kfffk#%%fff@kfffkff@k#kffkff%%k#kfkf% bold
	gui, add, text, xm ym, Obfuscator Test GUI
	
	gui, font, %f@k#k#kf%%fkk#fffkk#fkfkkfff%%f@fkk#ff% norm underline
	;the gosub label below should be obfuscated
	gui, add, text, xm y+12 cblue G%fffkk#fkfkfkfkk#fkk#k#fkk#ff%%k#k#fkkf%%fkf@%, test gosub obfuscation in gui statement ;point3
	
	gui, font, %fkk#fffkk#fkfkkfff%%kfffff%%fkfffkff% norm
	gui, add, text, xm y+12 G%f@f@fkfk%kffff@%k#f@k#k#f@k#kfkfk#fkfffk%f%fffk%k#f@k#%k#f@k#fkkffkk#f@f@kffffk%#k#fkfffffffkfkffk#, ;point3
(
hello world

TESTING LITERAL STRING :
"%f@fffkk#kffffk%%f@f@fkfk%%k#ffff%"

-press home key to test hotkeys-
)
	gui, add, text, xm y+12, enter something here to test`nvariable obfuscation
;$OBFUSCATOR: $DEFGLOBVARS: %k#f@fk%kf%k#fffkf@%k%kfk#f@kff@ffkff@kf%k#%fkf@fkfff@k#f@f@fkk#%fk#
	gui, add, edit, xm y+2 V%fkk#ffk#ffffk#fffkfkfkf@%f%fkf@k#%kf%f@f@ffk#k#k#kfk#f@k#k#%%fkkf%#kfk# r4, 
		
	gui, add, button, xm y+20 Gfkfk%f@fffk%%fffff@%%f@fkkf%kff@%k#f@k#k#f@k#kfkfk#fkfffk%f%fkk#ffk#ffffk#fffkfkfkf@%fk#fkkfffk#ff, Test gui submit ;point1
	gui, add, button, x+20 yp G%kff@f@k#fkffffffffk#f@f@k#k#%%k#f@k#fk%%fff@kf%, Cancel program ;point2
	gui, show
}


;LABEL ORIGINAL NAME: testguisubmit
fkfkkff@ffkfk#fkkfffk#ff: ;point1
	gui, submit, nohide
	msgbox, TESTING OBF OF Vvariablename IN 'gui, add':`n`nyou entered "%fkf@k#k#%%kfkfk#kfk#%%fff@k#fk%"
return


;LABEL ORIGINAL NAME: cancelprog
fkfkfff@k#f@k#k#f@kffkk#f@: ;point2
	exitapp
return


;LABEL ORIGINAL NAME: guigosub
kffff@ffk#f@k#k#k#fkfffffffkfkffk#: ;point3
	msgbox, inside _guigosub_
return

This code is what I did (mindynobf.ahk).

Code: Select all

ff#ffkfkf#kfk@() { 
	global
	local @f@kkk#fk##fkk#ff#ff, f##fkf@f#kf##k, #ff@kfk@k@@kf#ffkk, k#fkkf#kkkkfk#@kf@ff
;$OBFUSCATOR: $DEFLOSVARS: @%@fk@#kfkk@ff@kfk#kkkf@%@%ffkf#f%kkk#fk##fkk#ff#ff, f#%f@#k%#fkf%f@@fk@ff@kfk@kkk#kffk#%f#kf##k, #f%f#k@f#f@f##kk#%@kf%#kkf@ffk@fk#ffkkk@kf%@k%fff#%@@%#ff@%kf#ffkk, k#f%f#@k@k%kkf#%k@@fkff#@ff@k#k#f@#k%%#fkkfk@fkff##ff#k#%kkfk#@kf@ff

	%f##k%%@kk@fk@kff#kff#fk@kkf#@f%%k#kkkfff% 		= % "s22"
	%@kfk@k%%#k#fk@@ff#f#k#kf@kf#%%f@k#k#% 		= % "s18"	
	%k#f@%%k#@f%%@fff@f@ff@kk#k% 	= % "s14"
	k#fkk%@fk@#kfkk@ff@kfk#kkkf@%#kkkkfk%@fkk@f%#@kf@ff := "from Dynamic Obfuscator"

	gui 2:default
	gui, destroy
	gui, margin, 20, 20
	
	;the h1font variable below should be obfuscated
	gui, font, %k@kk%%@f@kkk#fk##fkk#ff#ff%%@f@kkkf#% bold
	gui, add, text, xm ym, Obfuscator Test GUI
	
	gui, font, %k##kk@kf%%#ff@kfk@k@@kf#ffkk%%k##fk#% norm underline
	;the gosub label below should be obfuscated
	gui, add, text, xm y+12 cblue Gf#k#f@f@kfkffkfff#@k@kk@kf@kfk, test gosub obfuscation in gui statement ;point3
	
	gui, font, %#ff@kfk@k@@kf#ffkk%%#kkffkff%%#k#k% norm
	gui, add, text, xm y+12 Gf#k#f@f@kfkffkfff#@k@kk@kf@kfk, ;point3
(
hello world

TESTING LITERAL STRING :
"%fkff#k%%k#fkkf#kkkkfk#@kf@ff%%kkkffk#f%"

-press home key to test hotkeys-
)
	gui, add, text, xm y+12, enter something here to test`nvariable obfuscation
;$OBFUSCATOR: $DEFGLOBVARS: f#%fff@%%kf@kfffk@f@kf#kkk#%f%#ffk%f#@fk@
	gui, add, edit, xm y+2 Vf#kff#@fk@ r4, 
		
	gui, add, button, xm y+20 Gk#fkfk@k#kk@f@@f@kk#k@k@@fkkk##k@k, Test gui submit ;point1
	gui, add, button, x+20 yp G#fkkfkfkkfkkfff#fkff@kff@kf@k@, Cancel program ;point2
	gui, show
}


;LABEL ORIGINAL NAME: testguisubmit
k#fkfk@k#kk@f@@f@kk#k@k@@fkkk##k@k: ;point1
	gui, submit, nohide
	msgbox, TESTING OBF OF Vvariablename IN 'gui, add':`n`nyou entered "%kfk#kfff%%f#kff#@fk@%%k@#kk##f%"
return


;LABEL ORIGINAL NAME: cancelprog
#fkkfkfkkfkkfff#fkff@kff@kf@k@: ;point2
	exitapp
return


;LABEL ORIGINAL NAME: guigosub
f#k#f@f@kfkffkfff#@k@kk@kf@kfk: ;point3
	msgbox, inside _guigosub_
return
This code is from line 135 to line 193 of mindynobf_obfuscated.ahk.
Do you know the difference?
Look at the "point1","point2","point3" in the code.

The mindynobf_obfuscated.ahk originally in the example
Label: and Glabel do not match.
But my code is the same as Label: and Glabel.

What is the solution for this?
DigiDon
Posts: 178
Joined: 19 May 2014, 04:55
Contact:

Re: [TOOL] AHK Dynamic Obfuscator L - Protect your code by Obfuscation

30 Jul 2018, 13:48

Hi DDook,

Alright I see now.
I've run some tests and it seems that there are indeed no %'s straight or dynamic vars introduced inside the names for gLabels or vVars no more.
It means I must have changed it at some point because it used to be obfuscated this way.

So that's an undocumented regression and that's on my side, not yours. Thanks for pointing that out.

To correct it would need a bunch of testing from my side but I currently do not have the ressources to do so (donations have been unfortunately non-existent...).
Maybe I'll be able to fix it in the future, I will update the post if I do.
EverFastAccess : Take Notes on anything the Fast way: Attach notes, Set reminders & Speed up research in 1 gesture - AHK topic
AHK Dynamic Obfuscator L - Protect your AHK code by Obfuscation - AHK topic
QuickModules for Outlook : Sort Outlook emails very quickly to multiple folders - AHK topic
Coding takes lots of time and efforts. If I have helped you or if you enjoy one of my free projects, please consider a small donation :thumbup:
Sorry I am working hard at the moment at a new job and can't commit on delays of answers & updates
Kmeaha

Re: [TOOL] AHK Dynamic Obfuscator L - Protect your code by Obfuscation

20 Aug 2018, 03:19

Dear Mr. DigiDon

thanks a lot for your project it is working great as i tried with straight and dynamic mode, perfect and smoothly
but when i tried the ihidestr() option it didn't work properly, i use your example (hidestring_example.ahk) and after testing to obfuscated with the gui it didn't give me the same result of your file (hidestring_example_obfuscated.ahk), the string 12 and text still showing after obfuscated
this is a part of your example:
;test obfuscation of parameters
;msgbox will show 12 if obfuscation of parameters works
msgbox, % "parameter: " . test_parameters(ihidestr("12"))

msgbox % "obfuscated text = " ihidestr("TEXT")

RETURN


and this is the result after obfuscated:
;test obfuscation of parameters
;msgbox will show 12 if obfuscation of parameters works
msgbox, % "parameter: " . #fkff%ffkkff%k@fkff@k#k@(fkf%@ff#f#%kk@#f@kk#("12"))

msgbox % "obfuscated text = " fkfk%@k#k%k@#f@kk#("TEXT")

RETURN


thanks again
DigiDon
Posts: 178
Joined: 19 May 2014, 04:55
Contact:

Re: [TOOL] AHK Dynamic Obfuscator L - Protect your code by Obfuscation

20 Aug 2018, 08:34

Hello Kmeaha,

You're right: The function should be named "hidestr" and not "ihidestr".

I forgot to modify the internal example. The online doc is OK though.

Thanks for pointing it out.
EverFastAccess : Take Notes on anything the Fast way: Attach notes, Set reminders & Speed up research in 1 gesture - AHK topic
AHK Dynamic Obfuscator L - Protect your AHK code by Obfuscation - AHK topic
QuickModules for Outlook : Sort Outlook emails very quickly to multiple folders - AHK topic
Coding takes lots of time and efforts. If I have helped you or if you enjoy one of my free projects, please consider a small donation :thumbup:
Sorry I am working hard at the moment at a new job and can't commit on delays of answers & updates
Kmeaha

Re: [TOOL] AHK Dynamic Obfuscator L - Protect your code by Obfuscation

21 Aug 2018, 09:00

Thanks for the reply Mr. DigiDon
now i tested and the obfuscated option working but giving me an error
the original script working fine but after obfuscated it is giving me an error
her is my full testing script:

Code: Select all

#SingleInstance force
#NoEnv

;$OBFUSCATOR: $STRAIGHT_MODE:

;$OBFUSCATOR: $DEFGLOBVARS: startdate,enddate,pcname

pcname := hidestr("hb1it014")
startdate := hidestr("20180801")
enddate := hidestr("20200801")

#r::
heckExpiry:
FormatTime, Today,, yyyyMMdd
Start  = %startdate%
Expiry = %enddate%
If (Today > Expiry or Today < Start)
{
		MsgBox % "PROGRAM trial version expired`nContact author for a full version ."
		ExitApp
}

If A_ComputerName != %pcname%
{
	MsgBox % "This is not the authorized computer: hb1it014."
	ExitApp
}

MsgBox % "Everything is running fine."
ExitApp

;$OBFUSCATOR: $END_AUTOEXECUTE: 
;******************************************
;	PUT THESE FUNCTIONS IN YOUR ACTUAL AUTOHOTKEY SCRIPT FILE

hidestr(thisstr)
{
	return thisstr
}


decode_ihidestr(startstr) 
{
	global	
;$OBFUSCATOR: $DEFGLOBVARS: hexdigits
	
	static newstr, startstrlen, charnum, hinibble, lownibble, mybinary
;$OBFUSCATOR: $DEFLOSVARS: newstr, startstrlen, charnum, hinibble, lownibble, mybinary

	hexdigits = % "0123456789abcdef"
		
	decode_hexshiftkeys(startstr)
	
	startstr = % substr(startstr, 1, 1) . substr(startstr, 6)
	startstrlen = % strlen(startstr)
		
	newstr = 
	loop, % strlen(startstr) 
		newstr = % substr(startstr, a_index, 1) . newstr
	
	startstr = % newstr
	newstr = 
	charnum = 1
	while true
	{
		if (charnum >startstrlen)
			break
			
		hinibble = % substr(startstr, charnum, 1)
		hinibble = % instr(hexdigits, hinibble) - 1
		
		lownibble = % substr(startstr, charnum + 1, 1)
		lownibble = % instr(hexdigits, lownibble) - 1
		
		hinibble := decode_shifthexdigit(hinibble)
		lownibble := decode_shifthexdigit(lownibble)
		
		mybinary = % hinibble * 16 + lownibble
		newstr .= chr(mybinary)
		
		charnum += 2		
	}
		
	newstr = % fixescapes(newstr)
		
	return, newstr	
}
decode_hexshiftkeys(startstr)
{
	global
;$OBFUSCATOR: $DEFGLOBVARS: decodekey, ishexchar, useshiftkey
	
	decodekey := "fff@kkf1ffkfkfkfff#k1fk@kf#@fffk@#kk"
	ishexchar := "fff@f1ff@kffkk#f1fffffkf"
	
	%decodekey%%ishexchar%1 = % substr(startstr, 2, 1)
	%decodekey%%ishexchar%2 = % substr(startstr, 3, 1)
	%decodekey%%ishexchar%3 = % substr(startstr, 4, 1)
	%decodekey%%ishexchar%4 = % substr(startstr, 5, 1)
	
	loop, 4
		%decodekey%%a_index% = % instr(hexdigits, %decodekey%%ishexchar%%a_index%) - 1
			
	useshiftkey = 0
}	

decode_shifthexdigit(hexvalue)
{
	global
	
	useshiftkey++
	if (useshiftkey > 4)
		useshiftkey = 1	
	
	hexvalue -= %decodekey%%useshiftkey%
	
	if (hexvalue < 0) 
		hexvalue += 16
		
	return hexvalue	
}

fixescapes(forstr)
{
	global
	
	StringReplace, forstr, forstr, % "````", % "``", all
	StringReplace, forstr, forstr, % "``n", % "`n", all
	StringReplace, forstr, forstr, % "``r", % "`r", all
	StringReplace, forstr, forstr, % "``,", % "`,", all
	StringReplace, forstr, forstr, % "``%", % "`%", all	
	StringReplace, forstr, forstr, % "``;", % "`;", all	
	StringReplace, forstr, forstr, % "``t", % "`t", all
	StringReplace, forstr, forstr, % "``b", % "`b", all
	StringReplace, forstr, forstr, % "``v", % "`v", all
	StringReplace, forstr, forstr, % "``a", % "`a", all
	
	StringReplace, forstr, forstr, % """""", % """", all
	
	return forstr
}
Kmeaha

Re: [TOOL] AHK Dynamic Obfuscator L - Protect your code by Obfuscation

21 Aug 2018, 09:15

thanks it is already solved

the problem was in line of decode as i forgot to change it to hidestr instead of ihidestr:
decode_ihidestr(startstr)
{
Bluscream
Posts: 15
Joined: 10 Jan 2017, 23:12
Contact:

Re: [TOOL] AHK Dynamic Obfuscator L - Protect your code by Obfuscation

14 Oct 2018, 02:28

I don't get it, why can't i just click one button and the whole script becomes obfuscated? I mean with java i can even do it online (https://javascriptobfuscator.com/Javasc ... cator.aspx)
guest3456
Posts: 3454
Joined: 09 Oct 2013, 10:31

Re: [TOOL] AHK Dynamic Obfuscator L - Protect your code by Obfuscation

14 Oct 2018, 09:31

Bluscream wrote:I don't get it, why can't i just click one button and the whole script becomes obfuscated? I mean with java i can even do it online (https://javascriptobfuscator.com/Javasc ... cator.aspx)
go ahead and update this script for us, so we all can click one button and have the script obfuscated. once you attempt to do that, either 1. you'll have your answer as to why, or 2. you'll have been a better coder than those who have attempted it, and you will have achieved it for us.

Alibaba
Posts: 480
Joined: 29 Sep 2013, 16:15
Location: Germany

Re: [TOOL] AHK Dynamic Obfuscator L - Protect your code by Obfuscation

09 Nov 2018, 02:26

Bluscream wrote:
14 Oct 2018, 02:28
I don't get it, why can't i just click one button and the whole script becomes obfuscated? I mean with java i can even do it online (https://javascriptobfuscator.com/Javasc ... cator.aspx)
Good luck obfuscating Java with a JavaScript Obfuscator... :roll:
"Nothing is quieter than a loaded gun." - Heinrich Heine
DRocks
Posts: 565
Joined: 08 May 2018, 10:20

Re: [TOOL] AHK Dynamic Obfuscator L - Protect your code by Obfuscation

26 Jan 2019, 22:41

This seems very nice will have a look at it when reaching end of my current project

Thank you
kyuuuri
Posts: 340
Joined: 09 Jan 2016, 19:20

Re: [TOOL] AHK Dynamic Obfuscator L - Protect your code by Obfuscation

27 Jan 2019, 11:07

Any plans to update this for ahk v2? I would do it if could but I'm still trying to figure out what I have to change in the source.
murataygun
Posts: 104
Joined: 07 Aug 2015, 15:53

Re: [TOOL] AHK Dynamic Obfuscator L - Protect your code by Obfuscation

17 Feb 2019, 13:13

Hi Digidon,
Thanks for your efforts about this. I've read allmost all the docs but didnt quite understand how included files would obfuscated. I didn find any example about that allso. One simple example should be enough. Thanks.
DigiDon
Posts: 178
Joined: 19 May 2014, 04:55
Contact:

Re: [TOOL] AHK Dynamic Obfuscator L - Protect your code by Obfuscation

19 Feb 2019, 15:27

Hi all, Sorry for having not posted any news for a while.

I had to undergo some personal changes and took a new hard-working job in a company.
I kept convincing myself the past months that I would find time to get back at my projects but truth is right now I can't.
So I will try to check messages once in a while but I can't commit on any delay especially on any update.

Now some quick answers:
@kyuuuri: no not planned for v2 sorry
@murataygun : take a look at : https://www.everfastaccess.com/AHK-Obfuscator/includefiles.htm
Cheers
EverFastAccess : Take Notes on anything the Fast way: Attach notes, Set reminders & Speed up research in 1 gesture - AHK topic
AHK Dynamic Obfuscator L - Protect your AHK code by Obfuscation - AHK topic
QuickModules for Outlook : Sort Outlook emails very quickly to multiple folders - AHK topic
Coding takes lots of time and efforts. If I have helped you or if you enjoy one of my free projects, please consider a small donation :thumbup:
Sorry I am working hard at the moment at a new job and can't commit on delays of answers & updates
freespacing
Posts: 150
Joined: 28 Sep 2016, 11:14
Contact:

Re: [TOOL] AHK Dynamic Obfuscator L - Protect your code by Obfuscation

22 Apr 2019, 10:02

@DigiDon

Hi there,
I realize you're busy with real life. Got to keep the fridge full. ;)
Thought I'd post this question for if you ever have a chance to look at the project again.

I find the goal this program is trying to achieve mind-blowing. I love that the documentation goes into so much detail about creating specific directives in the forms of comments and can see how that can help someone have everything ready in the source code for whenever they want to build an obfuscated file to release.

To get started, testing the obfuscator in Static mode on a large file without #Includes.

It reports success creating the map, then the obfuscated file.
When I try to run the obfuscated file, this pops up:
The following variable name contains an illegal character:
"#k%#fkffkkk%#kffk@f#ff@k"
The program will exit.

Perhaps a hint, so will ask: Can the opening { of a function definition (after the list of arguments) live on a different line? I ask because some of my functions have many args so I've broken the definition over two lines.

Some troubleshooting info:
  • My text editor does not find this variable #k%#fkffkkk%#kffk@f#ff@k in the code
  • The program's first line is ;$OBFUSCATOR: $STRAIGHT_MODE:
  • ;$OBFUSCATOR: $END_AUTOEXECUTE: is at the end of the auto-execute part, after ExitApp and before all function definitions.
  • All Column 1 } close a function, as confirmed by regex search for (?m)^}
  • There is not a single label in the file
  • Just in case it's a hint, there is one anonymous function call in the form of my_callback := Func(callback_function_name) followed by callback_result := my_callback.Call(
  • Haven't yet tried Dynamic mode because assume-global will cause a lot of work to declare all variables as local inside functions. Would prefer to get success with Static first before going that way.
Would appreciate any insights… But only if and when you can spare the time.

Hope you have a great week.
User avatar
manehscripts
Posts: 126
Joined: 03 May 2019, 16:10

Re: [TOOL] AHK Dynamic Obfuscator L - Protect your code by Obfuscation

29 May 2019, 21:25

Hello guys!

@DigiDon I'm have a problem while trying to obfuscate this code below:

Code: Select all

;$OBFUSCATOR: $DYNAMIC_MODE:

; --------------------
obf_dumpcommonobjfrags()
obf_dumpunclassed()
obf_dumpunsecclasses()
obf_dumpall()

;$OBFUSCATOR: $DEFGLOBVARS: COUNT,Variable

Gui, +AlwaysOnTop
Gui, Add, Edit, r1 ReadOnly w200 vAlert, Stopped!
Gui, Add, Button, vStartScript gStartG, START!
Gui, Show,
return
;$OBFUSCATOR: $END_AUTOEXECUTE: 

toggle := 0
StartG:
    toggle := !toggle
    if (toggle) {
        GuiControl,,StartScript, STOP!
        GuiControl,,Alert, Running!
        COUNT := hidestr("Couuuuunt: ")
		CritObj := CriticalObject({Variable: COUNT})
		
       script:="
        ("
            Loop {
                CritObj := CriticalObject(A_Args[1])
				variable1 = `% CritObj.Variable
				var1++
				ToolTip, %variable1%%var1%
			}
        )"

		DllOn:=AhkThread(script,&CritObj)
    } else {
        DllOn.ahkTerminate.1
        GuiControl,,Alert, Stopped!
        GuiControl,,StartScript, START!
    }
return

Esc::ExitApp
GuiClose:
ExitApp

;*******************************************************************************
;                        O B F   D U M P   F U C T I O N S
;*******************************************************************************
;$OBFUSCATOR: $FUNCS_CHANGE_DEFAULTS: ,, -1
obf_dumpcommonobjfrags() 
{
    global
;$OBFUSCATOR: $DUMP_SECFRAGS_FORCLASSES: common
;$OBFUSCATOR: $DUMP_TMESSFRAGS_FORCLASSES: common
} 
;$OBFUSCATOR: $FUNCS_RESTORE_DEFAULTS:

;$OBFUSCATOR: $FUNCS_CHANGE_DEFAULTS: ,, -1

obf_dumpunclassed()
{
    global
;$OBFUSCATOR: $FUNCFRAGS_DUMPCLASS: unclassed
;$OBFUSCATOR: $LABELFRAGS_DUMPCLASS: unclassed
}

obf_dumpunsecclasses()
{
    global
;$OBFUSCATOR: $FUNCFRAGS_DUMPCLASS: unsecclasses
;$OBFUSCATOR: $LABELFRAGS_DUMPCLASS: unsecclasses 
}
;$OBFUSCATOR: $FUNCS_RESTORE_DEFAULTS:

obf_dumpall() 
{
    global
;$OBFUSCATOR: $GLOBVARFRAGS_DUMPALL:
;$OBFUSCATOR: $GLOBPARTIALVARSFRAGS_DUMPALL:
;$OBFUSCATOR: $SYSVARFRAGS_DUMPALL:
;$OBFUSCATOR: $LOSVARFRAGS_DUMPALL:
;$OBFUSCATOR: $PARAMFRAGS_DUMPALL:
;$OBFUSCATOR: $SYSFUNCFRAGS_DUMPALL:
;$OBFUSCATOR: $SYSPROPERTIESFRAGS_DUMPALL:
;$OBFUSCATOR: $SYSMETHODSFRAGS_DUMPALL:
}

encode_hidestr(startstr)
{
	global
	static onechar, newstr, secstartstr, hexdigits 
	
	hexdigits = 0123456789abcdef

	createhexshiftkeys()
		
	newstr = 
	;convert to hexidecimal
	loop, % strlen(startstr)
	{
		strascii = % asc(substr(startstr, a_index, 1))
		hinibble = % strascii // 16
		lownibble = % strascii - (hinibble * 16)
		
		;shift the hex digits in order to encrypt them
		hinibble := encode_shifthexdigit(hinibble)
		lownibble := encode_shifthexdigit(lownibble)
		
		newstr .= substr(hexdigits, hinibble + 1, 1) . substr(hexdigits, lownibble + 1, 1)
	}
	
	startstr := newstr
	;now i'll reverse the hex string
	newstr = 
	loop, % strlen(startstr) 
		newstr = % substr(startstr, a_index, 1) . newstr
	
	;convert key values to hex values. i can convert directly to
	;single hex digits because my keys only range from 1-15
	allhexkeys =
	loop, 4
		allhexkeys .=  substr(hexdigits, key%a_index% + 1, 1)
	
	;stuff the key values into the string starting at character 2
	newstr := substr(newstr, 1, 1) . allhexkeys . substr(newstr, 2)
	
	return, newstr
}

encode_shifthexdigit(hexvalue)
{
	global
	
	;each time i enter this routine i will use the next key value
	;to shift the hexvalue
	useshiftkey++
	if (useshiftkey > 4)
		useshiftkey = 1	
	
	;add the shift key to the hexvalue 
	hexvalue += key%useshiftkey%
	
	;if i go over, just substract 16 to simulate a circle of hex
	if (hexvalue > 15) 
		hexvalue -= 16
		
	return hexvalue
	
}

createhexshiftkeys()
{
	global
	
	;create random 4 entry 'encrypt' key, each entry can be 1-15
	loop, 4
		random, key%a_index%, 1, 15
		
	useshiftkey = 0
}

;******************************************
;	PUT THESE FUNCTIONS IN YOUR ACTUAL AUTOHOTKEY SCRIPT FILE

hidestr(thisstr)
{
	return thisstr
}

decode_hidestr(startstr) 
{
	global	
;$OBFUSCATOR: $DEFGLOBVARS: hexdigits
	critical
	static newstr, startstrlen, charnum, hinibble, lownibble, mybinary
;$OBFUSCATOR: $DEFLOSVARS: newstr, startstrlen, charnum, hinibble, lownibble, mybinary

	hexdigits = % "0123456789abcdef"
		
	decode_hexshiftkeys(startstr)
	
	startstr = % substr(startstr, 1, 1) . substr(startstr, 6)
	startstrlen = % strlen(startstr)
		
	newstr = 
	loop, % strlen(startstr) 
		newstr = % substr(startstr, a_index, 1) . newstr
	
	startstr = % newstr
	newstr = 
	charnum = 1
	loop
	{
		if (charnum >startstrlen)
			break
			
		hinibble = % substr(startstr, charnum, 1)
		hinibble = % instr(hexdigits, hinibble) - 1
		
		lownibble = % substr(startstr, charnum + 1, 1)
		lownibble = % instr(hexdigits, lownibble) - 1
		
		hinibble := decode_shifthexdigit(hinibble)
		lownibble := decode_shifthexdigit(lownibble)
		
		mybinary = % hinibble * 16 + lownibble
		newstr .= chr(mybinary)
		
		charnum += 2		
	}
		
	newstr = % fixescapes(newstr)
		
	return, newstr	
}
decode_hexshiftkeys(startstr)
{
	global
;$OBFUSCATOR: $DEFGLOBVARS: decodekey, ishexchar, useshiftkey
	
	decodekey := "fff@kkf1ffkfkfkfff#k1fk@kf#@fffk@#kk"
	ishexchar := "fff@f1ff@kffkk#f1fffffkf"
	
	%decodekey%%ishexchar%1 = % substr(startstr, 2, 1)
	%decodekey%%ishexchar%2 = % substr(startstr, 3, 1)
	%decodekey%%ishexchar%3 = % substr(startstr, 4, 1)
	%decodekey%%ishexchar%4 = % substr(startstr, 5, 1)
	
	loop, 4
		%decodekey%%a_index% = % instr(hexdigits, %decodekey%%ishexchar%%a_index%) - 1
			
	useshiftkey = 0
}	

decode_shifthexdigit(hexvalue)
{
	global
	
	useshiftkey++
	if (useshiftkey > 4)
		useshiftkey = 1	
	
	hexvalue -= %decodekey%%useshiftkey%
	
	if (hexvalue < 0) 
		hexvalue += 16
		
	return hexvalue	
}

fixescapes(forstr)
{
	global
	
	StringReplace, forstr, forstr, % "````", % "``", all
	StringReplace, forstr, forstr, % "``n", % "`n", all
	StringReplace, forstr, forstr, % "``r", % "`r", all
	StringReplace, forstr, forstr, % "``,", % "`,", all
	StringReplace, forstr, forstr, % "``%", % "`%", all	
	StringReplace, forstr, forstr, % "``;", % "`;", all	
	StringReplace, forstr, forstr, % "``t", % "`t", all
	StringReplace, forstr, forstr, % "``b", % "`b", all
	StringReplace, forstr, forstr, % "``v", % "`v", all
	StringReplace, forstr, forstr, % "``a", % "`a", all
	
	StringReplace, forstr, forstr, % """""", % """", all
	
	return forstr
}
What happens is that the variable Variable that is inside the CriticalObject is not being obfuscated. I need to obfuscate the variables and information that are inside the script:="(")" and I can't. Does anyone know how to make it work?

Here the code ofuscated:

Code: Select all

obf_copyright := " Date: 23:23 quarta-feira, 29 de maio de 2019   "
obf_copyright := "                                                "
obf_copyright := " THE FOLLOWING AUTOHOTKEY SCRIPT WAS OBFUSCATED "
obf_copyright := " BY DYNAMIC OBFUSCATOR L FOR AUTOHOTKEY         "
obf_copyright := " By DigiDon                                     "
obf_copyright := "                                                "
obf_copyright := " Based on DYNAMIC OBFUSCATOR                    "
obf_copyright := " Copyright (C) 2011-2013  David Malia           "
obf_copyright := " DYNAMIC OBFUSCATOR is released under           "
obf_copyright := " the Open Source GPL License                    "


;AUTOEXECUTE ORIGINAL NAME: autoexecute
;autoexecute
;$OBFUSCATOR: $DYNAMIC_MODE:

; --------------------
@kkff%ff@fffff%fkfk@@kkfkf()
kf%k@#k@f%@f#f#k#kfffk#f()
k%kf#f#f%#@f#%k##k@f%k@fk@#f@f()
kkk%kkk#fkkfk#kkkfff%kk#%#ffkfk@f%f#k@%fffk@kk#f#fff##fffkkk@%#fkf()

;$OBFUSCATOR: $DEFGLOBVARS: f%fk@k%ff@%@f#f#f#kk@@k@fk#@f%@#%kk@k#fk@%f@fk@,%#kf#k@f@%%#k@kk##fff#k%%kkfff@@f%

Gui, +AlwaysOnTop
Gui, Add, Edit, r1 ReadOnly w200 vAlert, Stopped!
Gui, Add, Button, vStartScript gf##f#f#k#kfkfff@#kkkk#f#k@, START!
Gui, Show,
return

toggle := 0
;LABEL ORIGINAL NAME: StartG
f##f#f#k#kfkfff@#kkkk#f#k@:
    toggle := !toggle
    if (toggle) {
        GuiControl,,StartScript, STOP!
        GuiControl,,Alert, Running!
        f%kf#f#f%f%fkk##fff@f@ff##ff#%%fkf#%%@k@fkfkfffk#@fk@f@ff%f@#f@fk@ := kfkfk%fffk@kk#f#fff##fffkkk@%k#@k%#kf@kff@%f#f#@f("cbcf6d02024512b612b61255ff")
		CritObj := CriticalObject({Variable: fff%k##kk#@k@fff@ffkf##kf#%f@#f%fff@#kff%@fk@})
		
       script:="
        ("
            Loop {
                CritObj := CriticalObject(A_Args[1])
				variable1 = `% CritObj.Variable
				var1++
				ToolTip, %variable1%%var1%
			}
        )"

		DllOn:=AhkThread(script,&CritObj)
    } else {
        DllOn.ahkTerminate.1
        GuiControl,,Alert, Stopped!
        GuiControl,,StartScript, START!
    }
return


;HOTKEY ORIGINAL NAME: Esc
Esc::ExitApp
GuiClose:
ExitApp

;*******************************************************************************
;                        O B F   D U M P   F U C T I O N S
;*******************************************************************************
;$OBFUSCATOR: $FUNCS_CHANGE_DEFAULTS: ,, -1
;FUNCTION ORIGINAL NAME: obf_dumpcommonobjfrags
@kkfffkfk@@kkfkf() {  
    global
	;SECURITY CLASS FRAG: for class: COMMON for char: f
	fkk#%kfk#fkf#%@%#kfkff%k#f%#k#fff@k%@ffffk#k=%#f@k@f%f%k##k@f%
	;SECURITY CLASS FRAG: for class: COMMON for char: k
	k#f%kfkfk##k%%f#f@@ff#%@#k#%#k#k%k%#f@kkf#k%#f@f@ffkk#k#=%k@k##k%k%fk@k%
	;SECURITY CLASS FRAG: for class: COMMON for char: @
	kfkff%@f@f@f%@f%fkk#kf%@ff%#kffkk%ffkf%#kkfk#%f@#k@kf@kk=%f@ff%@%k@f#kfk#%
	;SECURITY CLASS FRAG: for class: COMMON for char: #
	kkk%#k#fff@k%#k@%fkk@f@%@ff%@fkfk#%k@f@k=%k@#k@f%#%kkf@k@@f%

;TRIPLE MESS FRAGMENTS FOR: f
	#%#kf#f#%k%kkk#k@@ffk@f@k%%fkk#@k#f@ffffk#k%#f@kkff@f@fkf#kkfk:=f%k#f@#k#k#f@f@ffkk#k#%k#%kfkff@f@ffffkff@#k@kf@kk%k#f%k#fff@k@%@f%fkk#@k#f@ffffk#k%ffk#k
	k@%fkk#@k#f@ffffk#k%k%@ff#ffkf%k%k#f@#k#k#f@f@ffkk#k#%f%kkk#k@@ffk@f@k%%kfkfk##k%k@f@@f@kkk:=f%k#f@#k#k#f@f@ffkk#k#%%k#f@#k#k#f@f@ffkk#k#%%kkk#k@@ffk@f@k%@%kkf@k@@f%k#%@f@k#f%f@ffffk#k
	kk#%k#f@#k#k#f@f@ffkk#k#%ff#%f@k#@f%k%kfkff@f@ffffkff@#k@kf@kk%%fkk#@k#f@ffffk#k%k@k@ffk@f#:=fk%k#f@#k#k#f@f@ffkk#k#%%kkk#k@@ffk@f@k%@%k#f@#k#k#f@f@ffkk#k#%#f@%f@kf%ffffk#k
	#kk%kfk#fkf#%%#k#f@f%%kkk#k@@ffk@f@k%kkk%k#f@#k#k#f@f@ffkk#k#%@k%k#f@#k#k#f@f@ffkk#k#%#f@k@@f#f@f#k:=fk%@f@k#f%%k#f@#k#k#f@f@ffkk#k#%%fff#k#ff%#@%k#f@#k#k#f@f@ffkk#k#%#%fkk#@k#f@ffffk#k%@ffffk#k
	@%#k#k%f@k%kfkff@f@ffffkff@#k@kf@kk%k#kf@f%kkk#k@@ffk@f@k%f@f#k#kffk:=fkk%kkk#k@@ffk@f@k%@k%k@#k@f%%kkk#k@@ffk@f@k%%fkk#@k#f@ffffk#k%@ffffk#k
	kkf%@f#k@f%@#f%kkk#k@@ffk@f@k%ff%k#f@#k#k#f@f@ffkk#k#%f%kfkff@f@ffffkff@#k@kf@kk%kfk##f:=fk%k#f@#k#k#f@f@ffkk#k#%%kkk#k@@ffk@f@k%@%f@@fk@%%k#f@#k#k#f@f@ffkk#k#%#f%f@kf%@ffffk#k
	@f#f%k@kffk%#f%kkk#k@@ffk@f@k%kk%kfkff@f@ffffkff@#k@kf@kk%@k@fk#@f:=fkk%kkk#k@@ffk@f@k%@k#%fkff#kfk%f@f%fkk#@k#f@ffffk#k%ffk#k
	#k%#kffkk%@f%fkk#@k#f@ffffk#k%@kf@%#k#f@f%kfk%fkk#@k#f@ffffk#k%@fkk@#k:=fkk%ff#kfk%%kkk#k@@ffk@f@k%@%k#f@#k#k#f@f@ffkk#k#%%kkk#k@@ffk@f@k%f@ffffk#k
	#fffk%@f@k#f%%k#f@#k#k#f@f@ffkk#k#%fff%kfkff@f@ffffkff@#k@kf@kk%f#k#kk@k:=fk%k#f@#k#k#f@f@ffkk#k#%#%kfkff@f@ffffkff@#k@kf@kk%%f@ff%%#fk@%k%kkk#k@@ffk@f@k%f@ffffk#k
	fkk%#fkfff%f#%#kkk%f%fkk#@k#f@ffffk#k%%fkk#@k#f@ffffk#k%ffkffff#k#:=fk%k#f@#k#k#f@f@ffkk#k#%#@%k#f@#k#k#f@f@ffkk#k#%#f%kf#kkk%%fkfkkkk@%@ffffk#k
	ff%@f#k@f%k%kkfff@@f%#%fkk#@k#f@ffffk#k%%fkk#@k#f@ffffk#k%k@f#ff#f#fffff:=fk%k#f@#k#k#f@f@ffkk#k#%%kkk#k@@ffk@f@k%@k#%fkk@f@%f@ffffk#k
	kfk%fkk#@k#f@ffffk#k%ff#%f@ff%kf#k%f@ff%#k%fkk#@k#f@ffffk#k%#kff#fkfkk:=fk%k#kf%k%kkk#k@@ffk@f@k%%kfkff@f@ffffkff@#k@kf@kk%k#%@fk##kkf%f%kfkff@f@ffffkff@#k@kf@kk%ffffk#k
	k#f%fkk#@k#f@ffffk#k%@k%k#f@#k#k#f@f@ffkk#k#%%fkfkkkk@%#k%fkk##f%#k@kkk#@f:=fk%#fk@ffk@%%k#f@#k#k#f@f@ffkk#k#%%kkk#k@@ffk@f@k%@%k#f@#k#k#f@f@ffkk#k#%#f@ffffk#k
	@fk@%k#f@#k#k#f@f@ffkk#k#%f%k#f@#k#k#f@f@ffkk#k#%@%k#kf%%ff#f#fkf%#kfffkkkk@f@k#:=fkk%kkk#k@@ffk@f@k%%fkk#kf%@k%kkk#k@@ffk@f@k%%fkk#@k#f@ffffk#k%@ffffk#k
	k##f%@kfkff%fk@ff%kfkff@f@ffffkff@#k@kf@kk%kfkkk@%k#f@#k#k#f@f@ffkk#k#%##kk#:=fk%k#f@#k#k#f@f@ffkk#k#%#%kfkff@f@ffffkff@#k@kf@kk%k#f%kfkff@f@ffffkff@#k@kf@kk%ff%@fkfk#%ffk#k
	@fk##%k##k@f%kkk#%fkk#@k#f@ffffk#k%#k#kk@#%fkk#@k#f@ffffk#k%f@k#ff:=f%f@fkff%%f##kkf%kk%kkk#k@@ffk@f@k%@k%kkk#k@@ffk@f@k%f@ffffk#k
	fkk#%kkk#k@@ffk@f@k%fff@f%kkffkfkk%@f%fkk#@k#f@ffffk#k%##ff#:=f%k#f@#k#k#f@f@ffkk#k#%k%kkk#k@@ffk@f@k%@k%kkk#k@@ffk@f@k%f@%@kk@kfk@%ffffk#k
	k@k%#k#k%%kfkff@f@ffffkff@#k@kf@kk%k@f%kkk#k@@ffk@f@k%k@fkf%k#f@#k#k#f@f@ffkk#k#%fff@k#kk@f:=fk%fff#@f@f%k#%kfkff@f@ffffkff@#k@kf@kk%%k#f@#k#k#f@f@ffkk#k#%%kkk#k@@ffk@f@k%f@ffffk#k
	k%fff##ffk%k@k@k%fkk#@k#f@ffffk#k%%fkk#@k#f@ffffk#k%f#@%fkk#@k#f@ffffk#k%ffkfkkf@k@#k:=fk%k#f@#k#k#f@f@ffkk#k#%#@k%f@@fk@%#f%kfkff@f@ffffkff@#k@kf@kk%ff%fkk#@k#f@ffffk#k%fk#k
	kkk%#k#k%%kkk#k@@ffk@f@k%fkk%fkk#@k#f@ffffk#k%%k#f@#k#k#f@f@ffkk#k#%#kkkfff:=f%k#f@#k#k#f@f@ffkk#k#%k#%kfkff@f@ffffkff@#k@kf@kk%k#f@%fkf@@fkf%ffffk#k
;TRIPLE MESS FRAGMENTS FOR: k
	kf#%k@#kkff@%%fkk#@k#f@ffffk#k%@fkkf%kkk#k@@ffk@f@k%f#ffkk@ffkff@f:=k%ff@fffff%#f%kfkff@f@ffffkff@#k@kf@kk%#k%kkk#k@@ffk@f@k%k#f@f@ffkk#k#
	fk%#k#k%f#%f@fkff%f%kfkff@f@ffffkff@#k@kf@kk%k@%k#f@#k#k#f@f@ffkk#k#%%fkk#@k#f@ffffk#k%f#f#k@kfk#kf@k:=k#f@#%k#f@#k#k#f@f@ffkk#k#%%kkk#k@@ffk@f@k%k%kfk#fkf#%#f@f@ffkk#k#
	kfk%kkk#k@@ffk@f@k%@f%fkk#@k#f@ffffk#k%%kkk#k@@ffk@f@k%%#ff#%%#kffkk%#ff#f@ffkfkfkf:=k#%ff#f#fkf%f@#%k#f@#k#k#f@f@ffkk#k#%%f##kkf%%kkk#k@@ffk@f@k%k#f@f@ffkk#k#
	@f#%k#f@#k#k#f@f@ffkk#k#%@f#f@k%fk#kfffk%#kff%fkk#@k#f@ffffk#k%ff@fkf#:=k#%@f@k#f%f@%f##kkf%#k#%k#f@#k#k#f@f@ffkk#k#%%kkk#k@@ffk@f@k%f@f@ffkk#k#
	f%fkk#@k#f@ffffk#k%%#kkfk#%#kkkk##%fkk#@k#f@ffffk#k%k@k#fkk@ffkf@f:=k%k@#f@k%%kkk#k@@ffk@f@k%%kf@ffff#%%fkk#@k#f@ffffk#k%@#k%kkk#k@@ffk@f@k%k#f@f@ffkk#k#
	f%fkk#@k#f@ffffk#k%f#@f%kkk#k@@ffk@f@k%f@f#%@kfkff%k#f%#f@k@f%@fk@f@#f:=k#f%kfkff@f@ffffkff@#k@kf@kk%%k@@fk#ff%#%k#f@#k#k#f@f@ffkk#k#%#k%kkk#k@@ffk@f@k%f@f@ffkk#k#
	f@%f#f#kkfk%@ff@%k#f@#k#k#f@f@ffkk#k#%k#%fkk#@k#f@ffffk#k%kk@%f#kkk#@k%f@k@f@ff@ff:=k%kkk#k@@ffk@f@k%f%k@kffk%@%kkk#k@@ffk@f@k%k%fkff#kfk%#k#f@f@ffkk#k#
	k@%fk#kfffk%%kkf@k@@f%@k%fkk#@k#f@ffffk#k%%kkk#k@@ffk@f@k%k%kkk#k@@ffk@f@k%k@@kk@ffk#f@:=k%kkk#k@@ffk@f@k%%fkk#@k#f@ffffk#k%@#k#%k@#kkff@%k#%fkk#@k#f@ffffk#k%@f@ffkk#k#
	@%f@k#@f%ff%k@#kk#f#%k%kkk#k@@ffk@f@k%k%kfkff@f@ffffkff@#k@kf@kk%kk#@fkf#kf@f#:=k#f@%#k#k%%kkk#k@@ffk@f@k%%k#f@#k#k#f@f@ffkk#k#%#%k#f@#k#k#f@f@ffkk#k#%#f@f@ffkk#k#
	f@kkf%k#f@#k#k#f@f@ffkk#k#%k%ff#kfk%f#kkk%kfkff@f@ffffkff@#k@kf@kk%fkfk@kk:=k#%#k@f%%fkk#@k#f@ffffk#k%@#k%kkf@k@@f%#%k#f@#k#k#f@f@ffkk#k#%%kkk#k@@ffk@f@k%f@f@ffkk#k#
	k%k#f@#k#k#f@f@ffkk#k#%#%kkk##f%fk%kfkff@f@ffffkff@#k@kf@kk%k%fkk#@k#f@ffffk#k%%fk@k%#k#kffk@:=k%#fff%#f@%kffffk@f%%kkk#k@@ffk@f@k%%k#f@#k#k#f@f@ffkk#k#%%kkk#k@@ffk@f@k%k#f@f@ffkk#k#
	@kf%fkk#@k#f@ffffk#k%ff#%#ffkfk@f%%k#f@#k#k#f@f@ffkk#k#%f@#ffkkk@kkk:=k%kkk#k@@ffk@f@k%f@%f#k@@kkf%#k%kkk#k@@ffk@f@k%k#%fkk#@k#f@ffffk#k%@f@%#fkfff%ffkk#k#
	k#%f#k@@kkf%%fff#@f@f%%kfkff@f@ffffkff@#k@kf@kk%fkk%kfkff@f@ffffkff@#k@kf@kk%k#ffff@ffk#:=k#%k@#kkff@%f@%kkk#k@@ffk@f@k%%k#f@#k#k#f@f@ffkk#k#%#k#f@f@ffkk#k#
	f%f@@fk@%%k#f@#k#k#f@f@ffkk#k#%@k#k%kfkff@f@ffffkff@#k@kf@kk%f@fkk#f@kk@:=k#%fkk#@k#f@ffffk#k%@#k#k%kkk#k@@ffk@f@k%f%#fk@ffk@%@f@ffkk#k#
	kkf@%fkk#@k#f@ffffk#k%fk#@fk%f@kffk%ff##k%k#f@#k#k#f@f@ffkk#k#%ff@@k:=k#f@%kkk#k@@ffk@f@k%k#k%kkk#k@@ffk@f@k%f@f@%kkfff@@f%%f@kffk%ffkk#k#
	k#%kkk#k@@ffk@f@k%fk#%kkk#k@@ffk@f@k%kf#ffk%#kf@kff@%#f@f#@kkf:=k%kkk#k@@ffk@f@k%f%kfkff@f@ffffkff@#k@kf@kk%#k#%#fkfff%k#%@fk@kf%f@f@ffkk#k#
	k#%fkk#@k#f@ffffk#k%#@%fkff#kfk%k@kk%kkk#k@@ffk@f@k%f%kfkff@f@ffffkff@#k@kf@kk%@f@kkf#kk#k@:=k%kkk#k@@ffk@f@k%%fkk#@k#f@ffffk#k%@#k%kkk#k@@ffk@f@k%k%f##kkf%#f%kfk#fkf#%@f@ffkk#k#
	@%fkk#@k#f@ffffk#k%kf%#k#k%kk@%k#f@#k#k#f@f@ffkk#k#%k#k@fkkkkf#f#kf#:=k#f@%kf#f#f%#k#%@kfkkf%k#f@%fkk#@k#f@ffffk#k%@ff%k#f@#k#k#f@f@ffkk#k#%k#k#
	fk%#fkfff%f%fkk#@k#f@ffffk#k%@%f#kfkk%k%k#f@#k#k#f@f@ffkk#k#%@kk@k#k:=k#f@%#kkfk#%#k%kkk#k@@ffk@f@k%k#f@%ff#f#fkf%f@ff%k#f@#k#k#f@f@ffkk#k#%k#k#
	fffk@%k#f@#k#k#f@f@ffkk#k#%%kf@ffff#%k%kkk#k@@ffk@f@k%f#fff##fffkkk@:=k#f@%kkk#k@@ffk@f@k%k%kf@ffff#%#k#%fkk#@k#f@ffffk#k%@f@%#fkfff%ffkk#k#
;TRIPLE MESS FRAGMENTS FOR: @
	fk#%f#kkk#@k%%fkk#@k#f@ffffk#k%%kkk#k@@ffk@f@k%k#fkf%kfkff@f@ffffkff@#k@kf@kk%fff@kk@f@kkf@:=kf%k#f@#k#k#f@f@ffkk#k#%%f#kfkk%ff%@f@k#f%%kfkff@f@ffffkff@#k@kf@kk%%fkk#@k#f@ffffk#k%@ffffkff@#k@kf@kk
	@kf@#%kkk##f%fkk@k%kkk#k@@ffk@f@k%k#f#%fkk#@k#f@ffffk#k%fk:=k%fkk#@k#f@ffffk#k%kff@%#fkfff%f%kfkff@f@ffffkff@#k@kf@kk%%fkk#@k#f@ffffk#k%fffkff@#k@kf@kk
	@kk@%fkk#@k#f@ffffk#k%k#k%kkk#k@@ffk@f@k%k#kf%kkk##f%f@f%fff@#kff%kfkk:=kf%k@k##k%kff%kffffk@f%@f%kfkff@f@ffffkff@#k@kf@kk%f%fkk#@k#f@ffffk#k%ff%k#f@#k#k#f@f@ffkk#k#%ff@#k@kf@kk
	#%k#f@#k#k#f@f@ffkk#k#%%k#f@#k#k#f@f@ffkk#k#%kkkf%kf#kkk%kkf@kkfkf:=kfk%fkk#@k#f@ffffk#k%f@f@fff%@fff%fkff@%kkk#k@@ffk@f@k%k@kf@kk
	@%k#f@#k#k#f@f@ffkk#k#%kf#f%kkk#k@@ffk@f@k%fk%#k@f%f#%kkf@k@@f%ffk@kf@#k:=kfk%fkk#@k#f@ffffk#k%%fkk#@k#f@ffffk#k%@f%#fff%@f%@kfkkf%fffkff@#k@kf@kk
	fk%f#kkk#@k%#kkk%fkk#@k#f@ffffk#k%%fkk#@k#f@ffffk#k%k%f@k#@f%kkkff#k#f#f:=kfk%fkk#@k#f@ffffk#k%f@%f#f@@ff#%f@fff%fkk#@k#f@ffffk#k%kf%k@#kk#f#%f@#k@kf@kk
	f%kkk#k@@ffk@f@k%f%fff@f#%#%fff##ffk%#k%fkk#@k#f@ffffk#k%f%k#f@#k#k#f@f@ffkk#k#%kf@#kf#@f@f@k:=kfk%k@k##k%%#ff#%ff%kfkff@f@ffffkff@#k@kf@kk%f@%fkk#@k#f@ffffk#k%ff%fkk#@k#f@ffffk#k%kff@#k@kf@kk
	#kf%@f#k@f%%@f@k#f%%k#f@#k#k#f@f@ffkk#k#%f@%fkk#@k#f@ffffk#k%%kfkff@f@ffffkff@#k@kf@kk%f#kk@kkfk#kfffff:=kfkf%fkk#@k#f@ffffk#k%@f%#kkfk#%@f%fkk#@k#f@ffffk#k%ffk%fkk#@k#f@ffffk#k%f@#k@kf@kk
	f#k#%fk#kfffk%k@@fk%k#f@#k#k#f@f@ffkk#k#%%fk@k%k%fkk#@k#f@ffffk#k%@k#fk@@fffff:=k%f#kfkk%f%@kf@@k%%k#f@#k#k#f@f@ffkk#k#%ff@%fkk#@k#f@ffffk#k%@ff%fkk#@k#f@ffffk#k%fkff@#k@kf@kk
	k##kk%fkk##f%#%kfkff@f@ffffkff@#k@kf@kk%k@ff%fkk#@k#f@ffffk#k%@ffkf##kf#:=k%f#kkk#@k%fk%fkk#@k#f@ffffk#k%%fkk#@k#f@ffffk#k%@f@ff%fkk#@k#f@ffffk#k%fkff@#k@kf@kk
	#kff#%k#f@#k#k#f@f@ffkk#k#%@k@f%k#f@#k#k#f@f@ffkk#k#%f@k#%fkk#kf%kkfk%#fk@ffk@%fffkk:=k%k#kf%f%f#f#kkfk%kff@f%kfkff@f@ffffkff@#k@kf@kk%%fkk#@k#f@ffffk#k%fffkff@#k@kf@kk
	ff%k#f@#k#k#f@f@ffkk#k#%kf%f@kffk%#k%fkk#@k#f@ffffk#k%kf%k@fkkfkk%#kf#k##k:=kfk%@kf@@k%ff@%f#k@@kkf%f@f%fkk#@k#f@ffffk#k%f%fkk#@k#f@ffffk#k%%k#f@#k#k#f@f@ffkk#k#%ff@#k@kf@kk
	#k#%k#f@#k#k#f@f@ffkk#k#%k@k%ff@fffff%#f@f@f%fkk#@k#f@ffffk#k%kfff#ff#k@:=kfkf%kkk#f#ff%f@f@%fkk#@k#f@ffffk#k%f%f@fkff%f%fkk#@k#f@ffffk#k%kff@#k@kf@kk
	@f%k#f@#k#k#f@f@ffkk#k#%#k%k#f@#k#k#f@f@ffkk#k#%@%f#kk%f#k@f#kff:=kfkf%fkk#@k#f@ffffk#k%@f@f%@k#k#k%f%fkk#@k#f@ffffk#k%fkf%fkk#@k#f@ffffk#k%@#k@kf@kk
	fk#f%fkk#@k#f@ffffk#k%f@%kkk##f%k%k#f@#k#k#f@f@ffkk#k#%kk%kfkff@f@ffffkff@#k@kf@kk%@kfkf##k:=kfkf%kffk@ffk%f@f@%fkk#@k#f@ffffk#k%fffk%fkk#@k#f@ffffk#k%f@#k@kf@kk
	#fk#f%k#f@#k#k#f@f@ffkk#k#%kff%#ffkfk@f%k#ff%kfkff@f@ffffkff@#k@kf@kk%k@#k@k:=kfk%kk@f@f%ff@%fkk#@k#f@ffffk#k%@ff%fkk#@k#f@ffffk#k%fk%k@f#kfk#%ff%kfkff@f@ffffkff@#k@kf@kk%#k@kf@kk
	@k@f%f#k@k#%%k#kf%k%fkk#@k#f@ffffk#k%k%fkk#@k#f@ffffk#k%ffk#@fk@f@ff:=kfk%@fkfk#%%ff#f#fkf%ff@%fkk#@k#f@ffffk#k%@f%fkk#@k#f@ffffk#k%ffkff@#k@kf@kk
	f%kk@k#fk@%%k#f@#k#k#f@f@ffkk#k#%fk%@ff#ffkf%kff%kfkff@f@ffffkff@#k@kf@kk%k%k#f@#k#k#f@f@ffkk#k#%f@f#ffk#f#:=k%fkk#@k#f@ffffk#k%kf%k@kffk%%fkk#@k#f@ffffk#k%@%fkk#@k#f@ffffk#k%@f%#ffkfk@f%fffkff@#k@kf@kk
	#f%k@f#kfk#%kk%fkk#@k#f@ffffk#k%ff%k#f@#k#k#f@f@ffkk#k#%kfk%f@kkkf#f%@#ffkk#:=kfkf%fkk#@k#f@ffffk#k%@f@%fkk#@k#f@ffffk#k%f%#kkkf#ff%%fkk#@k#f@ffffk#k%fkff@#k@kf@kk
	fff%kkk#k@@ffk@f@k%f#@%f@kf%ff%k@kffk%%fkk#@k#f@ffffk#k%f#%kfkff@f@ffffkff@#k@kf@kk%ffffkfff@kf:=kfkff%#kfkff%%kfkff@f@ffffkff@#k@kf@kk%f%k@@k@k%%kfkff@f@ffffkff@#k@kf@kk%ffffkff@#k@kf@kk
;TRIPLE MESS FRAGMENTS FOR: #
	f%#fk@ffk@%#%k#f@#k#k#f@f@ffkk#k#%%k#f@#k#k#f@f@ffkk#k#%kf#%k#f@#k#k#f@f@ffkk#k#%f#kfffkkf#:=k%f@fkff%kk%kkk#k@@ffk@f@k%k%f@fkff%@%kfkff@f@ffffkff@#k@kf@kk%ffk@f@k
	k%k#f@#k#k#f@f@ffkk#k#%%fkk#@k#f@ffffk#k%#%k#f@#k#k#f@f@ffkk#k#%f%@kf@@k%kkf@fkkk:=kk%k#f@#k#k#f@f@ffkk#k#%#%@f@k#f%%k#f@#k#k#f@f@ffkk#k#%%kkk##f%@@ffk@f@k
	fk#f%k#f@#k#k#f@f@ffkk#k#%k#ff#%fkk##f%f@#%fkk#@k#f@ffffk#k%k%kffffk@f%@kk#kkk#f:=k%f@ff%k%k#f@#k#k#f@f@ffkk#k#%#%k#f@#k#k#f@f@ffkk#k#%%kfkff@f@ffffkff@#k@kf@kk%@ffk@f@k
	#k%#k@f%%@fff%f%kkk#k@@ffk@f@k%k@#%k#f@#k#k#f@f@ffkk#k#%#ff##kfk:=kkk%ff#f#fkf%%kkk#k@@ffk@f@k%%k#f@#k#k#f@f@ffkk#k#%@@ffk@f@k
	f%fkk#@k#f@ffffk#k%#fk%k@#kk#f#%fk%kkk#k@@ffk@f@k%@%kk@f@f%ffkk@#kff:=kk%@kfkkf%%k#f@#k#k#f@f@ffkk#k#%#k%kfkff@f@ffffkff@#k@kf@kk%@ffk@f@k
	k%kf#f#f%%kfkff@f@ffffkff@#k@kf@kk%%fkk#@k#f@ffffk#k%%k#kf%fkkf#@fk#fk:=k%k#f@#k#k#f@f@ffkk#k#%%k#f@#k#k#f@f@ffkk#k#%#k%f#k@k#%@@%fkk#@k#f@ffffk#k%fk@f@k
	#f%k@@fk#ff%k%f#k@@kkf%%kkk#k@@ffk@f@k%f%kfkff@f@ffffkff@#k@kf@kk%%kkk#k@@ffk@f@k%ff##f@fkfkf:=kk%#ff#%%k#f@#k#k#f@f@ffkk#k#%%kkk#k@@ffk@f@k%%k#f@#k#k#f@f@ffkk#k#%@@ffk@f@k
	#%@fk##kkf%k%k#f@#k#k#f@f@ffkk#k#%k%k#f@#k#k#f@f@ffkk#k#%%kkk#k@@ffk@f@k%%f@kkkf#f%@kf#fff@:=k%fkf#%%k#f@#k#k#f@f@ffkk#k#%%k#f@#k#k#f@f@ffkk#k#%%kkk#k@@ffk@f@k%k@@ffk@f@k
	@fk%k@#kk#f#%fkk%k@k##k%%kkk#k@@ffk@f@k%fkf%k#f@#k#k#f@f@ffkk#k#%##fk#:=k%k#f@#k#k#f@f@ffkk#k#%%#kkk%k#%k#f@#k#k#f@f@ffkk#k#%@%fkk@%@ffk@f@k
	k#%#k#fff@k%k#%fkk#@k#f@ffffk#k%@ff%k#f@#k#k#f@f@ffkk#k#%k%k#f@#k#k#f@f@ffkk#k#%ff@kk:=k%f#kk%k%k#f@#k#k#f@f@ffkk#k#%%fk@k%%kkk#k@@ffk@f@k%%k#f@#k#k#f@f@ffkk#k#%@@ffk@f@k
	@kk%kkk#k@@ffk@f@k%%#kffkk%f@%k#f@#k#k#f@f@ffkk#k#%#%fkk#@k#f@ffffk#k%@k@kff@k##kfk@f:=k%f@kkkf#f%%k#f@#k#k#f@f@ffkk#k#%%k#f@#k#k#f@f@ffkk#k#%%kkk#k@@ffk@f@k%k@@ffk@f@k
	#kf%kkk#k@@ffk@f@k%@f%kfkff@f@ffffkff@#k@kf@kk%k%fkk#@k#f@ffffk#k%%@fk##kkf%#@fkkkk:=k%k#f@#k#k#f@f@ffkk#k#%k#%#kkkf#ff%%k#f@#k#k#f@f@ffkk#k#%@@ffk@f@k
	@%fff@#kff%k%fff##ffk%ffk%kfkff@f@ffffkff@#k@kf@kk%ffk@%kfkff@f@ffffkff@#k@kf@kk%k@fk@@kk#kkf@:=kk%@ff#%k%kkk#k@@ffk@f@k%k%kfkff@f@ffffkff@#k@kf@kk%@f%fkk#@k#f@ffffk#k%k@f@k
	k@%fkk#@k#f@ffffk#k%ff%kkk#k@@ffk@f@k%@%#ffkfk@f%f%kfkff@f@ffffkff@#k@kf@kk%ffff@#k@k@f:=k%fff##ffk%%k#f@#k#k#f@f@ffkk#k#%k#%k#f@#k#k#f@f@ffkk#k#%@%kfkff@f@ffffkff@#k@kf@kk%ffk@f@k
	k%f#f#kkfk%k%#k#fff@k%f%kfkff@f@ffffkff@#k@kf@kk%%k#f@#k#k#f@f@ffkk#k#%k%fkk#@k#f@ffffk#k%k#k#f#k:=kkk%kkk#k@@ffk@f@k%k@@%fkff#kfk%ffk%kfkff@f@ffffkff@#k@kf@kk%f@k
	k#%ff@fffff%k%kkk#k@@ffk@f@k%kf%kf@ffff#%#%k#f@#k#k#f@f@ffkk#k#%k%kfkff@f@ffffkff@#k@kf@kk%ffkfff:=k%#k@f%k%k#f@#k#k#f@f@ffkk#k#%#k%kfkff@f@ffffkff@#k@kf@kk%@%fkk#@k#f@ffffk#k%fk@f@k
	f%k#f@#k#k#f@f@ffkk#k#%%kf#f#f%#k#%fkk#@k#f@ffffk#k%%kkk#k@@ffk@f@k%ff#@f@ffff#f#:=k%k#k@#kfk%%k#f@#k#k#f@f@ffkk#k#%k#%k#f@#k#k#f@f@ffkk#k#%@@ffk@f@k
	kk%kkk#k@@ffk@f@k%ff%kkk#k@@ffk@f@k%f%k@#k@f%f%fkk@%k#f#k#:=k%k#f@#k#k#f@f@ffkk#k#%k%@ff#%%fff@f#%%kkk#k@@ffk@f@k%%k#f@#k#k#f@f@ffkk#k#%@@ffk@f@k
	fkk%kkk#k@@ffk@f@k%kk#kf%kf#f#f%##%k#f@#k#k#f@f@ffkk#k#%fk#f@%k#f@#k#k#f@f@ffkk#k#%@f#fk@:=kk%#k#k%k%kkk#k@@ffk@f@k%k@%k@fkkfkk%%kfkff@f@ffffkff@#k@kf@kk%ffk@f@k
	f%fkk#@k#f@ffffk#k%%kfkff@f@ffffkff@#k@kf@kk%%#fk@%kkkk#f#kf#fk#:=k%k#f@#k#k#f@f@ffkk#k#%%k#fff@k@%k#%k#f@#k#k#f@f@ffkk#k#%@@ffk@f@k

} 

;$OBFUSCATOR: $FUNCS_RESTORE_DEFAULTS:

;$OBFUSCATOR: $FUNCS_CHANGE_DEFAULTS: ,, -1

;FUNCTION ORIGINAL NAME: obf_dumpunclassed
kf@f#f#k#kfffk#f() { 
    global
;OBF_FUNC name: obf_dumpcommonobjfrags
;OBF_FUNC name: obf_dumpunclassed
;OBF_FUNC name: obf_dumpunsecclasses
;OBF_FUNC name: obf_dumpall
	k%f#kkk#@k%%#fk@%k%k#ff@kk#k#k@kkk#@f%#%ff#kkkk##fk@k#fkk@ffkf@f%@%fkf#f@k@kff#f#k@kfk#kf@k%@fk@fk@=k%f@kkfkkf#kkk@fkfk@kk%kfk%fkf#f@k@kff#f#k@kfk#kf@k%#f%@kk@kfk@%#%f##kkf%k@k#fkf
	#k%#fkfff%@f%k##fk##kf#ffk#f@f#@kkf%k%kfk#@ff##ff#f@ffkfkfkf%k#%#k@ff@kf@kfkf@fkk@#k%ffk##k=kk%@ffk#k@kk#@fkf#kf@f#%fk%ff#kkkk##fk@k#fkk@ffkf@f%#f#%k@@kf#k#k@@kk@ffk#f@%@%#ffkfk@f%k#fkf
;OBF_FUNC name: encode_hidestr
	#f%ff@kkkk#f#kf#fk#%%kk@k@kfff#@fffkfkkf@k@#k%f%#fffkkfff@f#k#kk@k%%fkk##f%k@@fkk=f%#fk@ffk@%f%k#f#@k@kk#f@@f@kkf#kk#k@%#%f@kkkf#f%f%k@@kf#k#k@@kk@ffk#f@%f%fk@k#k@f@fkk#f@kk@%k@kk
	@%@kfkkf%fk%k@ffkkf#@fk#fk%%@kffk@ffk@@k@fk@@kk#kkf@%%kf@ffff#%f#ff#k#=ff%k#@fkk@k#ffff@ffk#%#fk%#f@kkf#k%fkk%#k#kk@k#f@f@ffkfff#ff#k@%kk
;OBF_FUNC name: encode_shifthexdigit
	k%@f#k@f#f@k#kfffff@fkf#%%@k@fkfkfffk#@fk@f@ff%f%@f#f#f#kk@@k@fk#@f%f%k@#k@f%%#fk@%k@fk@f@k=f%k@fff#@f@ffff@#k@k@f%%#kk#kkkk@kk#f@k@@f#f@f#k%%#k#f#f@kkff@f@fkf#kkfk%f%fkfkkkk@%ffkf#kff#
	@k%kf#kkk%f%#k#f#f@kkff@f@fkf#kkfk%k@%#k@ff@kf@kfkf@fkk@#k%f%k@@fk#ff%fk#ffk=f%kk@f@f%#%k@fkkkf#k@f@@f@kkk%%#k@ff@kf@kfkf@fkk@#k%ff%ffk#ffk@f#ff#f#fffff%kf#kff#
;OBF_FUNC name: createhexshiftkeys
	kk%k@kffk%%fk#f#k#fkf@fff@kk@f@kkf@%%#fffkkfff@f#k#kk@k%k@fffk@k=kk%@kk@fk#k#k#kff@fkfkk%%ff@fffff%%@fkfkk@kk#k@fkkkkf#f#kf#%@%k@k@k@f#k@fkfkfff@k#kk@f%f#kk#k@k
	k%fkff@kk@kk@k#k%k@%kkk##f%#%k@kffk%k@%fkk##fff@f@ff##ff#%k%kkf#kfkkf@fkkk%fff#kf=kk%#fk#fkkffk#ff@k@#k@k%k%@fk#kk@f#k@f#kff%ff%#kkkf#ff%%@f@k#f%#kk#k@k
;OBF_FUNC name: hidestr
	k%@kk#f@k#f@k@kff@k##kfk@f%%f#f@@ff#%k#%fkff@kk@kk@k#k%%fkkf#fffffkffff#k#%%#k#f@f%k@kkk@@k#f=@k%@f#k@f#f@k#kfffff@fkf#%#%@fk##kkk#f#k#kk@#ff@k#ff%f@%#ffkfk@f%fk@f@f@
	#f%fff#@f@f%%fk#fkk#ff#f@#fk@kk#kkk#f%fk%fff#f#@ffff#@ffffkfff@kf%f%f#kkkf#kf#kfffkkf#%f@fk#ff@=@k%#k#fff@k%k%#f@kkf#k%%f#kkkf#kf#kfffkkf#%%ffk#ffk@f#ff#f#fffff%f@fk@f@f@
;OBF_FUNC name: decode_hidestr
	f#@%k#@fkk@k#ffff@ffk#%#f%f##kkf%k@%#kf#@f@kf#@fkkkk%f@%fkf#f@k@kff#f#k@kfk#kf@k%k@k@=kfk%fkk##fff@f@ff##ff#%%k##fk##kf#ffk#f@f#@kkf%%@fk##kkf%kk#%fk@k%@kf#f#@f
	f#%kkk#f#ff%#%@fk##kkk#f#k#kk@#ff@k#ff%@%fkff@kk@kk@k#k%#f%k##fk##kf#ffk#f@f#@kkf%@fk=kfkf%f#kk%%k#f#@k@kk#f@@f@kkf#kk#k@%kk#@%@ffk#k@kk#@fkf#kf@f#%f#f#@f
;OBF_FUNC name: decode_hexshiftkeys
	f%f@fkff%#f%fkk#kk#kf##kfk#f@k@f#fk@%k#%k@k##k%@k%@ffk#k@kk#@fkf#kf@f#%%#k@ff@kf@kfkf@fkk@#k%kk#f@f=f%@kk#f@k#f@k@kff@k##kfk@f%k#%k@f#kfk#%%k@k##k%%k#k#f@ffkkkff@kk%kk#f#f#
	f@#%#f@kkf#k%ff%k#ff@kk#k#k@kkk#@f%fk%#kk#kkkk@kk#f@k@@f#f@f#k%ff#kf#k=f%#kf@%#k#%ff#fkfk#@ffkk@#kff%kk%#fk#f@#ff##f@fkfkf%f#f#
;OBF_FUNC name: decode_shifthexdigit
	#%kfk#@ff##ff#f@ffkfkfkf%%#f@k@f%#f%k@fkkkf#k@f@@f@kkk%@%#fk@ffk@%#f#kf@k#=@%f@kkfkkf#kkk@fkfk@kk%%#kfk#f@f%%ff#kkkk##fk@k#fkk@ffkf@f%%#fk#fkkffk#ff@k@#k@k%fkkf@k@kff
	k#%k@k@k@f#k@fkfkfff@k#kk@f%%fff#@f#f@f#k#f@fk@f@#f%k#%kkfff@@f%#f#%kkk##f%ff#f#k@=@%kk@k#fk@%%fff#k#ff%k%@kffff#kf@#ffkkk@kkk%%#kff#k@k@fkf@k#kkfkfffkk%%k#ff@kk#k#k@kkk#@f%kkf@k@kff
;OBF_FUNC name: fixescapes
	k%f@ff%fkf%@f@k#f%k%#kfkf@f@f#kk@kkfk#kfffff%f#%ffk#ffk@f#ff#f#fffff%#ffk@k@=k#k#%k#ff@kk#k#k@kkk#@f%k%kk@f@f%@kf%@f@k@k#kf@f#f@f#k#kffk%@kkkkf
	k%k#ff@kk#k#k@kkk#@f%f%#fk#fkkffk#ff@k@#k@k%k%f@kf%kff%k@k##k%@fk#@kkk=k#%k#@fkk@k#ffff@ffk#%#%#ffkfk@f%f%fkf#f@k@kff#f#k@kfk#kf@k%@%fk@k#k@f@fkk#f@kk@%ff@kkkkf

;OBF_LABEL name: StartG
	ffkf#%f#kkk#@k%k@fk%@kf@#fkk@k#k#f#ffk%k@f#ffk%#ff#%%@f@k@k#kf@f#f@f#k#kffk%kfk##kkk#ff#fk#f=f##f%k#k#kf#kk@ffkfff%%#fffkkfff@f#k#kk@k%#k%@kk@kfk@%#kf%k@@kf#k#k@@kk@ffk#f@%fff@#kkkk#f#k@
	kk%fkk##f%ffk%#kk#kkkk@kk#f@k@@f#f@f#k%%#kf#@f@kf#@fkkkk%%f@k#@f%fk%k@ffkkf#@fk#fk%@k#k@ff@#ffkfk#f=f##%fff##ffk%f#f#%ff#kkkk##fk@k#fkk@ffkf@f%#%#kfkff%kf%@f#k@f#f@k#kfffff@fkf#%fff@%#kf#k@#k#ff##kfk%kkkk#f#k@
;OBF_LABEL name: Esc

}


;FUNCTION ORIGINAL NAME: obf_dumpunsecclasses
k#@f#k@fk@#f@f() { 
    global


}

;$OBFUSCATOR: $FUNCS_RESTORE_DEFAULTS:

;FUNCTION ORIGINAL NAME: obf_dumpall
kkkfkk#f#k@k#fkf() {  
    global
;OBF_GLOBVAR name: COUNT
	%fkfk%%@ff#%%kkf@ffk#@fkff##kkff@@k%%fk@k#k@f@fkk#f@kk@%%fkk##fff@f@ff##ff#%k@k@k=fff%@kf@#fkk@k#k#f#ffk%f%#kffkk%@#%k##ffk@ff@kfkkk@k##kk#%@fk@
	k%@f@k@k#kf@f#f@f#k#kffk%k%#kf@%f%#f@k@f%%kkf@ffk#@fkff##kkff@@k%%k@fkkkf#k@f@@f@kkk%@ff@f#=f%#f@kkf#k%f%kkk#fkkfk#kkkfff%@%@f#f#f#kk@@k@fk#@f%%#kff#k@k@fkf@k#kkfkfffkk%#f@fk@
;OBF_GLOBVAR name: Variable
	#%fkk##f%k%#ffkfk@f%@%f@kkfkkf#kkk@fkfk@kk%k%k@fff#@f@ffff@#k@k@f%#%k##ffk@ff@kfkkk@k##kk#%ff#k=@%kkf@ffk#@fkff##kkff@@k%#%kf@ffff#%%k@fkkkf#k@f@@f@kkk%%@kfkkf%kkf#
	%fkk@%%#kf#k@#k#ff##kfk%%k##fk##kf#ffk#f@f#@kkf%%kfk#@ff##ff#f@ffkfkfkf%fk@=%kk@k#fk@%%fkfkkff@kkf@f#ffk#f#%%k@@kf#k#k@@kk@ffk#f@%%fkk#kk#kf##kfk#f@k@f#fk@%%#f@kkf#k%fkkf#
;OBF_GLOBVAR name: hexdigits
	%@f#k@f#f@k#kfffff@fkf#%%#fk#fkkffk#ff@k@#k@k%%@fkfk#%%f@@ff@kk#fkk@f@k@f@ff@ff%%k#fff@k@%@kk@f=k%#kf#k@#k#ff##kfk%%ffk#ffk@f#ff#f#fffff%%kffffk@f%%f@@ff@kk#fkk@f@k@f@ff@ff%f@kf
	ff%f@@ff@kk#fkk@f@k@f@ff@ff%%#k@ff@kf@kfkf@fkk@#k%f%fff@f#%##fkf=k%@kk#f@k#f@k@kff@k##kfk@f%%@f#k@f%f%k@@kf#k#k@@kk@ffk#f@%%@fk##kkk#f#k#kk@#ff@k#ff%@kf
;OBF_GLOBVAR name: decodekey
	@%f@@ff@kk#fkk@f@k@f@ff@ff%k%#kkk%k%#k#kk@k#f@f@ffkfff#ff#k@%f%@fk@kfk@#kfffkkkk@f@k#%@=#%#kffkk%%kk#fk@kf#k#kffk@%#%k@k##k%%kkf@ffk#@fkff##kkff@@k%kkk@
	%@fk##kkk#f#k#kk@#ff@k#ff%%@fkfkk#fkfk##fk#%%#kfkff%%kfkfff#kf#k#kf#kff#fkfkk%f#f=#%#f#k#f%k%#kkkk#@kf#fff@%k%fk@k#k@f@fkk#f@kk@%k%k#f#@k@kk#f@@f@kkf#kk#k@%@
;OBF_GLOBVAR name: ishexchar
	@%kkk#fkkfk#kkkfff%k%@fk##kkk#f#k#kk@#ff@k#ff%#f%fkk##f%k%fkf#%##k#f=@%fkfk%%fkk#kf%%fk@k#k@f@fkk#f@kk@%%f#kkkf#kf#kfffkkf#%%kkk#fkkfk#kkkfff%fff@
	f%@kf@#fkk@k#k#f#ffk%%@fk##kkk#f#k#kk@#ff@k#ff%%kkfff@@f%%@kk@fk#k#k#kff@fkfkk%%k@f#kfk#%k@ff=@%fff#@f@f%%f@@ff@kk#fkk@f@k@f@ff@ff%#%k@fkkkf#k@f@@f@kkk%fff@
;OBF_GLOBVAR name: useshiftkey
	@%fff#k#ff%%kkf@ffk#@fkff##kkff@@k%%#k#f#f@kkff@f@fkf#kkfk%%#fk@ffk@%k@kkk#k=k%fff#@f@f%k%#f@k@f%%fk#f#k#fkf@fff@kk@f@kkf@%f%k@fkkkf#k@f@@f@kkk%f%k#@fkk@k#ffff@ffk#%kf##k
	f%#k#f#f@kkff@f@fkf#kkfk%#%k@#kk#f#%%ff#kfk%k%fff#f#@ffff#@ffffkfff@kf%%kk@k@kfff#@fffkfkkf@k@#k%k@#f=k%#kffkk%k%@kf@#fkk@k#k#f#ffk%ff%kkk#fkkfk#kkkfff%kkf##k



;LOS vars for function  named: decode_hidestr
;OBF_FUNC_9_LOSVAR name: newstr
	k@kk%kkk##f%%fkf@@fkf%#%@fkfkk@kk#k@fkkkkf#f#kf#%@ff@%#k@ff@kf@kfkf@fkk@#k%kkfkkkffkk@kk=@fk%@k@fkfkfffk#@fk@f@ff%%kkf@ffk#@fkff##kkff@@k%%@fk##kkk#f#k#kk@#ff@k#ff%fk%@kf@@k%fk#kk@@k
	k%kk@k@kfff#@fffkfkkf@k@#k%fk%ff@fffff%k#%#kff#k@k@fkf@k#kkfkfffkk%kk%@f@k@k#kf@f#f@f#k#kffk%%@f@f@f%f@ff@f=@fk%kk#kfkk@%@kf%k@fkkkf#k@f@@f@kkk%kfk%k#k#kf#kk@ffkfff%k%kf#f@fkkf#f#ffkk@ffkff@f%@@k
;OBF_FUNC_9_LOSVAR name: startstrlen
	@fkkk#k%fff##ffk%f%fk#fkk#ff#f@#fk@kk#kkk#f%f#ff@@%kfk#@ff##ff#f@ffkfkfkf%fffkkfkf#f=fk%#k#f@f%%fk#fff@kkkk@@kfkf##k%%fkff@kk@kk@k#k%f@%fff##ffk%#%k##ffk@ff@kfkkk@k##kk#%f#fffkf##f
	k%#kkkkkfkkf@kkfkf%k@@f%@fkfkk@kk#k@fkkkkf#f#kf#%@%ff@fffff%kff@%#kfk#f@f%k#k#fkfkff=fk%#fkkfffkkfk@#ffkk#%%fff#@f@f%k%k#ff@kk#k#k@kkk#@f%%kkk#f#ff%@#%#k@ff@kf@kfkf@fkk@#k%f#fffkf##f
;OBF_FUNC_9_LOSVAR name: charnum
	@f@f%ff#kfk%#%kkk#f#ff%k#kf%k##ffk@ff@kfkkk@k##kk#%#%k##fk##kf#ffk#f@f#@kkf%k%kk#ff#ffk#f#k#%ffffkfk@#fkf=k%kfkfff#kf#k#kf#kff#fkfkk%k#%@fkfkk#fkfk##fk#%%kkf@k@@f%ff%@fkfk#%#%fff#@f#f@f#k#f@fk@f@#f%@fff#@ff#
	k#%@kk@kfk@%%kf#f@fkkf#f#ffkk@ffkff@f%@%#k#f#f@kkff@f@fkf#kkfk%kf#@%@kffff#kf@#ffkkk@kkk%kkk@k@@f#kf#@kkk=kfk%#kf@%##%kkk#fkkfk#kkkfff%f%kkf@kkfk#k#f#k%k@f%@f#f#f#kk@@k@fk#@f%f#@ff#
;OBF_FUNC_9_LOSVAR name: hinibble
	@%@ffk#k@kk#@fkf#kf@f#%%fff#f#@ffff#@ffffkfff@kf%%f##kkf%ff%#k@ff@kf@kfkf@fkk@#k%@f#%f@ff%kf@kkkf#fkkf#k#=#f@k%@f@k#f%k%@fkfkk#fkfk##fk#%%k@@kf#k#k@@kk@ffk#f@%##%#kk#kkkk@kk#f@k@@f#f@f#k%@fk#f@f@f@k#
	kk@%k@#kkff@%fk%kkk#fkkfk#kkkfff%f@f%ff#kkkk##fk@k#fkk@ffkf@f%%kk@k@kfff#@fffkfkkf@k@#k%ffk#fkffkk#=#%kk#kff#k@fk@k@ffk@f#%@kk#%@kk@kfk@%k#%#kfkff%#f@f%fff#@f#f@f#k#f@fk@f@#f%#f@f@f@k#
;OBF_FUNC_9_LOSVAR name: lownibble
	k@kkk%@kfkff%#f@kk%fk#kkkffkkkkff#k#f#f%%f@kkfkkf#kkk@fkfk@kk%f#f@%@fkfkk#fkfk##fk#%kfkffff=f%ff#fkfk#@ffkk@#kff%%#k#fff@k%kf%ffk#ffk@f#ff#f#fffff%kf@%k#@fkk@k#ffff@ffk#%kfk@fkk@f
	fff%kkffkfkk%k%k#fff@k@%f%kkf@#f#ffkf@kfk##f%kk@%@fkfkk@kk#k@fkkkkf#f#kf#%k#f#k@@fkk=f#%fkff@kk@kk@k#k%f%k@#k@f%%@fk##kkk#f#k#kk@#ff@k#ff%%fkff@kk@kk@k#k%f@kkfk@fkk@f
;OBF_FUNC_9_LOSVAR name: mybinary
	#%k@k@k@f#k@fkfkfff@k#kk@f%k%kfk#fkf#%%fff##ffk%%f@@ff@kk#fkk@f@k@f@ff@ff%#%@f#k@f#f@k#kfffff@fkf#%kf#fffkkf@=k@k#%k@@kf#k#k@@kk@ffk#f@%%f@kffk%@#%kkf@#f#ffkf@kfk##f%f@kfkfk#
	kf%fkfk%f%kf#f@fkkf#f#ffkk@ffkff@f%kk%k@fkkkf#k@f@@f@kkk%fk%fff#@f@f%%kk#kff#k@fk@k@ffk@f#%k@f##kkf=k@%@kffff#kf@#ffkkk@kkk%#k@%ff#fkfk#@ffkk@#kff%f%#k#k%f%fk#kkkffkkkkff#k#f#f%kfkfk#

;PARAMETERS for function  named: encode_hidestr
;OBF_FUNC_5_PARAM name: startstr
	f%#kfkff%%k#kf%@#%f@@ff@kk#fkk@f@k@f@ff@ff%kf%kkf@ffk#@fkff##kkff@@k%%kk#fk@kf#k#kffk@%f#f#ff#f=fkf%k@k@k@f#k@fkfkfff@k#kk@f%@%kk#kff#k@fk@k@ffk@f#%f%kkk#f#ff%kf#%k#k#kf#kk@ffkfff%ff##f
	fk@f@%#fk@ffk@%f#kk%kk@k#fk@%%k##ffk@ff@kfkkk@k##kk#%%ffk#ffk@f#ff#f#fffff%ff@fkkkk#k@kf=f%kk#fk@kf#k#kffk@%%@fk@kfk@#kfffkkkk@f@k#%f@%@fff%f%kkf@#f#ffkf@kfk##f%k%k@f#kfk#%f##ff##f
;PARAMETERS for function  named: encode_shifthexdigit
;OBF_FUNC_6_PARAM name: hexvalue
	f#k%ff#fkfk#@ffkk@#kff%#fk%kkf@kkfk#k#f#k%@kf%#k#f@f%#kf%k#@fkk@k#ffff@ffk#%@#%f#kfkk%kkkfkk#=#%k@#kk#f#%f%fff#@f#f@f#k#f@fk@f@#f%%fkk#kk#kf##kfk#f@k@f#fk@%f@@f@f@kkk@k
	kkf%kk@k#fk@%f%fkk##fff@f@ff##ff#%k#k%@fk##kkf%fkk%f#k#k@@fkkkf@k#fk@@fffff%@kkfffff=#f%f@kkkf#f%k#%#kk#kkkk@kk#f@k@@f#f@f#k%@@%#kk#kkkk@kk#f@k@@f#f@f#k%@f%#k#kk@k#f@f@ffkfff#ff#k@%kkk@k
;PARAMETERS for function  named: hidestr
;OBF_FUNC_8_PARAM name: thisstr
	#f%@fff%f%#kkkkkfkkf@kkfkf%%@fk##kkf%fk#%fff#@f#f@f#k#f@fk@f@#f%k%k##fk##kf#ffk#f@f#@kkf%f#kfk#@ff@kkkf=#k@%k@#f@k%f#%fk@k#k@f@fkk#f@kk@%%kkf@kkfk#k#f#k%k@f%kkk#fkkfk#kkkfff%#k#@f
	@%k@fkkkf#k@f@@f@kkk%%fffk@kk#f#fff##fffkkk@%@f%@kk@kfk@%f%kk#ff#ffk#f#k#%k@fkfkfff#f=#k%f#f#kkfk%%#fkkfffkkfk@#ffkk#%f%f#kkkf#kf#kfffkkf#%k#%k@@kf#k#k@@kk@ffk#f@%@ff#k#@f
;PARAMETERS for function  named: decode_hidestr
;OBF_FUNC_9_PARAM name: startstr
	f@%kkf@k@@f%k%#kkkkkfkkf@kkfkf%%#ff#%%@fk@kfk@#kfffkkkk@f@k#%fk%fff#@f#f@f#k#f@fk@f@#f%f#f@#k#ff#=kk@%@fk##kkf%f%k##kk#@k@fff@ffkf##kf#%%@f@k@k#kf@f#f@f#k#kffk%kkkfffk@
	k%@fk#kk@f#k@f#kff%k%k@fff#@f@ffff@#k@k@f%#k#f%fkfkkkk@%ff%@kffk@ffk@@k@fk@@kk#kkf@%kf@f#fk@kkk=kk@%#ff#%f@%@f@k@k#kf@f#f@f#k#kffk%k%fk@k#k@f@fkk#f@kk@%kfffk@
;PARAMETERS for function  named: decode_hexshiftkeys
;OBF_FUNC_10_PARAM name: startstr
	f%f#f#kkfk%f%f#f##kffkkf@#kf#@f@f@k%k@%#k@ff@kf@kfkf@fkk@#k%@kf@f##kkkkfkfkkk@@k=#k@%#ff#%%@ffk#k@kk#@fkf#kf@f#%kf%fkff@kk@kk@k#k%fkkk@@k
	#f%#k@ff@kf@kfkf@fkk@#k%%k@#f@k%@%fkfkkkk@%%kfk#@ff##ff#f@ffkfkfkf%##f#%fffk@kk#f#fff##fffkkk@%#fkf@kk@ffkffk#f=#%ff#kkkk##fk@k#fkk@ffkf@f%@%#kf@kff@%%fffk@kk#f#fff##fffkkk@%k%fkk##fff@f@ff##ff#%k%k@@k@k%fkkk@@k
;PARAMETERS for function  named: decode_shifthexdigit
;OBF_FUNC_11_PARAM name: hexvalue
	kf%kkf@k@@f%%@fkfkk@kk#k@fkkkkf#f#kf#%@k%@kffk@ffk@@k@fk@@kk#kkf@%%fkkf#fffffkffff#k#%ff@fkkkffk#f@=#%f@kffk%%fff#@f#f@f#k#f@fk@f@#f%f%#kkkk#@kf#fff@%f@%kk#ff#ffk#f#k#%kf@fffk
	#f#%kkf@ffk#@fkff##kkff@@k%f@kkf%kkk#fkkfk#kkkfff%f@kk%kkf@k@@f%#ff@k#=#%ff#f#fkf%%fkf#f@k@kff#f#k@kfk#kf@k%f%@kfkkf%#%kfkfff#kf#k#kf#kff#fkfkk%@%k#k#kf#kk@ffkfff%kf@fffk
;PARAMETERS for function  named: fixescapes
;OBF_FUNC_12_PARAM name: forstr
	kf%f@@ff@kk#fkk@f@k@f@ff@ff%#kkk@%k@fkkkf#k@f@@f@kkk%%@kf@@k%k#f#k#f@k=#kf%kf#f@fkkf#f#ffkk@ffkff@f%@%kkfff@@f%f%fff#@f#f@f#k#f@fk@f@#f%kfkkf@fkk
	f@@%@f@k#f%kf%fk#fff@kkkk@@kfkf##k%#k%k@#f@k%%fk@k#k@f@fkk#f@kk@%f@kf@k#=#kf%k@#kk#f#%k@%kkf@#f#ffkf@kfk##f%kk%@f@k@k#kf@f#f@f#k#kffk%kkf@fkk




}


;FUNCTION ORIGINAL NAME: encode_hidestr
ffk#fkfkk@kk(fkff@ffkf##ff##f) { 
	global
	static onechar, newstr, secstartstr, k#fkf@kf 
	
	k%#kkkk#@kf#fff@%%fkk@%f%@ff#ffkf%kf@kf = 0123456789abcdef

	kk@k@%kk@k@kfff#@fffkfkkf@k@#k%f#kk#k%kkffkfkk%@k()
		
	newstr = 
	;convert to hexidecimal
	loop, % strlen(fk%fkf@@fkf%f%@fk@kfk@#kfffkkkk@f@k#%@f%k@@fk#ff%fk%#fffkkfff@f#k#kk@k%##ff##f)
	{
		strascii = % asc(substr(%fk@f@f#kkffff@fkkkk#k@kf%%#kf#k@f@%%kkk##f%, a_index, 1))
		hinibble = % strascii // 16
		lownibble = % strascii - (hinibble * 16)
		
		;shift the hex digits in order to encrypt them
		hinibble := f#%ffk#ffk@f#ff#f#fffff%ff%f#f@@ff#%%fk#kfffk%ffkf#kff#(hinibble)
		lownibble := f%ff@kkkk#f#kf#fk#%%fk#kfffk%%fkk##fff@f@ff##ff#%ffffkf#kff#(lownibble)
		
		newstr .= substr(k%fff#@f@f%%k@fff#@f@ffff@#k@k@f%%kf#f#f%%@fk@kfk@#kfffkkkk@f@k#%kf@kf, hinibble + 1, 1) . substr(k%fk#k#f#ff#@f@ffff#f#%%ffk#ffk@f#ff#f#fffff%k%k#kf%f%f@@fk@%@kf, lownibble + 1, 1)
	}
	
	fk%@f#f#f#kk@@k@fk#@f%f@%k@f#kfk#%%fkf@@fkf%ffkf##ff##f := newstr
	;now i'll reverse the hex string
	newstr = 
	loop, % strlen(f%k#fff@k@%kf%#fk@%f@ff%f@kkfkkf#kkk@fkfk@kk%f##ff##f) 
		newstr = % substr(fk%f#kfkk%f%k@k@k@f#k@fkfkfff@k#kk@f%@ff%fk@k#k@f@fkk#f@kk@%f##ff##f, a_index, 1) . newstr
	
	;convert key values to hex values. i can convert directly to
	;single hex digits because my keys only range from 1-15
	allhexkeys =
	loop, 4
		allhexkeys .=  substr(k%ff#fkfk#@ffkk@#kff%%k@@k@k%f%#fk@%kf@kf, key%a_index% + 1, 1)
	
	;stuff the key values into the string starting at character 2
	newstr := substr(newstr, 1, 1) . allhexkeys . substr(newstr, 2)
	
	return, newstr
}


;FUNCTION ORIGINAL NAME: encode_shifthexdigit
f#fffffkf#kff#(#fk#f@@f@f@kkk@k) { 
	global
	
	;each time i enter this routine i will use the next key value
	;to shift the hexvalue
	%fff#@f@f%%fkf@@fkf%%@kfk@kkk#k%++
	if (kk%fff@#kff%%@fk#kk@f#k@f#kff%%k@f#kfk#%fffkkf##k > 4)
		%f#kk%%@kfk@kkk#k%%kfk#fkf#% = 1	
	
	;add the shift key to the hexvalue 
	#fk#%#k@ff@kf@kfkf@fkk@#k%%kkk#f#ff%@@f@f@kkk@k += key%#k#k%%kk@fffkkf##k%%#k#fff@k%
	
	;if i go over, just substract 16 to simulate a circle of hex
	if (#fk#%#kk#kkkk@kk#f@k@@f#f@f#k%@%kkfff@@f%@f@%#f@kkf#k%f@kkk@k > 15) 
		%k#kf%%f#k##fk#@kf#kfk@#kkkfkk#%%fkk@% -= 16
		
	return #f%@kffff#kf@#ffkkk@kkk%#f%@f@f@f%@@f%f#f##kffkkf@#kf#@f@f@k%f@%fff@f#%kkk@k
	
}


;FUNCTION ORIGINAL NAME: createhexshiftkeys
kk@k@ff#kk#k@k() { 
	global
	
	;create random 4 entry 'encrypt' key, each entry can be 1-15
	loop, 4
		random, key%a_index%, 1, 15
		
	kk%#fff%@%kfkfff#kf#k#kf#kff#fkfkk%%f#kk%f%kk@k@kfff#@fffkfkkf@k@#k%kkf##k = 0
}


;SKIPPED MOVING function: 'hidestr()' to OBF CODE


;FUNCTION ORIGINAL NAME: decode_hidestr
kfkfkkk#@kf#f#@f(kk@f@fkkkfffk@) {  
	global	
;$OBFUSCATOR: $DEFGLOBVARS: %fkk##f%%k@k@kk@f%%f#kk%
	critical
	static @fk@kffkfk#kk@@k, fk@kf@#ff#fffkf##f, kfk##ff#k@fff#@ff#, #f@kk#k##f@fk#f@f@f@k#, f#kffkf@kkfk@fkk@f, k@k#k@#ff@kfkfk#
;$OBFUSCATOR: $DEFLOSVARS: %#fk@ffk@%%k@kk#k@ff@fkkfkkkffkk@kk%%#kkk%, %f#k@k#%%@fkkk#kf#f#ff@@kfffkkfkf#f%%#fff%, kfk##%#kkfk#%ff#k%@kk@kfk@%@f%kk#kff#k@fk@k@ffk@f#%f#@ff#, #f@kk#%@fkfkk@kk#k@fkkkkf#f#kf#%##f%fkk@%@%@f@k#f%fk#f@f@f@k#, f#kff%k@@kf#k#k@@kk@ffk#f@%%k#fff@k@%f@k%f@kf%kfk@fkk@f, k@%@fkfkk@kk#k@fkkkkf#f#kf#%#k@#%k#kf%ff@%fff#@f#f@f#k#f@fk@f@#f%fkfk#

	k%k#k#f@ffkkkff@kk%%kf#f#f%f%#f@kkf#k%%kk#fk@kf#k#kffk@%f@kf = % "0123456789abcdef"
		
	f#k%#k#f@f%%k@fff#@f@ffff@#k@k@f%%@kffk@ffk@@k@fk@@kk#kkf@%kk#f#f#(k%k@#k@f%%k##fk##kf#ffk#f@f#@kkf%@%kkf@#f#ffkf@kfk##f%%kkk#f#ff%@fkkkfffk@)
	
	k%#kfk#f@f%k@f%fff#f#@ffff#@ffffkfff@kf%%kkf@#f#ffkf@kfk##f%kkkfffk@ = % substr(kk%f#f@@ff#%@f%f#k#k@@fkkkf@k#fk@@fffff%fkk%fkff#kfk%kfffk@, 1, 1) . substr(kk%k@f#kfk#%@%kkk#fkkfk#kkkfff%@f%f@kkfkkf#kkk@fkfk@kk%%fff@f#%kkfffk@, 6)
	fk@k%#kffkk%f@%fk#k#f#ff#@f@ffff#f#%f%k#ff@kk#k#k@kkk#@f%#fffkf##f = % strlen(%f@ff%%kkf@k@@f%%f@k@ffkkf#f@#k#ff#%)
		
	@f%@ffk#k@kk#@fkf#kf@f#%@kff%k@fkkfkk%kf%@kfkkf%k#kk@@k = 
	loop, % strlen(kk@%f#f@@ff#%%@f#f#f#kk@@k@fk#@f%@f%kf#f@fkkf#f#ffkk@ffkff@f%kkfffk@) 
		@%#kf@kff@%f%#f@k@f%k%#kkkkkfkkf@kkfkf%kffkfk#kk@@k = % substr(kk%#fk#fkkffk#ff@k@#k@k%%kk#kfkk@%%@f@f@f%f@fkkkfffk@, a_index, 1) . %@fk##kkf%%fff##ffk%%kffkk#@kkff@ff@f%
	
	kk%#kff#k@k@fkf@k#kkfkfffkk%%kk#kfkk@%f@fkkkfffk@ = % @f%fk#kfffk%%fk#kfffk%k@kf%@fk##kkk#f#k#kk@#ff@k#ff%kfk#kk@@k
	@fk@%f@kf%kffk%kk#kff#k@fk@k@ffk@f#%k#k%k#f#@k@kk#f@@f@kkf#kk#k@%@@k = 
	k%@fff%fk##f%k@k@k@f#k@fkfkfff@k#kk@f%#k%fff#f#@ffff#@ffffkfff@kf%fff#@ff# = 1
	loop
	{
		if (kf%#ff#%k##%@fk@kfk@#kfffkkkk@f@k#%f#%fff@f#%k%fkfkkff@kkf@f#ffk#f#%fff#@ff# >f%#kffkk%%fff#@f#f@f#k#f@fk@f@#f%@kf@#ff#fffkf##f)
			break
			
		%kk@fkff@fkfffk#fkffkk#%%kfkfk##k%%@f@f@f% = % substr(k%f@k#@f%k@%fkkf#fffffkffff#k#%@fkkkfffk@, kfk#%k@ffkkf#@fk#fk%ff#k@%f#k@k#%fff%ff@kkkk#f#kf#fk#%@ff#, 1)
		%kkk##f%%@k@fff@f#kf@kkkf#fkkf#k#%%#kf#f#% = % instr(k%kkf@kkfk#k#f#k%f%#kf#k@f@%%kkf@ffk#@fkff##kkff@@k%f%f#kfkk%@kf, #f@kk%ff@kkkk#f#kf#fk#%k%ff#fkfk#@ffkk@#kff%#f@fk#%k@@fk#ff%f@f@f@k#) - 1
		
		f#k%k@@fk#ff%f%kffk@ffk%fk%kkk#fkkfk#kkkfff%@%kkf@ffk#@fkff##kkff@@k%kfk@fkk@f = % substr(kk@f%@kkf#f#fkf#ffk@kf@#k%%@ff#ffkf%fkkkfffk@, kfk##%f@kkkf#f%f%kfkfff#kf#k#kf#kff#fkfkk%%ff@kkkk#f#kf#fk#%k@fff#@ff# + 1, 1)
		f#kffkf%#kkkkkfkkf@kkfkf%k%f#k@k#%kfk@fkk@f = % instr(k%kkf@k@@f%%#kf#@f@kf#@fkkkk%%kk#kff#k@fk@k@ffk@f#%kf@kf, f#kf%fff@f#%f%k#@fkk@k#ffff@ffk#%f@k%fk@k#k@f@fkk#f@kk@%fk@fkk@f) - 1
		
		%#fff%%@k@fff@f#kf@kkkf#fkkf#k#%%@f@k#f% := @k%fkf#f@k@kff#f#k@kfk#kf@k%%#kfkff%%fff@#kff%%@kkf#f#fkf#ffk@kf@#k%fkkf@k@kff(#f@kk#%k##k@f%k#%f#kkkf#kf#kfffkkf#%f@fk#f@f@f@k#)
		f#kf%kfkfff#kf#k#kf#kff#fkfkk%kf@kkfk%kkffkfkk%@fkk@f := @kk%fk#kkkffkkkkff#k#f#f%%k##ffk@ff@kfkkk@k##kk#%kk%kfk#fkf#%f@k@kff(f#k%k@k##k%ff%kf#f@fkkf#f#ffkk@ffkff@f%f@%k##fk##kf#ffk#f@f#@kkf%kfk%kkfff@@f%@fkk@f)
		
		k@k#k@#%f##kkf%ff@%k#@fkk@k#ffff@ffk#%fkfk# = % #%k@fkkkf#k@f@@f@kkk%@k%ff#f#fkf%k#k#%kf@ffff#%#f@fk#f@f@f@k# * 16 + f#kffkf%k@#kk#f#%@kkf%fffk@kk#f#fff##fffkkk@%@fkk@f
		@fk@%k#f#@k@kk#f@@f@kkf#kk#k@%f%fkk##fff@f@ff##ff#%k%@fkfk#%fk#kk@@k .= chr(k@k%@kffk@ffk@@k@fk@@kk#kkf@%k%f#k@k#%%f#k@k#%%fk#kkkffkkkkff#k#f#f%#ff@kfkfk#)
		
		%fff#k#ff%%k#k@fkf#@kkkk@k@@f#kf#@kkk%%k@#f@k% += 2		
	}
		
	%f#kk%%kffkk#@kkff@ff@f%%f@kkkf#f% = % k#k#%kkk##f%fk@kff%#fkkfffkkfk@#ffkk#%kkkkf(@fk%fk@k%@k%#ff#%ff%@ffk#k@kk#@fkf#kf@f#%f%fff#@f#f@f#k#f@fk@f@#f%#kk@@k)
		
	return, @fk%f#kk%@%k##fk##kf#ffk#f@f#@kkf%f%kkf@k@@f%%k@k@k@f#k@fkfkfff@k#kk@f%kfk#kk@@k	
}


;FUNCTION ORIGINAL NAME: decode_hexshiftkeys
f#k##kk#f#f#(#k@kkfkfkkk@@k) { 
	global
;$OBFUSCATOR: $DEFGLOBVARS: #%fff#@f@f%%k@@kf#k#k@@kk@ffk#f@%%ff@kkkk#f#kf#fk#%k%f@kkkf#f%kkk@, @%@kfkff%%fkf#f@k@kff#f#k@kfk#kf@k%#%kf#f#f%%k@k@k@f#k@fkfkfff@k#kk@f%fff@, kk@%#ff#%f%kkk#fkkfk#kkkfff%fkk%f@kffk%f##k
	
	#%kkk##f%%kf#f@fkkf#f#ffkk@ffkff@f%#%fffk@kk#f#fff##fffkkk@%%fff@f#%kkk@ := "fff@kkf1ffkfkfkfff#k1fk@kf#@fffk@#kk"
	%f@f@k@ff%%k@@fk#ff%%f#f#kkfk% := "fff@f1ff@kffkk#f1fffffkf"
	
	%kk@k#fk@%%#k#kkkk@%%kf#f#f%%#k@f%%@k#ffff@%%#kffkk%1 = % substr(#k%f#k#k@@fkkkf@k#fk@@fffff%kkf%fkk@%kfk%fff#@f#f@f#k#f@fk@f@#f%k@@k, 2, 1)
	%#kfk#f@f%%#k#kkkk@%%kkf@k@@f%%@ff#ffkf%%f@kf%%@k#ffff@%2 = % substr(#k@%k@kffk%kk%@f#f#f#kk@@k@fk#@f%%kkf@ffk#@fkff##kkff@@k%fkkk@@k, 3, 1)
	%fkfk%%fkfk%%#k#kkkk@%%#f@k@f%%#k#fff@k%%@k#ffff@%3 = % substr(%@kfkff%%ff@k@f@kf@f##kkkkfkfkkk@@k%%k@kffk%, 4, 1)
	%fff@#kff%%#k#kkkk@%%kf#kkk%%f@k#@f%%@k#ffff@%%fkff#kfk%4 = % substr(#k%kkf@k@@f%@kk%@fk##kkk#f#k#kk@#ff@k#ff%kfkkk@@k, 5, 1)
	
	loop, 4
		%k#k@#kfk%%@f#k@f%%#k#kkkk@%%a_index% = % instr(k%@f@f@f%%#k#fff@k%%ff#fkfk#@ffkk@#kff%f%kkf@ffk#@fkff##kkff@@k%f@kf, %fff##ffk%%#k#kkkk@%%@f@f@f%%#fk@ffk@%%@k#ffff@%%fkk##f%%a_index%) - 1
			
	kk@%kkf@#f#ffkf@kfk##f%ff%fkk##f%kkf%#kkk%##k = 0
}	


;FUNCTION ORIGINAL NAME: decode_shifthexdigit
@kk@fkkf@k@kff(#kf#f@#kf@fffk) { 
	global
	
	%f#kkk#@k%%@kfk@kkk#k%%fkfkkkk@%++
	if (kk%fff#f#@ffff#@ffffkfff@kf%f%k@#kk#f#%%fkf#%f%kk#kff#k@fk@k@ffk@f#%kkf##k > 4)
		%k@#k@f%%@kfk@kkk#k%%#k@f% = 1	
	
	#kf%k#k#f@ffkkkff@kk%f@%#kf#@f@kf#@fkkkk%kf@%f#f@@ff#%fffk -= %ff#f#fkf%%#k#kkkk@%%f@kf%%@kfkkf%%kk@fffkkf##k%%@fk@kf%
	
	if (%#f#kf@kkfff@kk#ff@k#%%fkk@%%ff@fffff% < 0) 
		#k%@fk@kfk@#kfffkkkk@f@k#%#%kf#kkk%f@#kf@fffk += 16
		
	return #kf#f@%fk#k#f#ff#@f@ffff#f#%kf@f%k@#kkff@%ffk	
}


;FUNCTION ORIGINAL NAME: fixescapes
k#k#fk@kff@kkkkf(#kfk@fkkfkkf@fkk) { 
	global
	
	StringReplace, #kfk@f%ff#kkkk##fk@k#fkk@ffkf@f%kf%@ff#ffkf%kkf@fkk, #k%k@k@k@f#k@fkfkfff@k#kk@f%k@f%fkff#kfk%kk%k##k@f%fkkf@fkk, % "````", % "``", all
	StringReplace, #kf%fkff@kk@kk@k#k%%f#k#k@@fkkkf@k#fk@@fffff%%k#kf%%f#kk%fkkfkkf@fkk, #%kf#kkk%kfk%@k@fkfkfffk#@fk@f@ff%f%ff#kkkk##fk@k#fkk@ffkf@f%kfkkf@fkk, % "``n", % "`n", all
	StringReplace, #%fff##ffk%kf%fkfkkkk@%k%#fkkfffkkfk@#ffkk#%fk%fffk@kk#f#fff##fffkkk@%fkkf@fkk, %@fk##kkf%%#kkk%%f@@kf@#kkf@kf@k#%, % "``r", % "`r", all
	StringReplace, #%ff#kkkk##fk@k#fkk@ffkf@f%%fff@#kff%fk%@fk#kk@f#k@f#kff%fkkfkkf@fkk, #kf%f@kkfkkf#kkk@fkfk@kk%@fkk%ff@fffff%fkkf@fkk, % "``,", % "`,", all
	StringReplace, #k%k@#kk#f#%%#k@ff@kf@kfkf@fkk@#k%k%@kkf#f#fkf#ffk@kf@#k%fkk%fk@k%fkkf@fkk, #kfk%@kk@fk#k#k#kff@fkfkk%fk%f@kkfkkf#kkk@fkfk@kk%fkkf%f#kkk#@k%@fkk, % "``%", % "`%", all	
	StringReplace, #k%k##k@f%f%fffk@kk#f#fff##fffkkk@%@f%kf#f@fkkf#f#ffkk@ffkff@f%kfkkf@fkk, #kfk@f%ff#kkkk##fk@k#fkk@ffkf@f%kf%kf#kkk%kkf@fkk, % "``;", % "`;", all	
	StringReplace, #kf%fkf#f@k@kff#f#k@kfk#kf@k%@fkkfk%kk@k#fk@%kf@fkk, #kfk%@kf@#fkk@k#k#f#ffk%fkkf%k#f#@k@kk#f@@f@kkf#kk#k@%k%kkfff@@f%f@fkk, % "``t", % "`t", all
	StringReplace, #kfk%@f#k@f%@f%fff#@f#f@f#k#f@fk@f@#f%k%kkf@#f#ffkf@kfk##f%kkf@fkk, %fff@#kff%%fkfkkkk@%%f@@kf@#kkf@kf@k#%, % "``b", % "`b", all
	StringReplace, %#k#fff@k%%kfk#kkk@fk#f#k#f@k%%kf#kkk%, #kfk@fk%f@@ff@kk#fkk@f@k@f@ff@ff%f%kf@ffff#%kkf@fkk, % "``v", % "`v", all
	StringReplace, #kf%k@@fk#ff%k@f%kffffk@f%kk%k@fkkkf#k@f@@f@kkk%%@ffk#k@kk#@fkf#kf@f#%kf@fkk, #kfk%kk#kfkk@%@f%fffk@kk#f#fff##fffkkk@%k%#ffkfk@f%fkkf@fkk, % "``a", % "`a", all
	
	StringReplace, #kfk@fk%@fkfkk@kk#k@fkkkkf#f#kf#%fkk%k##k@f%f@fkk, %@kfkkf%%f@@kf@#kkf@kf@k#%%#kfkff%, % """""", % """", all
	
	return %#f@k@f%%kfk#kkk@fk#f#k#f@k%%k@#k@f%
}

-----------------------------------------------------------
Stop to think, shut up to resist, and act to win!
NewberEnerNeeder1
Posts: 47
Joined: 26 Mar 2019, 06:06

Re: [TOOL] AHK Dynamic Obfuscator L - Protect your code by Obfuscation

18 Jul 2019, 21:12

lol@ahkstudent i also like that it uses fk so much haha

okay so i got the basic to work and have no idea how to do much more.

how do i obfuscate




"Loop, Read, C:\Program Files (x86)\myfile\myfile.txt"

"If A_loopreadline contains mykeyword"

or at least

"C:\Program Files (x86)\myfile\myfile.txt"
"mykeyword"

from this code below:

Code: Select all

Loop, Read, C:\Program Files (x86)\myfile\myfile.txt
{
	If A_loopreadline contains mykeyword
	{
		WordFound = 1
		break ; no need to continue running it 
	}



}

Return to “Scripts and Functions (v1)”

Who is online

Users browsing this forum: No registered users and 124 guests