Что нового

[Данные, строки] Иллюзия защиты кода. Обфускатор.

palub

Новичок
Сообщения
32
Репутация
3
Версия AutoIt: 3.

Нужен скрипт который каждую строку из другого скрипта преобразует в нужный вид, а конкретнее:
Есть небольшой пример:

Код:
#include <string.au3> ; нужна для _StringEncrypt()
; Кодирование Base64
Func _Base64Encode($Data, $LineBreak = 5000)
	Local $Opcode = "0x5589E5FF7514535657E8410000004142434445464748494A4B4C4D4E4F505152535455565758595A6162636465666768696A6B6C6D6E6F707172737475767778797A303132333435363738392B2F005A8B5D088B7D108B4D0CE98F0000000FB633C1EE0201D68A06880731C083F901760C0FB6430125F0000000C1E8040FB63383E603C1E60409C601D68A0688470183F90176210FB6430225C0000000C1E8060FB6730183E60FC1E60209C601D68A06884702EB04C647023D83F90276100FB6730283E63F01D68A06884703EB04C647033D8D5B038D7F0483E903836DFC04750C8B45148945FC66B80D0A66AB85C90F8F69FFFFFFC607005F5E5BC9C21000"
	Local $CodeBuffer = DllStructCreate("byte[" & BinaryLen($Opcode) & "]")
	DllStructSetData($CodeBuffer, 1, $Opcode)
	$Data = Binary($Data)
	Local $Input = DllStructCreate("byte[" & BinaryLen($Data) & "]")
	DllStructSetData($Input, 1, $Data)
	$LineBreak = Floor($LineBreak / 4) * 4
	Local $OputputSize = Ceiling(BinaryLen($Data) * 4 / 3)
	$OputputSize = $OputputSize + Ceiling($OputputSize / $LineBreak) * 2 + 4
	Local $Ouput = DllStructCreate("char[" & $OputputSize & "]")
	DllCall("user32.dll", "none", "CallWindowProc", "ptr", DllStructGetPtr($CodeBuffer), _
			"ptr", DllStructGetPtr($Input), _
			"int", BinaryLen($Data), _
			"ptr", DllStructGetPtr($Ouput), _
			"uint", $LineBreak)
	Return DllStructGetData($Ouput, 1)
EndFunc   ;==>_Base64Encode
; Декодирование Base64
Func _Base64Decode($Data)
	Local $Opcode = "0xC81000005356578365F800E8500000003EFFFFFF3F3435363738393A3B3C3DFFFFFF00FFFFFF000102030405060708090A0B0C0D0E0F10111213141516171819FFFFFFFFFFFF1A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132338F45F08B7D0C8B5D0831D2E9910000008365FC00837DFC047D548A034384C0750383EA033C3D75094A803B3D75014AB00084C0751A837DFC047D0D8B75FCC64435F400FF45FCEBED6A018F45F8EB1F3C2B72193C7A77150FB6F083EE2B0375F08A068B75FC884435F4FF45FCEBA68D75F4668B06C0E002C0EC0408E08807668B4601C0E004C0EC0208E08847018A4602C0E00624C00A46038847028D7F038D5203837DF8000F8465FFFFFF89D05F5E5BC9C21000"
	Local $CodeBuffer = DllStructCreate("byte[" & BinaryLen($Opcode) & "]")
	DllStructSetData($CodeBuffer, 1, $Opcode)
	Local $Ouput = DllStructCreate("byte[" & BinaryLen($Data) & "]")
	Local $Ret = DllCall("user32.dll", "int", "CallWindowProc", "ptr", DllStructGetPtr($CodeBuffer), _
			"str", $Data, _
			"ptr", DllStructGetPtr($Ouput), _
			"int", 0, _
			"int", 0)
	Return BinaryToString(BinaryMid(DllStructGetData($Ouput, 1), 1, $Ret[0]))
EndFunc   ;==>_Base64Decode


;--------------- нешифрованная функция
_1()
Func _1()
	MsgBox(0 , 0, 0)
EndFunc
;--------------- нешифрованная функция


