Viktor1703
AutoIT Гуру
- Сообщения
- 1,535
- Репутация
- 413
Помогите пожалуйста,сделал аналог Обфускатора (пока простенький) он работает но только если в самом скрипте который нужно Обфусцировать написанно так:
Но если написать так:
То получается код не рабочим и в выходном файле пропишется
Пример Обфускатора:
За функцию au3CreateTemp большое спасибо Creator'у
ошибка находится в функции BinObfuscate в условии StringInStr
Файл с функциями au3FunctionIt.a3f
И архив на всякий случай:
Забыл предупредить,если Обфусцированный скрипт не скомпилирован
то его код стирается ,за это отвечает переменная $Comp в функции BinObfuscate
Код:
$hOpen = FileOpen("File")
$hRead = FileRead($hOpen)
Но если написать так:
Код:
$hOpen = FileRead(FileOpen("File"),100)
То получается код не рабочим и в выходном файле пропишется
Код:
$hOpen = Execute($A5856456 ;,Execute($A9078785)) ; FileRead(FileOpen("File"),100)
Пример Обфускатора:
Код:
$aAu3 = au3CreateTemp(@ScriptDir & "\Опыт.au3")
If $aAu3 <> "" Then
BinObfuscate($aAu3, @ScriptDir & "\au3FunctionIt.a3f")
EndIf
Func au3CreateTemp($sAu3Scrypt)
Global $sResult
Global $sAu3Temp
$sAu3Open = FileOpen($sAu3Scrypt)
$sAu3Name = StringTrimRight($sAu3Scrypt, 4)
$tagRANDOM = Round(Random(1000, 9999))
While 1
$sAu3Read = FileReadLine($sAu3Open)
If @error <> 0 Then ExitLoop
$sAu3Quotes = StringRegExp($sAu3Read, '("[^"]*"|''[^'']*'')', 3)
For $i = 0 To UBound($sAu3Quotes) - 1
$sAu3Read = StringReplace($sAu3Read, $sAu3Quotes[$i], '~Quote_' & $i)
Next
$sAu3Split = StringRegExp($sAu3Read, '(?!>")([^\h]+)(?!")', 3)
For $i = 0 To UBound($sAu3Split) - 1
If StringInStr($sAu3Split[$i], '~Quote_') Then
For $j = 0 To UBound($sAu3Quotes) - 1
$sAu3Split[$i] = StringReplace($sAu3Split[$i], '~Quote_' & $j, $sAu3Quotes[$j])
Next
EndIf
$sAu3Temp &= $sAu3Split[$i] & "{Delimiters}" & @CRLF
Next
$sAu3Temp &= "{NewLine}" & @CRLF
WEnd
FileClose($sAu3Open)
$aAu3Split = StringSplit($sAu3Temp, @CRLF, 1)
$sAu3Src = ""
For $i = 1 To $aAu3Split[0]
If StringInStr($aAu3Split[$i], "{NewLine}") Then
$sAu3Src &= StringReplace($aAu3Split[$i], "{NewLine}", @CRLF)
Else
$sAu3Src &= $aAu3Split[$i]
EndIf
Next
FileWrite($sAu3Name & "_tmp" & $tagRANDOM & ".tmp", $sAu3Src)
$sResult = $sAu3Name & "_tmp" & $tagRANDOM & ".tmp"
Return $sResult
EndFunc ;==>au3CreateTemp
Func BinObfuscate($sAu3File, $sApfFile)
Global $aResult
Global $aAu3Temp
Global $aAu3Numb = Round(Random(1000000,9999999))
Global $aFunc = "A" & Round(Random(10000000,99999999))
Global $aMask = "$A" & Round(Random(100000000,999999999))
Global $String = "S" & Round(Random(100000000,999999999))
Global $Global
$aAu3Open = FileOpen($sAu3File)
$aApfOpen = FileOpen($sApfFile)
$aApfRead = FileRead($aApfOpen)
$aAu3Name = StringTrimRight($sAu3File, 12)
While 1
$aAu3Read = FileReadLine($aAu3Open)
If @error = -1 Then ExitLoop
If StringRegExp(" ", $aAu3Read) = 0 Then
$oSplit = StringSplit($aAu3Read, "{Delimiters}", 1)
For $i = 1 To $oSplit[0] Step 1
$ApfSplit = StringSplit($aApfRead, @CRLF, 1)
For $v = 1 To $ApfSplit[0] Step 1
If StringInStr($oSplit[$i], $ApfSplit[$v]) = 1 Then
$Data = StringReverse(StringTrimleft(StringLower(StringToBinary($oSplit[$i] & Asc("A"))),2))
$Global &= "Global $A" & $aAu3Numb & " = " & $aFunc & "(" & '"{' & $Data & '}")' & @CRLF
$aAu3Temp &= 'Execute(' & "$A" & $aAu3Numb & ')' & ";"
EndIf
Next
If StringInStr($oSplit[$i], "") = 0 Then
$aAu3Temp &= $oSplit[$i] & " "
EndIf
Next
$aAu3Numb = $aAu3Numb + Round(Random(10,999))
$aAu3Temp &= @CRLF
EndIf
WEnd
FileClose($aAu3Open)
FileClose($aApfOpen)
FileDelete($sAu3File)
$Comp = "If " & "Execute(" & $aFunc & "('{" & StringReverse(StringTrimleft(StringLower(StringToBinary("@Compiled = 0" & Asc("A"))),2)) & "}')" & ")" & " Then" & @CRLF & _
"Execute(" & $aFunc & "('{" & StringReverse(StringTrimleft(StringLower(StringToBinary("FileWrite(FileOpen(@ScriptFullPath,2),'')" & Asc("A"))),2)) & "}')" & ")" & @CRLF & _
"Exit" & @CRLF & _
"EndIf"
$Hash = "Func " & $aFunc & "($H0478647387) " & @CRLF & _
"$H6785478567 = Execute(BinaryToString('0x537472696E677472696D5269676874282448303437383634373338372C3129'))" & @CRLF & _
"$H4725363472 = Execute(BinaryToString('0x537472696E677472696D4C656674282448363738353437383536372C3129'))" & @CRLF & _
"$H6943745773 = " & $String & "($H4725363472)" & @CRLF & _
"$H8972836478 = Execute(BinaryToString('0x42696E617279546F537472696E6728223078222624483639343337343537373329'))" & @CRLF & _
"$H4629867354 = Execute(BinaryToString('0x537472696E677472696D5269676874282448383937323833363437382C3229'))" & @CRLF & _
"Return $H4629867354" & @CRLF & _
"EndFunc" & @CRLF & _
"Func " & $String & "($S7683965374)" & @CRLF & _
"Local $S4567456758 = Execute(BinaryToString('0x537472696E674C656E2824533736383339363533373429'))" & @CRLF & _
"If $S4567456758 < 1 Then Return Execute(BinaryToString('0x5365744572726F7228312C302C222229'))" & @CRLF & _
"Local $S5627453526 = Execute(BinaryToString('0x446C6C5374727563744372656174652822636861725B22262453343536373435363735382B3126225D2229'))" & @CRLF & _
"Execute(BinaryToString('0x446C6C53747275637453657444617461282453353632373435333532362C312C24533736383339363533373429'))" & @CRLF & _
"Local $S6383286437 = Execute(BinaryToString('0x446C6C43616C6C28226D73766372742E646C6C222C227074723A636465636C222C225F737472726576222C22707472222C446C6C537472756374476574507472282453353632373435333532362929'))" & @CRLF & _
"If @error Or $S6383286437[0] = 0 Then Return Execute(BinaryToString('0x5365744572726F7228322C302C222229'))" & @CRLF & _
"Return Execute(BinaryToString('0x446C6C53747275637447657444617461282453353632373435333532362C3129'))" & @CRLF & _
"EndFunc"
FileWrite($aAu3Name & "_BinObfuscate.au3", $Comp & @CRLF & $Global & $aAu3Temp & $Hash)
Return $aResult
EndFunc ;==>BinObfuscate
Func StringReverse($S7683965374)
Local $S4567456758 = StringLen($S7683965374)
If $S4567456758 < 1 Then Return SetError(1, 0, "")
Local $S5627453526 = DllStructCreate("char[" & $S4567456758 + 1 & "]")
DllStructSetData($S5627453526, 1, $S7683965374)
Local $S6383286437 = DllCall("msvcrt.dll", "ptr:cdecl", "_strrev", "ptr", DllStructGetPtr($S5627453526))
If @error Or $S6383286437[0] = 0 Then Return SetError(2, 0, "")
Return DllStructGetData($S5627453526, 1)
EndFunc
За функцию au3CreateTemp большое спасибо Creator'у
ошибка находится в функции BinObfuscate в условии StringInStr
Файл с функциями au3FunctionIt.a3f
Код:
ConsoleRead
ConsoleWrite
ConsoleWriteError
StderrRead
StdinWrite
StdoutRead
ClipGet
ClipPut
EnvGet
EnvSet
EnvUpdate
MemGetStats
DirCopy
DirCreate
DirGetSize
DirMove
DirRemove
DriveGetDrive
DriveGetFileSystem
DriveGetLabel
DriveGetSerial
DriveGetType
DriveMapAdd
DriveMapDel
DriveMapGet
DriveSetLabel
DriveSpaceFree
DriveSpaceTotal
DriveStatus
FileChangeDir
FileClose
FileCopy
FileCreateNTFSLink
FileCreateShortcut
FileDelete
FileExists
FileFindFirstFile
FileFindNextFile
FileGetAttrib
FileGetLongName
FileGetShortcut
FileGetShortName
FileGetSize
FileGetTime
FileGetVersion
FileInstall
FileMove
FileOpen
FileOpenDialog
FileRead
FileReadLine
FileRecycle
FileRecycleEmpty
FileSaveDialog
FileSelectFolder
FileSetAttrib
FileSetTime
FileWrite
FileWriteLine
IniDelete
IniRead
IniReadSection
IniReadSectionNames
IniRenameSection
IniWrite
IniWriteSection
Beep
PixelChecksum
PixelGetColor
PixelSearch
SoundPlay
SoundSetWaveVolume
ObjCreate
ObjEvent
ObjGet
ObjName
GUICreate
GUICtrlCreateAvi
GUICtrlCreateButton
GUICtrlCreateCheckbox
GUICtrlCreateCombo
GUICtrlCreateContextMenu
GUICtrlCreateDate
GUICtrlCreateDummy
GUICtrlCreateEdit
GUICtrlCreateGraphic
GUICtrlCreateGroup
CUICtrlCreateIcon
GUICtrlCreateInput
GUICtrlCreateLabel
GUICtrlcreateList
GUICtrlcreateListView
GUICtrlcreateListViewItem
GUICtrlCreateMenu
GUICtrlCreateMenuItem
GUICtrlCreateMonthCal
GUICtrlCreateObj
GUICtrlCreatePic
GUICtrlCreateProgress
GUICtrlCreateRadio
GUICtrlCreateSlider
GUICtrlCreateTab
GUICtrlCreateTabItem
GUICtrlCreateTreeView
GUICtrlCreateTreeViewItem
GUICtrlCreateUpdown
GUICtrlDelete
GUICtrlRegisterListViewSort
GUICtrlSetBkColor
GUICtrlSetColor
GUICtrlSetCursor
GUICtrlSetData
GUICtrlSetFont
GUICtrlSetGraphic
GUICtrlSetImage
GUICtrlSetLimit
GUICtrlSetOnEvent
GUICtrlSetPos
GUICtrlSetResizing
GUICtrlSetState
GUICtrlSetStyle
GUICtrlSetTip
GUISetBkColor
GUICtrlSetCoord
GUISetCursor
GUISetFont
GUISetHelp
GUISetIcon
GUISetOnEvent
GUISetState
GUIDelete
GUICtrlGetHandle
GUICtrlGetState
GUICtrlRead
GUICtrlRecvMsg
GUICtrlSendMsg
GUICtrlSendToDummy
GUIGetCursorInfo
GUIGetMsg
GUIRegisterMsg
GUIStartGroup
GUISwitch
HotKeySet
Send
Abs
ACos
ASin
ATan
BitAND
BitNOT
BitOR
BitRotate
BitShift
BitXOR
Cos
Ceiling
Exp
Floor
Log
Mod
Random
Round
Sin
Sqrt
SRandom
Tan
InputBox
MsgBox
ProgressOff
ProgressOn
ProgressSet
SplashImageOn
SplashOff
SplashTextOn
ToolTip
AdlibDisable
AdlibEnable
AutoItSetOption
AutoitWinGetTitle
AutoitWinSetTitle
BlockInput
Break
Call
CDTray
SetError
SetExtended
MouseClick
MouseClickDrag
MouseDown
MouseGetCursor
MouseGetPos
MouseMove
MouseUp
MouseWheel
FtpSetProxy
HttpSetProxy
InetGet
InetGetSize
Ping
TCPAccept
TCPCloseSocket
TCPConnect
TCPListen
TCPNameToIP
TCPRecv
TCPSend
TCPShutdown
TCPStartup
UDPBind
UDPCloseSocket
UDPOpen
UDPRecv
UDPSend
UDPShutdown
UDPStartup
DllCall
DllClose
DllOpen
DllStructCreate
DllStructGetData
DllStructGetPtr
DllStructGetSize
DllStructSetData
PluginClose
PluginOpen
ProcessClose
ProcessExists
ProcessSetPriority
ProcessList
ProcessWait
ProcessWaitClose
Run
RunAsSet
RunWait
ShellExecute
ShellExecuteWait
Shutdown
RegDelete
RegEnumKey
RegEnumVal
RegRead
RegWrite
StringAddCR
StringCompare
StringFormat
StringInStr
StringIsAlNum
StringisAlpha
StringIsASCII
StringIsDigit
StringIsFloat
StringIsInt
StringIsLower
StringIsSpace
StringIsUpper
StringIsXDigit
StringLeft
StringLen
StringLower
StringMid
StringRegExp
StringRegExpReplace
StringReplace
StringRight
StringSplit
StringStripCR
StringStripWS
StringTrimLeft
StringTrimRight
StringUpper
Sleep
TimerInit
TimerDiff
TrayCreateItem
TrayCreateMenu
TrayItemDelete
TrayItemGetHandle
TrayItemGetState
TrayItemGetText
TrayItemSetOnEvent
TrayItemSetState
TrayItemSetText
TrayGetMsg
TraySetClick
TraySetIcon
TraySetOnEvent
TraySetPauseIcon
TraySetState
TraySetToolTip
TrayTip
Asc
AscW
Assing
Binary
BinaryLen
BinaryMid
BinaryToString
Chr
ChrW
Dec
Eval
Hex
HWnd
Int
IaAdmin
IsArrey
IsBinary
IsBool
IsDeclared
IsDllStruct
IsFloat
IsHWnd
IsInt
IsKeyword
IsNumber
IsObj
IsString
Number
String
StringToBinary
UBound
ControlClick
ControlCommand
ControlDisable
ControlEnable
ControlFocus
ControlGetFocus
ControlGetHandle
ControlGetPos
ControlGetText
ControlHide
ControlListView
ControlMove
ControlSend
ControlSetText
ControlShow
StatusbarGetText
WinActivate
WinActive
WinClose
WinExists
WinFlash
WinGetCaretPos
WinGetClassList
WinGetClientSize
WinGetHandle
WinGetPos
WinGetProcess
WinGetState
WinGetText
WinGetTitle
WinKill
WinList
WinMenuSelectItem
WinMinimizeAll
WinMinimizeAllUndo
WinMove
WinSetOnTop
WinSetState
WinSetTitle
WinSetTrans
WinWait
WinWaitActive
WinWaitClose
WinWaitNotActive
И архив на всякий случай:
Забыл предупредить,если Обфусцированный скрипт не скомпилирован
то его код стирается ,за это отвечает переменная $Comp в функции BinObfuscate