nht_cntt

CryptoDragon AutoIt Obfuscator

Nov 5th, 2018
242
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; Title: CryptoDragon AutoIt Obfuscator
  2. ; Version: v1.3.6
  3. ; Requirements: AutoIt Version 3.1.1.0 (Beta is NOT required)
  4. ; Date: November 5th, 2018
  5. ; Authors: Freak, taurus905
  6. ; Purpose: This script obfuscates an AutoIt script by identifying, counting and replacing all
  7. ;          variables and functions within that script, as well as encrypting strings., according to the following notes.
  8. ; Notes: Variables that are all UPPERCASE, such as, $GUI_EVENT_CLOSE, will not be obfuscated.
  9. ;        Functions to be obfuscated must start with an underscore "_".
  10. ;        Functions that are all UPPERCASE, such as, _DO_NOT_OBFUSCATE_THIS, will not be obfuscated.
  11. ;        All strings with single and double quotes are to be encrypted with a multikey XOR algo. (in order)
  12. ;        Add arguments in the "Functions_NOT_to_obfuscate_section:" to bypass these functions.
  13. ;        Uncomment: (in the script)
  14. ;             Global $Show_Messages = "Yes"
  15. ;                  to show Message Boxes and Array Displays during execution.
  16. ; Input:            An AutoIt Script --> OriginalScriptName.au3
  17. ; Output: Variables to be Obfuscated --> OriginalScriptName - Vars to Obfuscate.txt
  18. ;         Functions to be Obfuscated --> OriginalScriptName - Funcs to Obfuscate.txt
  19. ;                       Random Names --> OriginalScriptName - Random Names.txt
  20. ;           CryptoDragon Obfuscated Script --> OriginalScriptName - CryptoDragon Obfuscated.au3
  21. ; Modified by Freak to encrypt all strings in target program with multichar XOR, also added bug fixes.
  22. ; Changelog
  23. ;   - Added improved speed in version v1.3.4
  24. ;   - Improved functionality in version v1.3.5.1
  25. ;   - Added string length to _CryptoDragon_Crypt function for improved stability handling funny strings in version v1.3.6
  26. ; ===================================================================================================
  27. #include <GUIConstants.au3>
  28. #include <Array.au3>
  29. Global $cryptLvl = 2
  30. ; Add this code to the obfuscated autoit file when finished
  31. ; ===================================================================================================
  32. Func _CryptoDragon_Crypt($s_String, $s_Key, $iLen, $s_Level = 1)
  33.     Local $s_Encrypted, $s_kc = 1
  34.     If StringLen($s_Key) = 0 Or $s_Level < 1 Then Return 0
  35.     $s_Key = StringSplit($s_Key,'')
  36.     $s_String = StringSplit($s_String,'')
  37.     For $x = 1 To $s_String[0]
  38.         If $s_kc > $s_Key[0] Then $s_kc = 1
  39.         $s_Encrypted &= Chr(BitXOR(Asc($s_String[$x]),Asc($s_Key[$s_kc])*$s_Level))
  40.         $s_kc += 1
  41.     Next
  42.     Return StringLeft($s_Encrypted, $iLen)
  43. EndFunc
  44. ;End of code
  45.  
  46. Global $Show_Messages = "No"
  47. ; Uncomment the following line to see progress messages and arrays during execution.
  48. ;Global $Show_Messages = "Yes"
  49. ; ===================================================================================================
  50.  
  51. Global $file_Script_to_Obfuscate
  52. _Choose_Script_to_Obfuscate() ; Choose Script to Obfuscate
  53.  
  54. ; ===================================================================================================
  55. ; Lines - Lines - Lines - Lines - Lines - Lines - Lines - Lines - Lines - Lines - Lines - Lines
  56.  
  57. Global $Num_of_Lines
  58. _Count_Lines() ; Count Lines of Script to Obfuscate
  59. If $Show_Messages = "Yes" Then MsgBox(0, "$Num_of_Lines", $Num_of_Lines)
  60.  
  61. Global $Array_of_Lines[$Num_of_Lines + 1]
  62. _Read_Lines_to_Array() ; Read Lines to Array
  63. If $Show_Messages = "Yes" Then _ArrayDisplay($Array_of_Lines, "$Array_of_Lines")
  64.  
  65. ; Lines - Lines - Lines - Lines - Lines - Lines - Lines - Lines - Lines - Lines - Lines - Lines
  66. ; ===================================================================================================
  67. ; Vars - Vars - Vars - Vars - Vars - Vars - Vars - Vars - Vars - Vars - Vars - Vars - Vars - Vars
  68.  
  69. Global $Num_of_Vars
  70. _Count_Vars() ; Count Variables in Script to Obfuscate
  71. If $Show_Messages = "Yes" Then MsgBox(0, "$Num_of_Vars", $Num_of_Vars)
  72.  
  73. Global $Array_of_Vars[$Num_of_Vars + 1]
  74. _Read_Vars_to_Array() ; Read Variables to Array
  75. If $Show_Messages = "Yes" Then _ArrayDisplay($Array_of_Vars, "$Array_of_Vars")
  76.  
  77. _Sort_Array_of_Vars() ; Sort Array of Variables
  78. If $Show_Messages = "Yes" Then _ArrayDisplay($Array_of_Vars, "$Array_of_Vars")
  79.  
  80. Global $Num_of_Unique_Vars
  81. _Count_Unique_Vars() ; Count Unique Variables
  82. If $Show_Messages = "Yes" Then MsgBox(0, "$Num_of_Unique_Vars", $Num_of_Unique_Vars)
  83.  
  84. Global $Array_of_Unique_Vars[$Num_of_Unique_Vars + 1]
  85. _Read_Unique_Vars_to_Array() ; Read Unique Variables to Array
  86. If $Show_Messages = "Yes" Then _ArrayDisplay($Array_of_Unique_Vars, "$Array_of_Unique_Vars")
  87.  
  88. _Write_Unique_Vars_to_File() ; Write Unique Variables to File
  89.  
  90. ; Vars - Vars - Vars - Vars - Vars - Vars - Vars - Vars - Vars - Vars - Vars - Vars - Vars - Vars
  91. ; ===================================================================================================
  92. ; Funcs - Funcs - Funcs - Funcs - Funcs - Funcs - Funcs - Funcs - Funcs - Funcs - Funcs - Funcs
  93.  
  94. Global $Num_of_Funcs
  95. _Count_Funcs() ; Count Functions in Script to Obfuscate
  96. If $Show_Messages = "Yes" Then MsgBox(0, "$Num_of_Funcs", $Num_of_Funcs)
  97.  
  98. Global $Array_of_Funcs[$Num_of_Funcs + 1]
  99. _Read_Funcs_to_Array() ; Read Functions to Array
  100. If $Show_Messages = "Yes" Then _ArrayDisplay($Array_of_Funcs, "$Array_of_Funcs")
  101.  
  102. _Sort_Array_of_Funcs() ; Sort Array of Functions
  103. If $Show_Messages = "Yes" Then _ArrayDisplay($Array_of_Funcs, "$Array_of_Funcs")
  104.  
  105. ; Funcs - Funcs - Funcs - Funcs - Funcs - Funcs - Funcs - Funcs - Funcs - Funcs - Funcs - Funcs
  106. ; ===================================================================================================
  107. ; Random - Random - Random - Random - Random - Random - Random - Random - Random - Random - Random
  108.  
  109. Global $Num_of_Random_Names
  110. _Find_Random_Name_Count() ; Find Random Name Count
  111.  
  112. Global $Random_Name[$Num_of_Random_Names + 1]
  113. _Read_Random_Names_to_Array() ; Read Random Names to Array
  114. If $Show_Messages = "Yes" Then _ArrayDisplay($Random_Name, "$Random_Name")
  115.  
  116. _Write_Random_Names_to_File() ; Write Random Names to File
  117.  
  118. ; Random - Random - Random - Random - Random - Random - Random - Random - Random - Random - Random
  119. ; ===================================================================================================
  120. ; Replace - Replace - Replace - Replace - Replace - Replace - Replace - Replace - Replace - Replace
  121.  
  122. Global $New_Array_of_Lines[$Num_of_Lines + 1]
  123. _Remove_Comments() ; Remove Comments
  124. _ArraySortDblDel($Array_of_Unique_Vars)
  125. _ArraySortDblDel($Array_of_Funcs)
  126. $vars_finished = False
  127. $func_finished = False
  128. $Script_Data = _ArrayToString($Array_of_Lines, @CRLF)
  129. For $iii = 0 To $Num_of_Lines
  130.     For $jjj = UBound($Array_of_Unique_Vars) - 1 To 1 Step -1
  131.         If $vars_finished Then ExitLoop
  132.         If $Array_of_Unique_Vars[$jjj] <> $Array_of_Unique_Vars[1] Then
  133.             If $Array_of_Unique_Vars[$jjj] <> "_" And $Array_of_Unique_Vars[$jjj] <> "$'" Then
  134.                 If StringInStr($Array_of_Unique_Vars[$jjj], ".") Then
  135.                     $temp = StringSplit($Array_of_Unique_Vars[$jjj], ".")
  136.                     $Array_of_Unique_Vars[$jjj] = $temp[1]
  137.                 EndIf
  138.                 If StringRight($Array_of_Unique_Vars[$jjj], 1) = "&" Then
  139.                     $Array_of_Unique_Vars[$jjj] = StringTrimRight($Array_of_Unique_Vars[$jjj], 1)
  140.                 EndIf
  141.                 $Script_Data = StringReplace($Script_Data, $Array_of_Unique_Vars[$jjj], "$" & $Random_Name[$jjj])
  142.                 ConsoleWrite($Array_of_Unique_Vars[$jjj] & ":$" & $Random_Name[$jjj] & @CRLF)
  143.             EndIf
  144.         Else
  145.             If $Array_of_Unique_Vars[$jjj] <> "_" And $Array_of_Unique_Vars[$jjj] <> "$'" Then
  146.                 If StringInStr($Array_of_Unique_Vars[$jjj], ".") Then
  147.                     $temp = StringSplit($Array_of_Unique_Vars[$jjj], ".")
  148.                     $Array_of_Unique_Vars[$jjj] = $temp[1]
  149.                 EndIf
  150.                 If StringRight($Array_of_Unique_Vars[$jjj], 1) = "&" Then
  151.                     $Array_of_Unique_Vars[$jjj] = StringTrimRight($Array_of_Unique_Vars[$jjj], 1)
  152.                 EndIf
  153.                 $Script_Data = StringReplace($Script_Data, $Array_of_Unique_Vars[$jjj], "$" & $Random_Name[$jjj])
  154.                 ConsoleWrite($Array_of_Unique_Vars[$jjj] & ":$" & $Random_Name[$jjj] & @CRLF)
  155.             EndIf
  156.             $vars_finished = True
  157.         EndIf
  158.     Next
  159. Next
  160. For $iii = 0 To $Num_of_Lines
  161.     For $jjj = UBound($Array_of_Funcs) - 1 To 1 Step -1
  162. ;       If StringLeft($Array_of_Funcs[$jjj], 1) = "_" Then ContinueLoop
  163.         If $func_finished Then ExitLoop
  164.         If $Array_of_Funcs[$jjj] <> $Array_of_Funcs[1] Then
  165.             If StringInStr($Array_of_Funcs[$jjj], "=") Then ContinueLoop ; Au3wrapper, not a function.
  166.             $Script_Data = StringReplace($Script_Data, $Array_of_Funcs[$jjj], $Random_Name[$jjj])
  167.             ConsoleWrite($Array_of_Funcs[$jjj] & ":" & $Random_Name[$jjj] & @CRLF)
  168.         Else
  169.             If StringInStr($Array_of_Funcs[$jjj], "=") Then
  170.                 $func_finished = True
  171.                 ContinueLoop ; Au3wrapper, not a function.
  172.             EndIf
  173.             $Script_Data = StringReplace($Script_Data, $Array_of_Funcs[$jjj], $Random_Name[$jjj])
  174.             ConsoleWrite($Array_of_Funcs[$jjj] & ":" & $Random_Name[$jjj] & @CRLF)
  175.             $func_finished = True
  176.         EndIf
  177.     Next
  178. Next
  179. If $Show_Messages = "Yes" Then _ArrayDisplay($Array_of_Lines, "$New_Array_of_Lines")
  180.  
  181. ; Replace - Replace - Replace - Replace - Replace - Replace - Replace - Replace - Replace - Replace
  182. ; ===================================================================================================
  183.  
  184. _Write_CryptoDragon_Obfuscated_File($Script_Data) ; Write CryptoDragon Obfuscated Script
  185. Exit
  186. Func _ArraySortDblDel(ByRef $ARRAY, $CASESENS=0, $iDESCENDING=0, $iDIM=0, $iSORT=0)
  187.     Local $arTmp1D[1], $arTmp2D[1][2], $dbl = 0
  188.     $arTmp1D[0] = ""
  189.     $arTmp2D[0][0] = ""
  190.     If $iDIM = 0 Then $iDIM = 1
  191.     _ArraySort($ARRAY,$iDESCENDING,0,0,$iDIM,$iSORT)
  192.     Switch $iDIM
  193.         Case 1 ; 1D
  194.             For $i = 0 To UBound($ARRAY)-1
  195.                 $dbl = 0
  196.                 For $k = 0 To UBound($arTmp1D)-1
  197.                     Switch $CASESENS
  198.                         Case 0
  199.                             If $arTmp1D[$k] = $ARRAY[$i] Then $dbl = 1
  200.                         Case 1
  201.                             If $arTmp1D[$k] == $ARRAY[$i] Then $dbl = 1
  202.                     EndSwitch
  203.                 Next
  204.                 If $dbl = 0 Then
  205.                     If $arTmp1D[0] = "" Then
  206.                         $arTmp1D[0] = $ARRAY[$i]
  207.                     Else
  208.                         _ArrayAdd($arTmp1D, $ARRAY[$i])
  209.                     EndIf
  210.                 Else
  211.                     $dbl = 0
  212.                 EndIf
  213.             Next
  214.             $ARRAY = $arTmp1D
  215.         Case 2 ; 2D
  216.             For $i = 0 To UBound($ARRAY)-1
  217.                 $dbl = 0
  218.                 For $k = 0 To UBound($arTmp2D)-1
  219.                     Switch $CASESENS
  220.                         Case 0
  221.                             If  ( $arTmp2D[$k][0] = $ARRAY[$i][0] ) And _
  222.                                 ( $arTmp2D[$k][1] = $ARRAY[$i][1] ) Then $dbl = 1
  223.                         Case 1
  224.                             If  ( $arTmp2D[$k][0] == $ARRAY[$i][0] ) And _
  225.                                 ( $arTmp2D[$k][1] == $ARRAY[$i][1] ) Then $dbl = 1
  226.                     EndSwitch
  227.                 Next
  228.                 If $dbl = 0 Then
  229.                     If $arTmp2D[0][0] = "" Then
  230.                         $arTmp2D[0][0] = $ARRAY[$i][0]
  231.                         $arTmp2D[0][1] = $ARRAY[$i][1]
  232.                     Else
  233.                         ReDim $arTmp2D[UBound($arTmp2D)+1][2]
  234.                         $arTmp2D[UBound($arTmp2D)-1][0] = $ARRAY[$i][0]
  235.                         $arTmp2D[UBound($arTmp2D)-1][1] = $ARRAY[$i][1]
  236.                     EndIf
  237.                 Else
  238.                     $dbl = 0
  239.                 EndIf
  240.             Next
  241.             $ARRAY = $arTmp2D
  242.     EndSwitch
  243. EndFunc ; ==>_ArraySortDblDel
  244. ; ###################################################################################################
  245. ; ===================================================================================================
  246. Func _Choose_Script_to_Obfuscate() ; Choose Script to Obfuscate
  247.     $file_Script_to_Obfuscate = FileOpenDialog("Choose an AutoIt Script to Obfuscate:", @ScriptDir, "Scripts (*.au3)", 1 + 2)
  248.     If @error Then Exit
  249. EndFunc ; ==> _Choose_Script_to_Obfuscate
  250. ; ===================================================================================================
  251. ; Lines - Lines - Lines - Lines - Lines - Lines - Lines - Lines - Lines - Lines - Lines - Lines
  252. Func _Count_Lines() ; Count Lines of Script to Obfuscate
  253.     FileOpen($file_Script_to_Obfuscate, 0) ; Open File to Obfuscate
  254.     $Num_of_Lines = 0
  255.     While 1
  256.         $Num_of_Lines = $Num_of_Lines + 1
  257.         FileReadLine($file_Script_to_Obfuscate, $Num_of_Lines) ; Read All Lines for Count
  258.         If @error = -1 Then ExitLoop
  259.     WEnd
  260. EndFunc ; ==> _Count_Lines
  261. ; ===================================================================================================
  262. Func _Read_Lines_to_Array() ; Read Lines to Array
  263.     For $iii = 1 To $Num_of_Lines
  264.         $Array_of_Lines[$iii] = FileReadLine($file_Script_to_Obfuscate, $iii) ; Read All Lines
  265.     Next
  266.     FileClose($file_Script_to_Obfuscate) ; Close File to Obfuscate
  267. EndFunc ; ==> _Read_Lines_to_Array
  268. ; Lines - Lines - Lines - Lines - Lines - Lines - Lines - Lines - Lines - Lines - Lines - Lines
  269. ; ===================================================================================================
  270. ; Vars - Vars - Vars - Vars - Vars - Vars - Vars - Vars - Vars - Vars - Vars - Vars - Vars - Vars
  271. Func _Count_Vars() ; Count Variables in Script to Obfuscate
  272.     $Num_of_Vars = 0
  273.     For $iii = 1 To $Num_of_Lines
  274.         Local $quote_on = "No"
  275.         $Array_of_Lines[0] = $Array_of_Lines[$iii]
  276.         Local $line_length = StringLen($Array_of_Lines[0])
  277.         For $jjj = 1 To $line_length
  278.             Local $char = StringLeft($Array_of_Lines[0], 1)
  279.             If $char = Chr(34) And $quote_on = "No" Then
  280.                 $quote_on = "Yes"
  281.             ElseIf $char = Chr(34) And $quote_on = "Yes" Then
  282.                 $quote_on = "No"
  283.             EndIf
  284.             If $char = ";" And $quote_on = "No" Then ExitLoop
  285.             If $char = "$" And $quote_on = "No" Then $Num_of_Vars = $Num_of_Vars + 1
  286.             $Array_of_Lines[0] = StringTrimLeft($Array_of_Lines[0], 1)
  287.         Next
  288.     Next
  289. EndFunc ; ==> _Count_Vars
  290. ; ===================================================================================================
  291. Func _Read_Vars_to_Array() ; Read Variables to Array
  292.     Local $var_ct = 0
  293.     For $iii = 1 To $Num_of_Lines
  294.         Local $quote_on = "No"
  295.         $Array_of_Lines[0] = $Array_of_Lines[$iii]
  296.         Local $line_length = StringLen($Array_of_Lines[0])
  297.         For $jjj = 1 To $line_length
  298.             Local $char = StringLeft($Array_of_Lines[0], 1)
  299.             If $char = Chr(34) And $quote_on = "No" Then
  300.                 $quote_on = "Yes"
  301.             ElseIf $char = Chr(34) And $quote_on = "Yes" Then
  302.                 $quote_on = "No"
  303.             EndIf
  304.             If $char = ";" And $quote_on = "No" Then ExitLoop
  305.             If $char = "$" And $quote_on = "No" Then ; Read One Variable
  306.                 $var_ct = $var_ct + 1
  307.                 $Array_of_Vars[$var_ct] = ""
  308.                 For $kkk = 1 To 256
  309.                     $char = StringLeft($Array_of_Lines[0], 1)
  310.                     If $char = " " Or _
  311.                             $char = "   " Or _
  312.                             $char = "=" Or _
  313.                             $char = "[" Or _
  314.                             $char = "]" Or _
  315.                             $char = "," Or _
  316.                             $char = ")" Or _
  317.                             $char = ";" Or _
  318.                             $char = "+" Or _
  319.                             $char = "-" Or _
  320.                             $char = "*" Or _
  321.                             $char = "/" Or _
  322.                             $char = Chr(34) Then ExitLoop
  323.                     $Array_of_Vars[$var_ct] = $Array_of_Vars[$var_ct] & $char
  324.                     $Array_of_Lines[0] = StringTrimLeft($Array_of_Lines[0], 1)
  325.                 Next
  326.             EndIf
  327.             $Array_of_Lines[0] = StringTrimLeft($Array_of_Lines[0], 1)
  328.         Next
  329.     Next
  330. EndFunc ; ==> _Read_Vars_to_Array
  331. ; ===================================================================================================
  332. Func _Sort_Array_of_Vars() ; Sort Array of Variables
  333.     _ArraySortDblDel($Array_of_Vars)
  334. EndFunc ; ==> _Sort_Array_of_Vars
  335. ; ===================================================================================================
  336. Func _Count_Unique_Vars() ; Count Unique Variables
  337.     $Num_of_Unique_Vars = 0
  338.     For $iii = 1 To UBound($Array_of_Vars) - 1
  339.         If $Array_of_Vars[$iii] <> $Array_of_Vars[$iii - 1] Then
  340.             If StringIsUpper(StringTrimLeft(StringReplace($Array_of_Vars[$iii], "_", ""), 1)) Then ContinueLoop ; Don't write any system variables that are all UPPERCASE, such as, $GUI_EVENT_CLOSE
  341.             $Num_of_Unique_Vars = $Num_of_Unique_Vars + 1
  342.         EndIf
  343.     Next
  344. EndFunc ; ==> _Count_Unique_Vars
  345. ; ===================================================================================================
  346. Func _Read_Unique_Vars_to_Array() ; Read Unique Variables to Array
  347.     Local $var_unique_ct = 0
  348.     For $iii = 1 To UBound($Array_of_Vars) - 1
  349.         If $Array_of_Vars[$iii] <> $Array_of_Vars[$iii - 1] Then
  350.             If StringIsUpper(StringTrimLeft(StringReplace($Array_of_Vars[$iii], "_", ""), 1)) Then ContinueLoop ; Don't read any System Variables that are all UPPERCASE, such as, $GUI_EVENT_CLOSE
  351.             $var_unique_ct = $var_unique_ct + 1
  352.             $Array_of_Unique_Vars[$var_unique_ct] = $Array_of_Vars[$iii]
  353.         EndIf
  354.     Next
  355. EndFunc ; ==> _Read_Unique_Vars_to_Array
  356. ; ===================================================================================================
  357. Func _Write_Unique_Vars_to_File() ; Write Unique Variables to File
  358.     Local $file_Unique_Vars = StringTrimRight($file_Script_to_Obfuscate, 4) & " - Vars to Obfuscate.txt" ; Create Unique Variables Filename
  359.     FileOpen($file_Unique_Vars, 2) ; Open File to Write Unique Variables
  360.     For $iii = 1 To $Num_of_Unique_Vars
  361.         FileWrite($file_Unique_Vars, $Array_of_Unique_Vars[$iii] & @CRLF)
  362.     Next
  363.     FileClose($file_Unique_Vars) ; Close Unique Variables File
  364. EndFunc ; ==> _Write_Unique_Vars_to_File
  365. ; Vars - Vars - Vars - Vars - Vars - Vars - Vars - Vars - Vars - Vars - Vars - Vars - Vars - Vars
  366. ; ===================================================================================================
  367. ; Funcs - Funcs - Funcs - Funcs - Funcs - Funcs - Funcs - Funcs - Funcs - Funcs - Funcs - Funcs
  368. Func _Count_Funcs() ; Count Functions in Script to Obfuscate
  369.     $Num_of_Funcs = 0
  370.     For $iii = 1 To $Num_of_Lines
  371.         Local $quote_on = "No"
  372.         Local $var_on = "No"
  373.         Local $func_on = "No"
  374.         $Array_of_Lines[0] = $Array_of_Lines[$iii]
  375.         Local $line_length = StringLen($Array_of_Lines[0])
  376.         For $jjj = 1 To $line_length
  377.             Local $char = StringLeft($Array_of_Lines[0], 1)
  378.             If $char = "(" Or $char = " " Then $func_on = "No"
  379.             If $char = "$" And $quote_on = "No" Then $var_on = "Yes"
  380.             If $char = "@" And $quote_on = "No" Then $var_on = "Yes"
  381.             If $char = "<" And $quote_on = "No" Then $var_on = "Yes"
  382.             If $char = " " And $quote_on = "No" Then $var_on = "No"
  383.             If $char = Chr(34) And $quote_on = "No" Then
  384.                 $quote_on = "Yes"
  385.             ElseIf $char = Chr(34) And $quote_on = "Yes" Then
  386.                 $quote_on = "No"
  387.             EndIf
  388.             If $char = ";" And $quote_on = "No" Then ExitLoop
  389.             If $quote_on = "No" And $func_on = "No" And $var_on = "No" Then
  390.                 $func_on = "Yes"
  391.                 $Num_of_Funcs = $Num_of_Funcs + 1
  392.             EndIf
  393.             $Array_of_Lines[0] = StringTrimLeft($Array_of_Lines[0], 1)
  394.         Next
  395.     Next
  396. EndFunc ; ==> _Count_Funcs
  397. ; ===================================================================================================
  398. Func _Read_Funcs_to_Array() ; Read Functions to Array
  399.     Local $func_ct = 0
  400.     For $iii = 1 To $Num_of_Lines
  401.         Local $quote_on = "No"
  402.         Local $var_on = "No"
  403.         Local $func_on = "No"
  404.         $Array_of_Lines[0] = $Array_of_Lines[$iii]
  405.         Local $line_length = StringLen($Array_of_Lines[0])
  406.         For $jjj = 1 To $line_length
  407.             Local $char = StringLeft($Array_of_Lines[0], 1)
  408.             If $char = "(" Or $char = " " Then $func_on = "No"
  409.             If $char = "$" And $quote_on = "No" Then $var_on = "Yes"
  410.             If $char = "@" And $quote_on = "No" Then $var_on = "Yes"
  411.             If $char = "<" And $quote_on = "No" Then $var_on = "Yes"
  412.             If $char = " " And $quote_on = "No" Then $var_on = "No"
  413.             If $char = Chr(34) And $quote_on = "No" Then
  414.                 $quote_on = "Yes"
  415.             ElseIf $char = Chr(34) And $quote_on = "Yes" Then
  416.                 $quote_on = "No"
  417.             EndIf
  418.             If $char = ";" And $quote_on = "No" Then ExitLoop
  419.             If $char = "_" And $quote_on = "No" And $func_on = "No" And $var_on = "No" Then ; Read One Function
  420.                 $func_ct = $func_ct + 1
  421.                 $Array_of_Funcs[$func_ct] = ""
  422.                 For $kkk = 1 To 256
  423.                     $char = StringLeft($Array_of_Lines[0], 1)
  424.                     If $char = " " Or $char = "(" Then ExitLoop
  425.                     $Array_of_Funcs[$func_ct] = $Array_of_Funcs[$func_ct] & $char
  426.                     $Array_of_Lines[0] = StringTrimLeft($Array_of_Lines[0], 1)
  427.                 Next
  428.                 ; Functions_NOT_to_obfuscate_section:
  429.                 ; Add functions to the following lines that start with an underscore "_" that you
  430.                 ;    do NOT want to be obfuscated. Example:
  431.                 ; If $Array_of_Funcs[$func_ct] = "_ArraySortDblDel" Or _
  432.                 If $Array_of_Funcs[$func_ct] = "_ArraySortDblDel" Or _
  433.                         $Array_of_Funcs[$func_ct] = "_ArrayDisplay" Or _
  434.                         $Array_of_Funcs[$func_ct] = "_ChooseColor" Or _
  435.                         $Array_of_Funcs[$func_ct] = "_ChooseFont" Or _
  436.                         $Array_of_Funcs[$func_ct] = "_ImageGetSize" Or _
  437.                         $Array_of_Funcs[$func_ct] = "_IsPressed" Or _
  438.                         $Array_of_Funcs[$func_ct] = "_StringEncrypt" Or _
  439.                         $Array_of_Funcs[$func_ct] = "_" Then ; Do NOT Count Built-In Functions
  440.                     $func_ct = $func_ct - 1
  441.                 EndIf
  442.             EndIf
  443.             $Array_of_Lines[0] = StringTrimLeft($Array_of_Lines[0], 1)
  444.         Next
  445.     Next
  446. EndFunc ; ==> _Read_Funcs_to_Array
  447. ; ===================================================================================================
  448. Func _Sort_Array_of_Funcs() ; Sort Array of Functions
  449.     _ArraySortDblDel($Array_of_Funcs)
  450. EndFunc ; ==> _Sort_Array_of_Funcs
  451. ; ===================================================================================================
  452. ; Funcs - Funcs - Funcs - Funcs - Funcs - Funcs - Funcs - Funcs - Funcs - Funcs - Funcs - Funcs
  453. ; ===================================================================================================
  454.  
  455. Func _Find_Random_Name_Count() ; Find Random Name Count
  456.     If $Num_of_Unique_Vars > $Num_of_Funcs Then
  457.         $Num_of_Random_Names = $Num_of_Vars
  458.     Else
  459.         $Num_of_Random_Names = $Num_of_Funcs
  460.     EndIf
  461. EndFunc ; ==> _Find_Random_Name_Count
  462. ; ===================================================================================================
  463. Func _Read_Random_Names_to_Array() ; Read Random Names to Array
  464.     Local $random[9]
  465.     For $iii = 1 To $Num_of_Random_Names
  466.         $Random_Name[$iii] = ""
  467.         For $jjj = 1 To 8 ; The number of random characters to use in each random name
  468.             $random[$jjj] = Random(48, 122, 1)
  469.             If $random[$jjj] > 64 And $random[$jjj] < 91 Or $random[$jjj] > 96 And $random[$jjj] < 123 Then
  470.                 $Random_Name[$iii] = $Random_Name[$iii] & Chr($random[$jjj])
  471.             Else
  472.                 $jjj = $jjj - 1
  473.                 ContinueLoop
  474.             EndIf
  475.         Next
  476.     Next
  477.     Return $Random_Name
  478. EndFunc ; ==> _Read_Random_Names_to_Array
  479. ; ===================================================================================================
  480. Func _Write_Random_Names_to_File() ; Write Random Names to File
  481.     Local $file_Random_Names = StringTrimRight($file_Script_to_Obfuscate, 4) & " - Random Names.txt" ; Create Random Names Filename
  482.     FileOpen($file_Random_Names, 2) ; Open File to Write Random Names
  483.     For $iii = 1 To $Num_of_Random_Names
  484.         FileWrite($file_Random_Names, $Random_Name[$iii] & @CRLF)
  485.     Next
  486.     FileClose($file_Random_Names) ; Close Random Names File
  487.     Return $Random_Name
  488. EndFunc ; ==> _Write_Random_Names_to_File
  489.  
  490. ; Random - Random - Random - Random - Random - Random - Random - Random - Random - Random - Random
  491. ; ===================================================================================================
  492. ; Replace - Replace - Replace - Replace - Replace - Replace - Replace - Replace - Replace - Replace
  493.  
  494. ; ===================================================================================================
  495. Func _Remove_Comments() ; Remove Comments
  496.     For $iii = 1 To $Num_of_Lines
  497.         Local $quote_on = "No"
  498.         $Array_of_Lines[0] = $Array_of_Lines[$iii]
  499.         Local $line_length = StringLen($Array_of_Lines[0])
  500.         $New_Array_of_Lines[$iii] = ""
  501.         For $jjj = 1 To $line_length
  502.             Local $char = StringLeft($Array_of_Lines[0], 1)
  503.             If $char = Chr(34) And $quote_on = "No" Then
  504.                 $quote_on = "Yes"
  505.             ElseIf $char = Chr(34) And $quote_on = "Yes" Then
  506.                 $quote_on = "No"
  507.             EndIf
  508.             If $char = ";" And $quote_on = "No" Then ExitLoop
  509.             $New_Array_of_Lines[$iii] = $New_Array_of_Lines[$iii] & $char
  510.             $Array_of_Lines[0] = StringTrimLeft($Array_of_Lines[0], 1)
  511.         Next
  512.     Next
  513.     Return $New_Array_of_Lines
  514. EndFunc ; ==> _Remove_Comments
  515.  
  516. ; Replace - Replace - Replace - Replace - Replace - Replace - Replace - Replace - Replace - Replace
  517. ; ===================================================================================================
  518. Func _StringBetween($S_STRING, $S_START, $S_END, $V_CASE = -1)
  519.     Local $S_CASE = ""
  520.     If $V_CASE = Default Or $V_CASE = -1 Then $S_CASE = "(?i)"
  521.     Local $S_PATTERN_ESCAPE = "(\.|\||\*|\?|\+|\(|\)|\{|\}|\[|\]|\^|\$|\\)"
  522.     $S_START = StringRegExpReplace($S_START, $S_PATTERN_ESCAPE, "\\$1")
  523.     $S_END = StringRegExpReplace($S_END, $S_PATTERN_ESCAPE, "\\$1")
  524.     If $S_START = "" Then $S_START = "\A"
  525.     If $S_END = "" Then $S_END = "\z"
  526.     Local $A_RET = StringRegExp($S_STRING, "(?s)" & $S_CASE & $S_START & "(.*?)" & $S_END, 3)
  527.     If @error Then Return SetError(1, 0, 0)
  528.     Return $A_RET
  529. EndFunc   ;==>_STRINGBETWEEN
  530. Func _Add_Strings($aList, $AU3, $splitChar)
  531.     Global $sPass = ""
  532.     Dim $sRndChr[3]
  533.     Local $Digits = 8
  534.     For $i = 1 To $Digits
  535.         $sRndChr[0] = Chr(Random(65, 90, 1))
  536.         $sRndChr[1] = Chr(Random(97, 122, 1))
  537.         $sRndChr[2] = Chr(Random(48, 57, 1))
  538.         $sPass &= $sRndChr[Random(0, 2, 1)]
  539.     Next
  540.     Local $doneEncryption = False
  541.     Local $newAU3 = $AU3
  542.     _ArraySortDblDel($aList)
  543.     For $A = 0 To UBound($aList) - 1
  544.         If StringInStr($aList[$A], @CRLF) Then
  545.             ContinueLoop
  546.         ElseIf $aList[$A] <> "" And StringInStr($aList[$A], "_CryptoDragon_Crypt") = False And StringLeft($aList[$A], 1) <> "'" And StringRight($aList[$A], 1) <> "'" And StringLeft($aList[$A], 1) <> '"' And StringRight($aList[$A], 1) <> '"' And StringLen($aList[$A]) > 1 Then
  547.             If StringInStr($aList[$A], "&") Then
  548.                 If StringRight($aList[$A], 1) = "&" Then
  549.                     $newAU3 = StringReplace($newAU3, $splitChar & StringTrimRight($aList[$A], 1) & $splitChar, " & _CryptoDragon_Crypt(BinaryToString('" & StringToBinary(_CryptoDragon_Crypt(StringTrimRight($aList[$A], 1), $sPass, StringLen(StringTrimRight($aList[$A], 1)), $cryptLvl)) & "'), BinaryToString('" & StringToBinary($sPass) & "'), " & String(StringLen($aList[$A]) - 1) & ", " & String($cryptLvl) & ")&")
  550.                     ConsoleWrite($splitChar & StringTrimRight($aList[$A], 1) & $splitChar & ":_CryptoDragon_Crypt(BinaryToString('" & StringToBinary(_CryptoDragon_Crypt(StringTrimRight($aList[$A], 1), $sPass, StringLen(StringTrimRight($aList[$A], 1)), $cryptLvl)) & "'), BinaryToString('" & StringToBinary($sPass) & "'), " & String(StringLen($aList[$A]) - 1) & ", " & String($cryptLvl) & ")&" & @CRLF)
  551.                 ElseIf StringRight($aList[$A], 2) = "& " Then
  552.                     $newAU3 = StringReplace($newAU3, $splitChar & StringTrimRight($aList[$A], 2) & $splitChar, "_CryptoDragon_Crypt(BinaryToString('" & StringToBinary(_CryptoDragon_Crypt(StringTrimRight($aList[$A], 2), $sPass, StringLen(String($aList[$A]) - 2), $cryptLvl)) & "'), BinaryToString('" & StringToBinary($sPass) & "'), " & String(StringLen($aList[$A]) - 2) & ", " & String($cryptLvl) & ") & ")
  553.                     ConsoleWrite($splitChar & StringTrimRight($aList[$A], 2) & $splitChar & ":_CryptoDragon_Crypt(BinaryToString('" & StringToBinary(_CryptoDragon_Crypt(StringTrimRight($aList[$A], 2), $sPass, StringLen(String($aList[$A]) - 2), $cryptLvl)) & "'), BinaryToString('" & StringToBinary($sPass) & "'), " & String(StringLen($aList[$A]) - 2) & ", " & String($cryptLvl) & ") &" & @CRLF)
  554.                 ElseIf StringLeft($aList[$A], 1) = "&" Then
  555.                     $newAU3 = StringReplace($newAU3, $splitChar & StringTrimLeft($aList[$A], 1) & $splitChar, "&_CryptoDragon_Crypt(BinaryToString('" & StringToBinary(_CryptoDragon_Crypt(StringTrimLeft($aList[$A], 2), $sPass, StringLen(String($aList[$A]) - 1), $cryptLvl)) & "'), BinaryToString('" & StringToBinary($sPass) & "'), " & String(StringLen($aList[$A]) - 1) & ", " & String($cryptLvl) & ")")
  556.                     ConsoleWrite($splitChar & StringTrimLeft($aList[$A], 1) & $splitChar & ":&_CryptoDragon_Crypt(BinaryToString('" & StringToBinary(_CryptoDragon_Crypt(StringTrimLeft($aList[$A], 1), $sPass, StringLen(String($aList[$A]) - 1), $cryptLvl)) & "'), BinaryToString('" & StringToBinary($sPass) & "'), " & String(StringLen($aList[$A]) - 1) & ", " & String($cryptLvl) & ")" & @CRLF)
  557.                 ElseIf StringLeft($aList[$A], 2) = " &" Then
  558.                     $newAU3 = StringReplace($newAU3, $splitChar & StringTrimLeft($aList[$A], 2) & $splitChar, " & _CryptoDragon_Crypt(BinaryToString('" & StringToBinary(_CryptoDragon_Crypt(StringTrimLeft($aList[$A], 2), $sPass, StringLen(String($aList[$A]) - 2), $cryptLvl)) & "'), BinaryToString('" & StringToBinary($sPass) & "'))")
  559.                     ConsoleWrite($splitChar & StringTrimLeft($aList[$A], 2) & $splitChar & ": & _CryptoDragon_Crypt(BinaryToString('" & StringToBinary(_CryptoDragon_Crypt(StringTrimLeft($aList[$A], 2), $sPass, StringLen(String($aList[$A]) - 2), $cryptLvl)) & "'), BinaryToString('" & StringToBinary($sPass) & "'), " & String(StringLen($aList[$A]) - 2) & ", " & String($cryptLvl) & ")" & @CRLF)
  560.                 Else
  561.                     $newAU3 = StringReplace($newAU3, $splitChar & $aList[$A] & $splitChar, "_CryptoDragon_Crypt(BinaryToString('" & StringToBinary(_CryptoDragon_Crypt($aList[$A], $sPass, StringLen($aList[$A]), $cryptLvl)) & "'), BinaryToString('" & StringToBinary($sPass) & "'), " & String(StringLen($aList[$A])) & ", " & String($cryptLvl) & ")")
  562.                     ConsoleWrite($splitChar & $aList[$A] & $splitChar & ":_CryptoDragon_Crypt(BinaryToString('" & StringToBinary(_CryptoDragon_Crypt($aList[$A], $sPass, StringLen($aList[$A]), $cryptLvl)) & "'), BinaryToString('" & StringToBinary($sPass) & "'), " & String(StringLen($aList[$A])) & ", " & String($cryptLvl) & ")" & @CRLF)
  563.                 EndIf
  564.             Else
  565.                 $newAU3 = StringReplace($newAU3, $splitChar & $aList[$A] & $splitChar, "_CryptoDragon_Crypt(BinaryToString('" & StringToBinary(_CryptoDragon_Crypt($aList[$A], $sPass, StringLen($aList[$A]), $cryptLvl)) & "'), BinaryToString('" & StringToBinary($sPass) & "'), " & StringLen($aList[$A]) & ", " & String($cryptLvl) & ")")
  566.                 ConsoleWrite($splitChar & $aList[$A] & $splitChar & ":_CryptoDragon_Crypt(BinaryToString('" & StringToBinary(_CryptoDragon_Crypt($aList[$A], $sPass, StringLen($aList[$A]), $cryptLvl)) & "'), BinaryToString('" & StringToBinary($sPass) & "'), " & String(StringLen($aList[$A])) & ", " & String($cryptLvl) & ")" & @CRLF)
  567.             EndIf
  568.         EndIf
  569.     Next
  570.     Return $newAU3
  571. EndFunc   ;==>_ADD_STRINGS
  572. Func _Encrypt_Strings($AU3, $file_Simple_Obfuscated)
  573.     Local $sSTRINGS = _StringBetween($AU3, "'", "'")
  574.     Local $newAU3 = _Add_Strings($sSTRINGS, $AU3, "'")
  575.     Local $dSTRINGS = _StringBetween($newAU3, '"', '"')
  576.     Local $epicAU3 = _Add_Strings($dSTRINGS, $newAU3, '"')
  577.     Local $fileHandle = FileOpen($file_Simple_Obfuscated, 2)
  578.     FileWrite($fileHandle, $epicAU3)
  579.     FileClose($fileHandle)
  580. EndFunc   ;==>_ENCRYPT_STRINGS
  581. Func _Write_CryptoDragon_Obfuscated_File($AU3) ; Write CryptoDragon Obfuscated File
  582.     Local $file_Simple_Obfuscated = StringTrimRight($file_Script_to_Obfuscate, 4) & " - CryptoDragon Obfuscated.au3" ; Create CryptoDragon Obfuscated Filename
  583.     _Encrypt_Strings($AU3, $file_Simple_Obfuscated)
  584. EndFunc ; ==> _Write_CryptoDragon_Obfuscated_File
  585. ; ===================================================================================================
Add Comment
Please, Sign In to add comment