;--------------- шифрованная функция
Execute(_StringEncrypt(0, _Base64Decode('NkE0OTJENDhGQjIwQTczQw=='), '99298', 1))
Execute(_StringEncrypt(0, _Base64Decode('MTlENTg3MjRDMDQ0MTFCNzBBMDY1NEE1RTY3OUY4QjM1OTA1'), '76711', 1))
Execute(_StringEncrypt(0, _Base64Decode('MUJFNUFDN0U3RjBDNzlBNDQ5Q0MwRTVDNzI4RDM3ODA0Nzg0MTNGNEI5NERDNkJCODY0RkQ3NTc2RENFODRENw=='), '45522', 1))
Execute(_StringEncrypt(0, _Base64Decode('RkNFRjRENTdFOTM5REI0RDQwOUFBMUJBNEQ3Nw=='), '12328', 1))
;--------------- шифрованная функция


;--------------- как шифровал и что намутило

$rand_1 = Random(10, 100000, 1)
$primer_1 = _Base64Encode(_StringEncrypt(1, '_1()', $rand_1, 1))
$rand_2 = Random(10, 100000, 1)
$primer_2 = _Base64Encode(_StringEncrypt(1, 'Func _1()', $rand_2, 1))
$rand_3 = Random(10, 100000, 1)
$primer_3 = _Base64Encode(_StringEncrypt(1, 'MsgBox(0 , 0, 0)', $rand_3, 1))
$rand_4 = Random(10, 100000, 1)
$primer_4 = _Base64Encode(_StringEncrypt(1, 'EndFunc', $rand_4, 1))


$_1 = "Execute(_StringEncrypt(0, _Base64Decode('"

$_1_1 = "'), '" & $rand_1 & "', 1))"
$_2_1 = "'), '" & $rand_2 & "', 1))"
$_3_1 = "'), '" & $rand_3 & "', 1))"
$_4_1 = "'), '" & $rand_4 & "', 1))"

MsgBox(0,"Показ того что намутило", $_1 & $primer_1 & $_1_1 & @CRLF & _
$_1 & $primer_2 & $_2_1 & @CRLF & _
$_1 & $primer_3 & $_3_1 & @CRLF & _
$_1 & $primer_4 & $_4_1)

Объясняю как именно все это работает:

пойдем по порядку
у нас есть строка, например:
MsgBox(0, "Привет", "ГыГыГы")

нам нужно поймать её в скобки, то есть ввести в представление "текст". вот так:
$primer = 'MsgBox(0, "Привет", "ГыГыГы")'

что делаем дальше: криптуем эту строку
$primer_1 = _StringEncrypt(1, $primer, "pass", 1)

из этого мы получили вот такое : F76C0A0C868EE1638A9185E9BD2EB7EEEE6151AD27BCDDB6440EE4AC16B407A4040B7745D65EBE16788AFDDF1F3F34A160FB35862277709ACD5A
узнал вот так если интересно :
InputBox(0,0, $primer_1)

Что делать дальше? её в base64
$primer_2 = _Base64Encode($primer_1)
InputBox(0,0, $primer_2)
получаем вот это: Rjc2QzBBMEM4NjhFRTE2MzhBOTE4NUU5QkQyRUI3RUVFRTYxNTFBRDI3QkNEREI2NDQwRUU0QUMxNkI0MDdBNDA0MEI3NzQ1RDY1RUJFMTY3ODhBRkRERjFGM0YzNEExNjBGQjM1ODYyMjc3NzA5QUNENUE=


ну и что из этого вышло? и как это применить ?
Execute( _StringEncrypt(0, _Base64Decode("Rjc2QzBBMEM4NjhFRTE2MzhBOTE4NUU5QkQyRUI3RUVFRTYxNTFBRDI3QkNEREI2NDQwRUU0QUMxNkI0MDdBNDA0MEI3NzQ1RDY1RUJFMTY3ODhBRkRERjFGM0YzNEExNjBGQjM1ODYyMjc3NzA5QUNENUE="), "pass", 1))


Вот и повторюсь:
Нужен скрипт который каждую строку из другого скрипта преобразует в этот вид


Добавлено:
Сообщение автоматически объединено:

Совсем забыл написать про рандомный ключ к _StringEncrypt, нужно сделать так чтобы в каждой строке был он разный :whistle:
 

trizorka

Новичок
Сообщения
53
Репутация
4
не знаю, то вам надо или нет...я пользуюсь таким способом: код скрипта в тхт файл закидываю и потом
Код:
#include <Array.au3>
#include <Crypt.au3>
#include <string.au3> 
$Array_file =  FileRead(FileOpen("c:\1.txt", 0))
$Array = StringSplit($Array_file, @CR)
For $z = 1 To UBound($Array)-1
	$sResult = ""
	$Chars = "АБВГДЕЖЗИЙКЛМНОПРСТУХФЦЧШЩЬЪЭЫЮЯабвгдежзийклмнопрстухфцчшщьъэыюяABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890"
	$Lenght=Random(10,30,1)
	$sChars = StringStripWS ($Chars, 8)
	$aSplited = StringSplit($sChars, "")
	for $i = 1 to $Lenght
		$iRand = Random(1,UBound($aSplited) - 1, 1)
		$sResult &= $aSplited[$iRand]
	Next
	 ConsoleWrite(_Base64Encode(_StringEncrypt(1, $Array[$z], $sResult))&@CR)
Next
Func _Base64Encode($Data, $LineBreak = 5000)
    Local $Opcode = "0x5589E5FF7514535657E8410000004142434445464748494A4B4C4D4E4F505152535455565758595A6162636465666768696A6B6C6D6E6F707172737475767778797A303132333435363738392B2F005A8B5D088B7D108B4D0CE98F0000000FB633C1EE0201D68A06880731C083F901760C0FB6430125F0000000C1E8040FB63383E603C1E60409C601D68A0688470183F90176210FB6430225C0000000C1E8060FB6730183E60FC1E60209C601D68A06884702EB04C647023D83F90276100FB6730283E63F01D68A06884703EB04C647033D8D5B038D7F0483E903836DFC04750C8B45148945FC66B80D0A66AB85C90F8F69FFFFFFC607005F5E5BC9C21000"
    Local $CodeBuffer = DllStructCreate("byte[" & BinaryLen($Opcode) & "]")
    DllStructSetData($CodeBuffer, 1, $Opcode)
    $Data = Binary($Data)
    Local $Input = DllStructCreate("byte[" & BinaryLen($Data) & "]")
    DllStructSetData($Input, 1, $Data)
    $LineBreak = Floor($LineBreak / 4) * 4
    Local $OputputSize = Ceiling(BinaryLen($Data) * 4 / 3)
    $OputputSize = $OputputSize + Ceiling($OputputSize / $LineBreak) * 2 + 4
    Local $Ouput = DllStructCreate("char[" & $OputputSize & "]")
    DllCall("user32.dll", "none", "CallWindowProc", "ptr", DllStructGetPtr($CodeBuffer), _
            "ptr", DllStructGetPtr($Input), _
            "int", BinaryLen($Data), _
            "ptr", DllStructGetPtr($Ouput), _
            "uint", $LineBreak)
    Return DllStructGetData($Ouput, 1)
EndFunc   ;==>_Base64Encode
 
Автор
P

palub

Новичок
Сообщения
32
Репутация
3
Как я понял Вы мне предложили вариант простого шифрования, это нее совсем то что нужно
Нужно преобразовать каждую строку из другого файла в вид который у меня в первом посте
 

trizorka

Новичок
Сообщения
53
Репутация
4
вам надо _Base64Encode(_StringEncrypt(каждая строка, случайный ключ)) ?
 
Автор
P

palub

Новичок
Сообщения
32
Репутация
3
trizorka [?]
вам надо _Base64Encode(_StringEncrypt(каждая строка, случайный ключ)) ?

Посмотрите первый пример пожалуйста, там четко написано вроде бы
;--------------- шифрованная функция
Execute(_StringEncrypt(0, _Base64Decode('NkE0OTJENDhGQjIwQTczQw=='), '99298', 1))
Execute(_StringEncrypt(0, _Base64Decode('MTlENTg3MjRDMDQ0MTFCNzBBMDY1NEE1RTY3OUY4QjM1OTA1'), '76711', 1))
Execute(_StringEncrypt(0, _Base64Decode('MUJFNUFDN0U3RjBDNzlBNDQ5Q0MwRTVDNzI4RDM3ODA0Nzg0MTNGNEI5NERDNkJCODY0RkQ3NTc2RENFODRENw=='), '45522', 1))
Execute(_StringEncrypt(0, _Base64Decode('RkNFRjRENTdFOTM5REI0RDQwOUFBMUJBNEQ3Nw=='), '12328', 1))
;--------------- шифрованная функция
 

trizorka

Новичок
Сообщения
53
Репутация
4
Код:
#include <Array.au3>
#include <Crypt.au3>
#include <File.au3>
#include "MPCLib.au3"
#include <String.au3>
#Include <APIConstants.au3>
#Include <WinAPIEx.au3>
$Array_file =  FileRead(FileOpen("c:\1.txt", 0))
$Array = StringSplit($Array_file, @CR)
For $z = 1 To UBound($Array)-1
	$sResult = ""
	$Chars = "АБВГДЕЖЗИЙКЛМНОПРСТУХФЦЧШЩЬЪЭЫЮЯабвгдежзийклмнопрстухфцчшщьъэыюяABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890"
	$Lenght=Random(5,10,1)
	$sChars = StringStripWS ($Chars, 8)  ;Удаляем пробелы
	$aSplited = StringSplit($sChars, "")  ;Разделяем побуквенно
	for $i = 1 to $Lenght
		$iRand = Random(1,UBound($aSplited) - 1, 1)
		$sResult &= $aSplited[$iRand]     ;Собираем
	Next
	 $a = _Base64Encode(_StringEncrypt(1, $Array[$z], $sResult))
	 ConsoleWrite("Execute( _Base64Decode(_StringEncrypt(0,"& $a&","&$sResult &")))"&@CR)
 Next
 
Автор
P

palub

Новичок
Сообщения
32
Репутация
3
Код:
#include <Array.au3>
#include <Crypt.au3>
#include <File.au3>
;~ #include "MPCLib.au3"
#include <String.au3>
;~ #Include <APIConstants.au3>
#Include <WinAPIEx.au3>


Func _Base64Encode($Data, $LineBreak = 5000)
	Local $Opcode = "0x5589E5FF7514535657E8410000004142434445464748494A4B4C4D4E4F505152535455565758595A6162636465666768696A6B6C6D6E6F707172737475767778797A303132333435363738392B2F005A8B5D088B7D108B4D0CE98F0000000FB633C1EE0201D68A06880731C083F901760C0FB6430125F0000000C1E8040FB63383E603C1E60409C601D68A0688470183F90176210FB6430225C0000000C1E8060FB6730183E60FC1E60209C601D68A06884702EB04C647023D83F90276100FB6730283E63F01D68A06884703EB04C647033D8D5B038D7F0483E903836DFC04750C8B45148945FC66B80D0A66AB85C90F8F69FFFFFFC607005F5E5BC9C21000"
	Local $CodeBuffer = DllStructCreate("byte[" & BinaryLen($Opcode) & "]")
	DllStructSetData($CodeBuffer, 1, $Opcode)
	$Data = Binary($Data)
	Local $Input = DllStructCreate("byte[" & BinaryLen($Data) & "]")
	DllStructSetData($Input, 1, $Data)
	$LineBreak = Floor($LineBreak / 4) * 4
	Local $OputputSize = Ceiling(BinaryLen($Data) * 4 / 3)
	$OputputSize = $OputputSize + Ceiling($OputputSize / $LineBreak) * 2 + 4
	Local $Ouput = DllStructCreate("char[" & $OputputSize & "]")
	DllCall("user32.dll", "none", "CallWindowProc", "ptr", DllStructGetPtr($CodeBuffer), _
			"ptr", DllStructGetPtr($Input), _
			"int", BinaryLen($Data), _
			"ptr", DllStructGetPtr($Ouput), _
			"uint", $LineBreak)
	Return DllStructGetData($Ouput, 1)
EndFunc   ;==>_Base64Encode
Func _Base64Decode($Data)
	Local $Opcode = "0xC81000005356578365F800E8500000003EFFFFFF3F3435363738393A3B3C3DFFFFFF00FFFFFF000102030405060708090A0B0C0D0E0F10111213141516171819FFFFFFFFFFFF1A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132338F45F08B7D0C8B5D0831D2E9910000008365FC00837DFC047D548A034384C0750383EA033C3D75094A803B3D75014AB00084C0751A837DFC047D0D8B75FCC64435F400FF45FCEBED6A018F45F8EB1F3C2B72193C7A77150FB6F083EE2B0375F08A068B75FC884435F4FF45FCEBA68D75F4668B06C0E002C0EC0408E08807668B4601C0E004C0EC0208E08847018A4602C0E00624C00A46038847028D7F038D5203837DF8000F8465FFFFFF89D05F5E5BC9C21000"
	Local $CodeBuffer = DllStructCreate("byte[" & BinaryLen($Opcode) & "]")
	DllStructSetData($CodeBuffer, 1, $Opcode)
	Local $Ouput = DllStructCreate("byte[" & BinaryLen($Data) & "]")
	Local $Ret = DllCall("user32.dll", "int", "CallWindowProc", "ptr", DllStructGetPtr($CodeBuffer), _
			"str", $Data, _
			"ptr", DllStructGetPtr($Ouput), _
			"int", 0, _
			"int", 0)
	Return BinaryToString(BinaryMid(DllStructGetData($Ouput, 1), 1, $Ret[0]))
EndFunc   ;==>_Base64Decode


$Array_file =  FileRead(FileOpen(@ScriptDir & "\1.txt", 0))
$Array = StringSplit($Array_file, @CR)
For $z = 1 To UBound($Array)-1
	$sResult = ""
	$Chars = "АБВГДЕЖЗИЙКЛМНОПРСТУХФЦЧШЩЬЪЭЫЮЯабвгдежзийклмнопрстухфцчшщьъэыюяABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890"
	$Lenght=Random(5,10,1)
	$sChars = StringStripWS ($Chars, 8)  ;Удаляем пробелы
	$aSplited = StringSplit($sChars, "")  ;Разделяем побуквенно

	for $i = 1 to $Lenght
		$iRand = Random(1,UBound($aSplited) - 1, 1)
		$sResult &= $aSplited[$iRand]     ;Собираем
	Next

	$a = _Base64Encode(_StringEncrypt(1, $Array[$z], $sResult))
	$gg = FileOpen(@ScriptDir & "\2.txt", 1)
	FileWrite($gg, "Execute(_StringEncrypt(0, _Base64Decode('" & $a & "'),'" & $sResult & "'))" & @CR)

;~ 	ConsoleWrite("Execute(_StringEncrypt(0, _Base64Decode('" & $a & "'),'" & $sResult & "'))" & @CR)
 Next

Вот так шифрует, но только одну строчку, если их больше то как я понял получаются неверные пароли...
 

trizorka

Новичок
Сообщения
53
Репутация
4
у меня какие-то проблемы возникли с _Base64Decode. предлагаю мой алгоритм шифровки\дешифровки...сделал сам...смысл в том, что в строке меняются буквы местами случайным образом...вы можете также усложнить алгоритм к виду первого вашего поста

Код:
#include <Array.au3>
#include <Crypt.au3>
$Array_file =  FileRead(FileOpen("c:\1.txt", 0))
$Array = StringSplit($Array_file, @CR)
$key="dfgthdr"
For $z = 1 To UBound($Array)-1
	$Array_=_Crypt_EncryptData($Array[$z], $key, $CALG_AES_256)
	Dim $fs[1];не закодированые значения
	Dim $fx[1];порядок чисел
	Dim $fa[1];закодированые значения
	Dim $fq[1]
	Dim $fz[1]
	$number = StringSplit($Array_, "")
	$nU = _UniqArray(1, $number[0])
	$aSplit = $number
	For $i= 0 To UBound($nU)-1
		$f = $nU[$i]
		$s = $aSplit[$f]
		_ArrayAdd($fs,$s)
		_ArrayAdd($fx,$f)
	Next
	$data_key = _ArrayToString($fx,".")
	$data_key = StringTrimLeft($data_key,1)
	$data_word = _ArrayToString($fs,"")
	$sData = $data_word&"-=|=-"&$data_key

;~ =============================================================decrypt

        $qwas = StringSplit($sData, "-=|=-")
	$qwas = _ArrayClearEmpty($qwas)
	$data_key = string($qwas[2])
	$data_word = string($qwas[1])
	$fx = StringSplit($data_key, ".")
	$sData = StringSplit($data_word, "")
	$sData_ = ""
	For $i = 1 To UBound($sData)-1 Step 1
		$sData_ &= $sData[$i]
		$sData_ &= "."
	Next
	$fz = StringSplit(StringTrimRight($sData_,1),".")
	For $i = 1 To UBound($fx) - 1 Step 1
		_ArrayAdd($fq, $fx[$i]&"|"&$fz[$i])
	Next
	Dim $aTemp[UBound($fq)][2]
	For $i = 0 To UBound($fq) - 1
		$aTemp[$i][0] = Number(StringReplace($fq[$i], ',', ''))
		$aTemp[$i][1] = $fq[$i]
	Next
	_ArraySort($aTemp)
	For $i = 0 To UBound($fq) - 1
		$fq[$i] = $aTemp[$i][1]
	Next
	$sData = ""
	For $i = 1 To UBound($fq)-1
		$sData &= StringReplace(StringLeft(StringMid($fq[$i], StringInStr($fq[$i], '|')), 3),"|", "")
	Next
ConsoleWrite(_Crypt_DecryptData($sData, $key, $CALG_AES_256))
Next
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
OffTopic:
trizorka
Для кода Autoit есть специальный BB код
autoit.gif
 
Верх