1

Тема: AHK: Разрабатываем собственный обфускатор и пр. для защиты

В этой теме самые талантливые и опытные программисты форума пытаются общими усилиями создать простой, доступный даже для начинающих пользователей обфускатор и предлагают идеи для защиты кода скриптов.

2 (изменено: _gruz, 2015-05-20 10:53:02)

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Ес! Вроде получилось:

codestr := "eQBnAHMAdgB7AGwAOAA0AE8AVQBcAF8ANABHAFcARgBdAEQAQABJAAsEVwRWBFgE"+Chr(13)
 . "NAAuBDQAVQQuBFQELAQrBFYEVwQuADQANAAxAFUASwBHAHcAZgB9AGQAYABSAGEA"+Chr(13)
 . "eAB4AEQAdQBgAHwAMQAZADcAYwAuAC4AGQBAAGYAdQBtAEAAfQBkADgAOAA0AF8A"+Chr(13)
 . "UQBNADQARABGAFEARwBHADQAMQBVAEsAWgB7AGMAMQAZAH0AcgA0ADwAWQB7AHAA"+Chr(13)
 . "PABVAEsAWgB7AGMAOAA0ACYAPQA0ACkANAAkAD0AGQAdAFkAZwBzAFYAewBsADgA"+Chr(13)
 . "NABAAH0AeQBxADQAfQBnADQAewBwAHAALgA0ADEAVQBLAFoAewBjADEAGQBxAHgA"+Chr(13)
 . "ZwBxABkAHQBZAGcAcwBWAHsAbAA4ADQAQAB9AHkAcQA0AH0AZwA0AFoAWwBAADQA"+Chr(13)
 . "ewBwAHAALgA0ADEAVQBLAFoAewBjADEAGQBHAHgAcQBxAGQAOAA0ACYAJAAkACQA"+Chr(13)
 . "GQBmAHEAYABhAGYAegA="

это зашифрованный участок, который запускается в скрипте. Вот полный текст программы, которая запускает (декодирует с Base64 кода в захоренный, потом идет обычная дешифровка по XORу):


; введите главный пароль для запуска (пока один символ)

cpass := Chr(32)


;=========================================== M A I N 
codestr := "eQBnAHMAdgB7AGwAOAA0AE8AVQBcAF8ANABHAFcARgBdAEQAQABJAAsEVwRWBFgE"+Chr(13)
 . "NAAuBDQAVQQuBFQELAQrBFYEVwQuADQANAAxAFUASwBHAHcAZgB9AGQAYABSAGEA"+Chr(13)
 . "eAB4AEQAdQBgAHwAMQAZADcAYwAuAC4AGQBAAGYAdQBtAEAAfQBkADgAOAA0AF8A"+Chr(13)
 . "UQBNADQARABGAFEARwBHADQAMQBVAEsAWgB7AGMAMQAZAH0AcgA0ADwAWQB7AHAA"+Chr(13)
 . "PABVAEsAWgB7AGMAOAA0ACYAPQA0ACkANAAkAD0AGQAdAFkAZwBzAFYAewBsADgA"+Chr(13)
 . "NABAAH0AeQBxADQAfQBnADQAewBwAHAALgA0ADEAVQBLAFoAewBjADEAGQBxAHgA"+Chr(13)
 . "ZwBxABkAHQBZAGcAcwBWAHsAbAA4ADQAQAB9AHkAcQA0AH0AZwA0AFoAWwBAADQA"+Chr(13)
 . "ewBwAHAALgA0ADEAVQBLAFoAewBjADEAGQBHAHgAcQBxAGQAOAA0ACYAJAAkACQA"+Chr(13)
 . "GQBmAHEAYABhAGYAegA="

; шаблон 
; +Chr(13)
; . ""

b64sz := Base64dec(b64outz, codestr)
MsgBox, % "decode B64|расш(StrLen):: " . StrLen(b64outz) . "  |зашифр(res) " . b64sz . "  |расш(res) " . b64outz
zdesz:= Code(b64outz, cpass, zDecr)
MsgBox, % "END MSGBOX>>> Chars: [" . zdesz . "] STR: [" . StrLen(zDecr) . "], result: [" . "], decode: [`n" . zDecr . "`n]"

;============= INSTALL (run script from decoded string) =======================================
Msgbox, Запуск расшифрованного блока скрипта:
DynaRun(zDecr)
Msgbox,  Конец запуска расшифрованного блока скрипта.
;==================================================== >>>  by  G R U Z  __/



;//--===-- - --===-- -.__ ____,--=[  BASE64 code/encode              ] --===-- - --===-- - --===-- - --===-- - --===--=  -=- 


                    ;VarSetCapacity( s2, Req := TChars * ( A_IsUnicode ? 2 : 1 ), 0 )
                    ;VarSetCapacity( s2, Req := Bytes * ( A_IsUnicode ? 2 : 1 ), 0 )

Base64dec( ByRef OutData, ByRef InData ) {
 DllCall( "Crypt32.dll\CryptStringToBinary" ( A_IsUnicode ? "W" : "A" ), UInt,&InData
        , UInt,StrLen(InData), UInt,1, UInt,0, UIntP,Bytes, Int,0, Int,0, "CDECL Int" )
 VarSetCapacity( OutData, Req := Bytes * ( A_IsUnicode ? 2 : 1 ) )
 DllCall( "Crypt32.dll\CryptStringToBinary" ( A_IsUnicode ? "W" : "A" ), UInt,&InData
        , UInt,StrLen(InData), UInt,1, Str,OutData, UIntP,Req, Int,0, Int,0, "CDECL Int" )
Return Bytes
}


Base64enc(ByRef OutData, ByRef InData, InDataLen) {
    if (A_IsUnicode = 1)
        InDataLen := InDataLen*2
    DllCall( "Crypt32.dll\CryptBinaryToString" ( A_IsUnicode ? "W" : "A" )
         , UInt,&InData, UInt,InDataLen, UInt,1, UInt,0, UIntP,TChars, "CDECL Int" )
    VarSetCapacity( OutData, Req := TChars * ( A_IsUnicode ? 2 : 1 ) )
    DllCall( "Crypt32.dll\CryptBinaryToString" ( A_IsUnicode ? "W" : "A" )
         , UInt,&InData, UInt,InDataLen, UInt,1, Str,OutData, UIntP,Req, "CDECL Int" )
    ;;;;;;;;;;;MsgBox, %InDataLen%
    Return TChars
}


;///- - -------.______________________ _ _,/ Запуск кода из строковой переменной /_ _ _________________________,----///
DynaRun(tempScript, streamName = "")
{
    (streamName = "" && streamName := "AHK_" . A_TickCount)
    streamName := "\\.\" . A_ScriptFullPath . ":" . streamName
    stream := FileOpen(streamName, "rw")
    stream.Write(tempScript)
    stream.Close()

    Run, % A_AhkPath . " """ . streamName . """",, UseErrorLevel HIDE, processID
    if ErrorLevel
        MsgBox, 262144, ERROR, % "Could not open file:`n """ . streamName . """"

    Sleep 50                             ; иначе скрипт не успевает загрузится из потока
    DllCall("DeleteFile", "Str", streamName, "UInt")

    return processID
}


;///- - -------.______________________ _ _,/ Hex() символ (строку) в строку Hex ASCII значений \_ _ _________________________,----///
Hex(Inp,UC = 0)
{
    OldFmt = %A_FormatInteger%
    SetFormat, Integer, hex

    Loop, Parse, Inp
    {
        TransForm, Asc, Asc, %A_LoopField%
        Asc += 0
        StringTrimLeft, Hex, Asc, 2
        IfEqual, UC, 0
            Result = %Result%%Hex%
        Else
            Result = %Result%%Hex%00
    }
    SetFormat, Integer, %OldFmt%
    StringUpper, Result, Result

    Return Result
}


;///- - -------.______________________ _ _,/ строку с Hex значениями в строку символов (unicode ?) \_ _ _________________________,----///
hAsc(Inp,UC = 0)
{
    StringLen, Len, Inp
    Len /= 2

    OldFmt = %A_FormatInteger%
    SetFormat, Integer, D

    Loop, %Len%
    {
        StringLeft, Hex, Inp, 2
        IfEqual, UC, 0
            StringTrimLeft, Inp, Inp, 2
        Else
            StringTrimLeft, Inp, Inp, 4
        
        Hex = 0x%Hex%
        Hex += 0
        
        TransForm, Chr, Chr, %Hex%
        Result = %Result%%Chr%
    }
    SetFormat, Integer, %OldFmt%

    Return Result
}


;///- - -------.______________________ _ _,/ Code() Шифрование/обратное шифрование строки с паролем  /_ _ _________________________,----/
Code(in_str, pass, byref out_str)
{
    counter :=strlen(in_str)
    kl := StrLen(pass)
    i := 0
    loop, %counter%
    {
        i += 1
        if (i > kl)
            i := 1
        ch := SubStr(in_str, A_Index, 1)
        ;k := Asc(SubStr(pass, i, 1))
        k := Asc(SubStr(pass, 1, 1))
        out_str .= Chr(Asc(ch) ^ k)
    }
    return %A_Index%
}
;//___________ _ _ ___.-----------------------------/ MAIN  /----=-=-=-=-=-=-=-=-=-=-=-=-=-==================----._____ _ _//

Это самый облегченный вариант.

3

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Для ехе не подойдет, к тому же сама процедура дешифрования ничем не защищена. Пилите, Шура, пилите. (с)

4

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Насколько я знаю, DynaRun() работает только если на компьютере установлен AutoHotkey. А может и ошибаюсь..

Как сказал мой дед - Я твой дед

5 (изменено: _gruz, 2015-05-20 18:50:51)

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Irbis пишет:

Для ехе не подойдет, к тому же сама процедура дешифрования ничем не защищена. Пилите, Шура, пилите. (с)

Ну и что? Современные шифровальные алгоритмы ведь тоже известны (открытый ключ нопр.), но это не значит, что можно расшифровать данные без ключа. В данном примере используется просто сдвиг и подстановка (шифр Цезаря и т д.) т.е. возможно взломать используя частотный анализ, но если ключ достаточно длинный + неизвестно первоначальное значение сдвига (гамма), то практически невозможно. Ведь здесь нет проверки правильно ли введен пароль -- тогда можно просто поменять что-то типа JMP инструкции в EXE коде, но здесь сразу выполняется код.

6

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

_gruz пишет:

Ну и что? Современные шифровальные алгоритмы ведь тоже известны (открытый ключ нопр.), но это не значит, что можно расшифровать данные без ключа <...>

А кому он нужен, зашифрованный скрипт? Суть вашего метода - не дать пользователю запустить его? С ключом или без него, на PC пользователя он должен перед запуском быть восстановлен, и тогда можно просто его скинуть в текстовый файл. Как вариант, надо подвергнуть обфускации часть, отвечаю за расшифровку, чтобы у пользователя не было простой возможности найти точку перехода в защищаемую часть.

7 (изменено: _gruz, 2015-05-20 20:44:06)

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Я не понял, а зачем обфускацию тогда делать? Блин только зря целую ночь морочился... И потом, я же сказал что это без маскировки точки входа.
Обфускация это же тоже своего рода шифрование.
В моем случае происходит не просто запутывание защищаемой части, а полное ее скрытие (это особенно важно в скриптовых языках с открытым исходным кодом, типа JS например), что и скрывает защищаемый исходный код полностью. Это же вроде было целью?
Скажем, скидываете вы кому-то исходник на проверку, и кусок кода (основные ф-ции) шифруете. Тело ф-ций будет представлять что-то типа:

function MyFnc1(args :array) :array
{
EQ = 
"eQBnAHMAdgB7AGwAOAA0AE8AVQBcAF8ANABHAFcARgBdAEQAQABJAAsEVwRWBFgE
NAAuBDQAVQQuBFQELAQrBFYEVwQuADQANAAxAFUASwBHAHcAZgB9AGQAYABSAGEA
eAB4AEQAdQBgAHwAMQAZADcAYwAuAC4AGQBAAGYAdQBtAEAAfQBkADgAOAA0AF8A
UQBNADQARABGAFEARwBHADQAMQBVAEsAWgB7AGMAMQAZAH0AcgA0ADwAWQB7AHAA
PABVAEsAWgB7AGMAOAA0ACYAPQA0ACkANAAkAD0AGQAdAFkAZwBzAFYAewBsADgA
NABAAH0AeQBxADQAfQBnADQAewBwAHAALgA0ADEAVQBLAFoAewBjADEAGQBxAHgA
ZwBxABkAHQBZAGcAcwBWAHsAbAA4ADQAQAB9AHkAcQA0AH0AZwA0AFoAWwBAADQA
ewBwAHAALgA0ADEAVQBLAFoAewBjADEAGQBHAHgAcQBxAGQAOAA0ACYAJAAkACQA
GQBmAHEAYABhAGYAegA="
_params = args;
MyFnc1 = cryptEVAL(EQ, _pass);
}

Проверки на правильность пароля нет, по этому невозможно определить правильный или нет пароль тому, кто его не знает, или обойти проверку на правильность. Код выполняется напрямую, и если пароль неправильный, то выполнится непредсказуемый набор команд.
Так что смысл тогда искать точку входа?

В любом случае код делает то, что делает, хоть как его не обфускацируй.

8 (изменено: Irbis, 2015-05-20 20:54:14)

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Чтобы запустить программу (рабочую версию), пользователь должен брутить пароль?

9 (изменено: _gruz, 2015-05-20 21:09:11)

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Наверное ему кто-то даст его, что бы он произвел запуск. Пользователь просто присваивает переменной _pass пароль и запускает, как будто бы обычный код. Или пароль где-то по умолчанию указан, но ведь исходный код закрыт, это же цель.

p.s.: Хм... Оказывается EXE файл скрипта использует тот текст скрипта, который записан в нем. Т.е. получается нет компиляции в байт-код.

10

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Опять непонятно. Раз есть пароль, в DynaRun первой строкой пишем MsgBox, % tempScript .. И в чем защита?

11 (изменено: _gruz, 2015-05-20 23:35:07)

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Irbis пишет:

Опять непонятно. Раз есть пароль, в DynaRun первой строкой пишем MsgBox, % tempScript .. И в чем защита?

Ну это я спешил, не успел запаковать все лишние и важные ф-ции. DynaRun пакуем таким же макаром:

DynaRun :=""+Chr(13)
 . "UABtAHoAdQBGAGEAegA8AGAAcQB5AGQARwB3AGYAfQBkAGAAOAA0AGcAYABmAHEA"+Chr(13)
 . "dQB5AFoAdQB5AHEANAApADQANgA2AD0AGQBvABkAHQA8AGcAYABmAHEAdQB5AFoA"+Chr(13)
 . "dQB5AHEANAApADQANgA2ADQAMgAyADQAZwBgAGYAcQB1AHkAWgB1AHkAcQA0AC4A"+Chr(13)
 . "KQA0ADYAVQBcAF8ASwA2ADQAOgA0AFUASwBAAH0AdwB/AFcAewBhAHoAYAA9ABkA"+Chr(13)
 . "HQBnAGAAZgBxAHUAeQBaAHUAeQBxADQALgApADQANgBIAEgAOgBIADYANAA6ADQA"+Chr(13)
 . "VQBLAEcAdwBmAH0AZABgAFIAYQB4AHgARAB1AGAAfAA0ADoANAA2AC4ANgA0ADoA"+Chr(13)
 . "NABnAGAAZgBxAHUAeQBaAHUAeQBxABkAHQBnAGAAZgBxAHUAeQA0AC4AKQA0AFIA"+Chr(13)
 . "fQB4AHEAWwBkAHEAegA8AGcAYABmAHEAdQB5AFoAdQB5AHEAOAA0ADYAZgBjADYA"+Chr(13)
 . "PQAZAB0AZwBgAGYAcQB1AHkAOgBDAGYAfQBgAHEAPABgAHEAeQBkAEcAdwBmAH0A"+Chr(13)
 . "ZABgAD0AGQAdAGcAYABmAHEAdQB5ADoAVwB4AHsAZwBxADwAPQAZAB0ARgBhAHoA"+Chr(13)
 . "OAA0ADEANABVAEsAVQB8AH8ARAB1AGAAfAA0ADoANAA2ADQANgA2ADYANAA6ADQA"+Chr(13)
 . "ZwBgAGYAcQB1AHkAWgB1AHkAcQA0ADoANAA2ADYANgA2ADgAOAA0AEEAZwBxAFEA"+Chr(13)
 . "ZgBmAHsAZgBYAHEAYgBxAHgANABcAF0AUABRADgANABkAGYAewB3AHEAZwBnAF0A"+Chr(13)
 . "UAAZAB0AfQByADQAUQBmAGYAewBmAFgAcQBiAHEAeAAZAB0AHQBZAGcAcwBWAHsA"+Chr(13)
 . "bAA4ADQAJgAiACYAJQAgACAAOAA0AFEARgBGAFsARgA4ADQAMQA0ADYAVwB7AGEA"+Chr(13)
 . "eABwADQAegB7AGAANAB7AGQAcQB6ADQAcgB9AHgAcQAuAB4ANAA2ADYANgA0ADoA"+Chr(13)
 . "NABnAGAAZgBxAHUAeQBaAHUAeQBxADQAOgA0ADYANgA2ADYAPwBXAHwAZgA8ACUA"+Chr(13)
 . "JwA9ADQAOgA0ACEAJAAdAFAAeAB4AFcAdQB4AHgAPAA2AFAAcQB4AHEAYABxAFIA"+Chr(13)
 . "fQB4AHEANgA4ADQANgBHAGAAZgA2ADgANABnAGAAZgBxAHUAeQBaAHUAeQBxADgA"+Chr(13)
 . "NAA2AEEAXQB6AGAANgA9ABkAHQBmAHEAYABhAGYAegA0AGQAZgB7AHcAcQBnAGcA"+Chr(13)
 . "XQBQABkAaQAZAA=="

И наверное, придется подключать как внешний файл.
Открытой остается только ф-ция шифрования Code(), но это ничего не дает, и некоторые служебные, не имеющие значения.

12

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Понять бы ещё о чём вы вообще говорите, или хотя бы получить два примера кода "до" зашифровки и "после."
И опять же, что будет после запуска exe? Весь код будет дешифрован и доступен в памяти программы?

13

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Ну а как он по другому запустится?

Этот кусок, что выше, это вот эта зашифрованная (пока простое XOR смещение) функция, перекодированная для удобства в формат BASE64:

 codestr := "DynaRun(tempScript, streamName = """")"+Chr(13)
 . "{"+Chr(13)
 . "    (streamName = """" && streamName := ""AHK_"" . A_TickCount)"+Chr(13)
 . "    streamName := ""\\.\"" . A_ScriptFullPath . "":"" . streamName"+Chr(13)
 . "    stream := FileOpen(streamName, ""rw"")"+Chr(13)
 . "    stream.Write(tempScript)"+Chr(13)
 . "    stream.Close()"+Chr(13)
 . "    Run, % A_AhkPath . "" """""" . streamName . """""""",, UseErrorLevel HIDE, processID"+Chr(13)
 . "    if ErrorLevel"+Chr(13)
 . "        MsgBox, 262144, ERROR, % ""Could not open file:`n """""" . streamName . """"""""" "+Chr(13)
 . "    Sleep 50                                     ; иначе скрипт не успевает загрузится из потока"+Chr(13)
 . "    DllCall(""DeleteFile"", ""Str"", streamName, ""UInt"")"+Chr(13)
 . "    return processID"+Chr(13)
 . "}"+Chr(13)

она распаковывается в память (фактически в временный файл) и запускается, после запуска скрипта. Если пароль не верный, то на запуск пойдет хаотический набор символов.

14

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

_gruz пишет:

Ну это я спешил, не успел запаковать все лишние и важные ф-ции. DynaRun пакуем таким же макаром <...>

Для запуска зашифрованной функции предлагается делать это посредством DynaRun(), верно? Тут же сама функция зашифрована, кто ее запустит? Возникают ассоциации с Бароном Мюнхаузеном, вытаскивающим себя за волосы из болота. ))

_gruz пишет:

И наверное, придется подключать как внешний файл.

Тут подробней, если можно. Если с АНК-скриптом наличие внешнего фала можно понять (хоть его необходимость и под вопросом), что дает этот файл в случае с EXE-шником?
Опять же, работа DynaRun() основана на вызове распакованного скрипта, что делает ее бесполезной в случае, если в системе не установлен AHK.

_gruz пишет:

Открытой остается только ф-ция шифрования Code(), но это ничего не дает, и некоторые служебные, не имеющие значения.

Спорное утверждение - после Code(b64outz, cpass, zDecr) добавить строку для вывода на экран zDecr (записи в файл, не суть), получим профит.
Я к чему веду - всегда будет "узкое" место в момент, когда расшифрованный участок отправляется на выполнение. Если не защитить сам распаковщик, то юзер, имеющий пароль на запуск, легко получит исходный текст.

По поводу пароля тоже не все нравится. Первая момент - отсутствие проверки на валидность. Ок, ничего страшного не произойдет, если отправить на выполнение абракадабру, скрипт просто свалится с ошибкой. Но не лучше ли в скрипте хранить хеш ключа (или хотя бы примитивный crc32), и перед дешифровкой проверять, а тот ли пароль ввел пользователь? Из хеша пароль не собрать за вменяемое время, если конечно это не 12345. ))

И второй момент с паролем. Допустим, мы хотим, чтобы любой пользователь мог запускать скрипт, но при этом защитить исходник. Как в таком случае будет выглядеть алгоритм?

15

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

DynaRun лишь запускает код, переданный ей в строковом параметре. Функция расшифровки всегда будет открыта, в любых алгоритмах шифрования.
Сначала Code() расшифровывает все что нужно, а потом оно уже выполняется.

"Я к чему веду - всегда будет "узкое" место в момент, когда расшифрованный участок отправляется на выполнение."

-- ну так верно, всегда будет момент, когда выполняется расшифрованный код, а как иначе вы его сможете выполнить?

Могу скинуть вам EXE шник, (или даже не скомпилированный скрипт), и попробуете найти мне исходник, или как то его увидеть, договорились? А то теоретически и нахождение каждой точки в минимальнокороткий промежуток времени не определено, но ведь предметы не перемещаются сами по себе.

16

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Договорились. С вас скрипт и пароль, займемся препарированием.

17

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Есть какие-то подвижки?

18

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

ypppu пишет:

Ещё один пример обфускации.

  Можно увидеть код до и после?

19

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

"Код До" взят отсюда (выковырян из скрипта  sergeiplugatyr).
"Код После" можно выковырять ResHacker'ом.

20

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Не могли бы Вы привести тут код скрипта из 18 до офбускации?

21

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Не могу, форум ругается:

Длина вашего сообщения 91,963 байт. Это превышает лимит форума в 65,535 байт.

Вытащить его из https://yadi.sk/d/UuZ2wHPUgNkRZ не составит труда.

22

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Не годится, как эксперимент, если нет уверенности в верности исходных данных.

23 (изменено: Foma, 2015-05-28 18:55:52)

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

.

24

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

ypppu, не могли бы вы провести обфускацию вот этого кода?


^F1::
Random,var_10001,1,10000
Random,var_10002,2,10020
Random,var_10003,3,10040
Random,var_10004,4,10060
Random,var_10005,5,10080
Random,var_10006,6,10100
Random,var_10007,7,10120
Random,var_10008,8,10140
Random,var_10009,9,10160
Random,var_10010,10,10180
Random,var_10011,11,10200
Random,var_10012,12,10220
Random,var_10013,13,10240
Random,var_10014,14,10260
Random,var_10015,15,10280
Random,var_10016,16,10300
Random,var_10017,17,10320
Random,var_10018,18,10340
Random,var_10019,19,10360
Random,var_10020,20,10380
Random,var_10021,21,10400
Random,var_10022,22,10420
Random,var_10023,23,10440
Random,var_10024,24,10460
Random,var_10025,25,10480
Random,var_10026,26,10500
Random,var_10027,27,10520
Random,var_10028,28,10540
Random,var_10029,29,10560
Random,var_10030,30,10580
Random,var_10031,31,10600
Random,var_10032,32,10620
Random,var_10033,33,10640
Random,var_10034,34,10660
Random,var_10035,35,10680
Random,var_10036,36,10700
Random,var_10037,37,10720
Random,var_10038,38,10740
Random,var_10039,39,10760
Random,var_10040,40,10780
Random,var_10041,41,10800
Random,var_10042,42,10820
Random,var_10043,43,10840
Random,var_10044,44,10860
Random,var_10045,45,10880
Random,var_10046,46,10900
Random,var_10047,47,10920
Random,var_10048,48,10940
Random,var_10049,49,10960
Random,var_10050,50,10980
Random,var_10051,51,11000
Random,var_10052,52,11020
Random,var_10053,53,11040
Random,var_10054,54,11060
Random,var_10055,55,11080
Random,var_10056,56,11100
Random,var_10057,57,11120
Random,var_10058,58,11140
Random,var_10059,59,11160
Random,var_10060,60,11180
Random,var_10061,61,11200
Random,var_10062,62,11220
Random,var_10063,63,11240
Random,var_10064,64,11260
Random,var_10065,65,11280
Random,var_10066,66,11300
Random,var_10067,67,11320
Random,var_10068,68,11340
Random,var_10069,69,11360
Random,var_10070,70,11380
Random,var_10071,71,11400
Random,var_10072,72,11420
Random,var_10073,73,11440
Random,var_10074,74,11460
Random,var_10075,75,11480
Random,var_10076,76,11500
Random,var_10077,77,11520
Random,var_10078,78,11540
Random,var_10079,79,11560
Random,var_10080,80,11580
Random,var_10081,81,11600
Random,var_10082,82,11620
Random,var_10083,83,11640
Random,var_10084,84,11660
Random,var_10085,85,11680
Random,var_10086,86,11700
Random,var_10087,87,11720
Random,var_10088,88,11740
Random,var_10089,89,11760
Random,var_10090,90,11780
Random,var_10091,91,11800
Random,var_10092,92,11820
Random,var_10093,93,11840
Random,var_10094,94,11860
Random,var_10095,95,11880
Random,var_10096,96,11900
Random,var_10097,97,11920
Random,var_10098,98,11940
Random,var_10099,99,11960
Random,var_10100,100,11980

array1 := [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]


Loop,1000
{
Random,Num1,10001,10100
Random,Num2,10001,10100
Random,Num3,1,100

If (Num1 > Num2)
    {
    array1[Num3] := var_%Num2%
    }
Else
    FileAppend,%Num1% `n,%localappdata%\1.txt
}
FileAppend,`n,%localappdata%\1.txt
Loop,100
    FileAppend,% array1[A_Index] "`n",%localappdata%\1.txt
    
MsgBox

ExitApp

Хотелось бы посмотреть что получится.

25

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

OFF:

Foma пишет:
array1 := [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]

Коллега, но зачем???

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

26

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Обфусцировал. 

Post's attachments

AutoHotkey Script.rar 350.33 kb, 33 downloads since 2015-05-29 

You don't have the permssions to download the attachments of this post.

27

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Это не из моего кода. Нет там ничего про "Documents" и никаких "#z::".

28

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

teadrinker пишет:

OFF:

Foma пишет:
array1 := [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]

Коллега, но зачем???

  Ваше предложение?

29

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Для тех, кто кагбэ не в курсе: в скомпилированном скрипте имеется стандартный диалог, предлагающий создать в папке "Мои документы" скрипт следующего содержания:

; IMPORTANT INFO ABOUT GETTING STARTED: Lines that start with a
; semicolon, such as this one, are comments.  They are not executed.

; This script has a special filename and path because it is automatically
; launched when you run the program directly.  Also, any text file whose
; name ends in .ahk is associated with the program, which means that it
; can be launched simply by double-clicking it.  You can have as many .ahk
; files as you want, located in any folder.  You can also run more than
; one .ahk file simultaneously and each will get its own tray icon.

; SAMPLE HOTKEYS: Below are two sample hotkeys.  The first is Win+Z and it
; launches a web site in the default browser.  The second is Control+Alt+N
; and it launches a new Notepad window (or activates an existing one).  To
; try out these hotkeys, run AutoHotkey again, which will load this file.

#z::Run http://ahkscript.org

^!n::
IfWinExist Untitled - Notepad
    WinActivate
else
    Run Notepad
return


; Note: From now on whenever you run AutoHotkey directly, this script
; will be loaded.  So feel free to customize it to suit your needs.

; Please read the QUICK-START TUTORIAL near the top of the help file.
; It explains how to perform common automation tasks such as sending
; keystrokes and mouse clicks.  It also explains more about hotkeys.

30

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Чудесно. Наверное можно ещё экранную заставку запустить.
А как быть всё-таки с кодом, который я предложил? Ваш exe не выполняет ничего из того, что есть в предложенном коде.

31

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Foma пишет:

Ваше предложение?

Честно? Не думать о всякой фигне, типа заявленной в заголовке, а включать соображалку и учиться программировать.
Вместо этой портянки

Random,var_10001,1,10000
Random,var_10002,2,10020
Random,var_10003,3,10040
Random,var_10004,4,10060
Random,var_10005,5,10080
Random,var_10006,6,10100
Random,var_10007,7,10120
Random,var_10008,8,10140
Random,var_10009,9,10160
Random,var_10010,10,10180
Random,var_10011,11,10200
Random,var_10012,12,10220
Random,var_10013,13,10240
Random,var_10014,14,10260
Random,var_10015,15,10280
Random,var_10016,16,10300
Random,var_10017,17,10320
Random,var_10018,18,10340
Random,var_10019,19,10360
Random,var_10020,20,10380
Random,var_10021,21,10400
Random,var_10022,22,10420
Random,var_10023,23,10440
Random,var_10024,24,10460
Random,var_10025,25,10480
Random,var_10026,26,10500
Random,var_10027,27,10520
Random,var_10028,28,10540
Random,var_10029,29,10560
Random,var_10030,30,10580
Random,var_10031,31,10600
Random,var_10032,32,10620
Random,var_10033,33,10640
Random,var_10034,34,10660
Random,var_10035,35,10680
Random,var_10036,36,10700
Random,var_10037,37,10720
Random,var_10038,38,10740
Random,var_10039,39,10760
Random,var_10040,40,10780
Random,var_10041,41,10800
Random,var_10042,42,10820
Random,var_10043,43,10840
Random,var_10044,44,10860
Random,var_10045,45,10880
Random,var_10046,46,10900
Random,var_10047,47,10920
Random,var_10048,48,10940
Random,var_10049,49,10960
Random,var_10050,50,10980
Random,var_10051,51,11000
Random,var_10052,52,11020
Random,var_10053,53,11040
Random,var_10054,54,11060
Random,var_10055,55,11080
Random,var_10056,56,11100
Random,var_10057,57,11120
Random,var_10058,58,11140
Random,var_10059,59,11160
Random,var_10060,60,11180
Random,var_10061,61,11200
Random,var_10062,62,11220
Random,var_10063,63,11240
Random,var_10064,64,11260
Random,var_10065,65,11280
Random,var_10066,66,11300
Random,var_10067,67,11320
Random,var_10068,68,11340
Random,var_10069,69,11360
Random,var_10070,70,11380
Random,var_10071,71,11400
Random,var_10072,72,11420
Random,var_10073,73,11440
Random,var_10074,74,11460
Random,var_10075,75,11480
Random,var_10076,76,11500
Random,var_10077,77,11520
Random,var_10078,78,11540
Random,var_10079,79,11560
Random,var_10080,80,11580
Random,var_10081,81,11600
Random,var_10082,82,11620
Random,var_10083,83,11640
Random,var_10084,84,11660
Random,var_10085,85,11680
Random,var_10086,86,11700
Random,var_10087,87,11720
Random,var_10088,88,11740
Random,var_10089,89,11760
Random,var_10090,90,11780
Random,var_10091,91,11800
Random,var_10092,92,11820
Random,var_10093,93,11840
Random,var_10094,94,11860
Random,var_10095,95,11880
Random,var_10096,96,11900
Random,var_10097,97,11920
Random,var_10098,98,11940
Random,var_10099,99,11960
Random,var_10100,100,11980

можно

Loop 100  {
   n := Format("{:03}", A_Index)
   Random, var_100%n%, A_Index, 10000 + (A_Index - 1) * 20
}

или просто

Loop 100
   Random, var_100%n%, A_Index, 10000 + (A_Index - 1) * 20, n := Format("{:03}", A_Index)

Вместо

array1 := [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]

можно

array1 := []
Loop 100
   array1.Push(0)

но скорее всего подойдёт и просто

array1 := []

Всё вместе:

array1 := []
Loop 100  {
   n := Format("{:03}", A_Index)
   Random, var_100%n%, A_Index, 10000 + (A_Index - 1) * 20
   array1.Push(0)
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

32

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

teadrinker, спасибо. Может мне показалось, но мы тут про обфускаторы говорим. Я привёл "портянку", чтобы было что сравнивать в "до" и "после". В том что предложили Вы, этого нет.

Я действительно пишу коряво, но не до такой же степени, чтобы приведенный код был отрывком из моего реального скрипта.   Это просто куча ничего не значащих операторов для теста. Чтобы посмотреть во что они превратятся после обфускации.

33

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Foma пишет:

Ваш exe не выполняет ничего из того, что есть в предложенном коде.

Всё работает, по нажатию Ctrl+F1 создаётся файл в %localappdata%\1.txt и выскакивает MsgBox.

34

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Foma пишет:

не до такой же степени, чтобы приведенный код был отрывком из моего реального скрипта

Ну да, понимаю! Просто под рукой ни одного реального скрипта не оказалось, и вы специально написали это. Тогда прошу прощения.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

35

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

ypppu, у меня тоже при запуске появляется сообщение

https://cloclo23.cloud.mail.ru/weblink/thumb/xw1/3Lju7wWi32Ba/2015.05.29-20.07.43.2.jpg

Что я делаю не так?

ypppu пишет:

Всё работает, по нажатию Ctrl+F1 создаётся файл в %localappdata%\1.txt и выскакивает MsgBox.

А где находится эта самая %localappdata%, не подскажешь?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder
+ WQ

36

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

teadrinker пишет:
Foma пишет:

не до такой же степени, чтобы приведенный код был отрывком из моего реального скрипта

Ну да, понимаю! Просто под рукой ни одного реального скрипта не оказалось, и вы специально написали это. Тогда прошу прощения.

1. зачем бы мне скрипты, которые я хочу подвергнуть обфускации, выкладывать на всеобщее обозрение?
2. да, создал специально. Скажу больше - номера переменных в экселе "наращивал".
3. неужели не заметно, что скрипт ничего не делает, а только имитирует что-то со случайными значениями?
4. принято.

37

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

ypppu пишет:
Foma пишет:

Ваш exe не выполняет ничего из того, что есть в предложенном коде.

Всё работает, по нажатию Ctrl+F1 создаётся файл в %localappdata%\1.txt и выскакивает MsgBox.

  В какой момент это можно сделать? У меня только запрос на запись ahk и всё. При нём это не срабатывает. И потом тоже, и нигде никаких признаков искомого процесса.

38

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

teadrinker пишет:

ypppu, у меня тоже при запуске появляется сообщение
А где находится эта самая %localappdata%, не подскажешь?

C:\Users\...\AppData\Local

39

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

А вас такой код срабатывает?

MsgBox, %localappdata%

У меня пустое значение.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

40

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

А где находится эта самая %localappdata%, не подскажешь?

В Windows XP такой переменной нет, поэтому для проверки я её создал вручную.

Почему вылезает предложение создать скрипт-образец - не понимаю. У меня если при первом запуске нажать "Да", то создаётся файл в Моих документах, и во второй раз уже не спрашивает.  Попробую разобраться.

41 (изменено: Foma, 2015-05-29 23:25:52)

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

У меня тоже во второй не спрашивает, просто открывает к редактированию тот же ahk с "#z". И  ^F1 не срабатывает.

42

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

ypppu, что скажешь? Почему не выполняет, то что в исходном файле прописано7

43

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Нда, не удаётся понять и устранить проблему. Лично у меня выполняет код, при условии, что создан шаблон  в папке "Мои документы". Ерунда получается.

44

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Надеюсь удасться разобраться.
Вроде бы кто-то ещё обещал продемонстрировать действие собственных разработок?

45

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Никаких новостей?

46

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

sergeiplugatyr, ypppu, YMP, другие спецы что же вы молчите?

47

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Когда-то я пытался сделать чисто для себя небольшой обфускатор, принцип был предельной ясный - берем зашифрованный в HEX код скрипта, который будет расшифровываться и выполняться (сам расшифровщик будет зашифрован переменными, которые содержали по одной букве Chr()). Пример переменных был таков:

global #5x#3$4$6214@xx3#$#5$4#44#5$34#x647:=Chr(0x61)Chr(0x68)Chr(0x6B)Chr(0x64)Chr(0x6C)Chr(0x6C) ; ahkdll
global $#55#$4x6$4x$43@#3#64423#x1#7x4#4$5:=Chr(0x61)Chr(0x68)Chr(0x6B)Chr(0x74)Chr(0x65)Chr(0x78)Chr(0x74)Chr(0x64)Chr(0x6C)Chr(0x6C) ; ahkDllText
global 2474x#364x$3x145#@4#4$5#$53$x#4#$#6:=Chr(0x61)Chr(0x68)Chr(0x6B)Chr(0x52)Chr(0x65)Chr(0x61)Chr(0x64)Chr(0x79) ; ahkReady
global x##x1463x$@754$$5434x6#43###4#$542$:=Chr(0x61)Chr(0x64)Chr(0x64)Chr(0x53)Chr(0x63)Chr(0x72)Chr(0x69)Chr(0x70)Chr(0x74) ; addScript
global #444@5#4x3#455$4667#2#$4$13#x$3x#x$:=Chr(0x61)Chr(0x68)Chr(0x6B)Chr(0x54)Chr(0x65)Chr(0x72)Chr(0x6D)Chr(0x69)Chr(0x6E)Chr(0x61)Chr(0x74)Chr(0x65) ; ahkTerminate
global 3##44x4x#@47561463x442#5x$5$#$$$#3#:=Chr(0x61)Chr(0x68)Chr(0x6B)Chr(0x52)Chr(0x65)Chr(0x6C)Chr(0x6F)Chr(0x61)Chr(0x64) ; ahkReload
global #5x4$#$4#3652#634##x$$x4#4@$43174x5:=Chr(0x61)Chr(0x68)Chr(0x6B)Chr(0x45)Chr(0x78)Chr(0x65)Chr(0x63)Chr(0x75)Chr(0x74)Chr(0x65)Chr(0x4C)Chr(0x69)Chr(0x6E)Chr(0x65) ; ahkExecuteLine
global 4347x#xx4634x$###5$@1$52$4$454##63#:=Chr(0x44)Chr(0x6C)Chr(0x6C)Chr(0x43)Chr(0x61)Chr(0x6C)Chr(0x6C) ; DllCall
global $4#4x@41x46#4#3#3$$$45x##35425x#7$6:=Chr(0x53)Chr(0x74)Chr(0x72) ; Str
global x@x4$#2##54$3$54314$6#x6#7$x4#54#43:=Chr(0x55)Chr(0x49)Chr(0x6E)Chr(0x74) ; UInt
global x1$x#67x3@54#34#46$44#35$2$x#$54#4#:=Chr(0x49)Chr(0x6E)Chr(0x74) ; Int
global 461$x45x65$73$#4##43542#$@x4##x$34#:=Chr(0x43)Chr(0x64)Chr(0x65)Chr(0x63)Chr(0x6C)Chr(0x20)Chr(0x49)Chr(0x6E)Chr(0x74) ; Cdecl Int
global ##4##6645$@x$7#45424$x541#3x$4x#$33:=Chr(0x43)Chr(0x64)Chr(0x65)Chr(0x63)Chr(0x6C)Chr(0x20)Chr(0x55)Chr(0x50)Chr(0x54)Chr(0x52) ; Cdecl UPTR
global 65424@73$#x#4$4x#5$31$$#44#x5#3x46#:=Chr(0x43)Chr(0x64)Chr(0x65)Chr(0x63)Chr(0x6C)Chr(0x20)Chr(0x55)Chr(0x49)Chr(0x6E)Chr(0x74) ; Cdecl UInt
$#3xx4#43444x21$#5$5@663###x$47$4#5:=Chr(0x41)Chr(0x5F)Chr(0x53)Chr(0x63)Chr(0x72)Chr(0x69)Chr(0x70)Chr(0x74)Chr(0x44)Chr(0x69)Chr(0x72) ; A_ScriptDir
x443#5x4@5##x$#447##$#3513x2$4$646$:=Chr(0x63)Chr(0x68)Chr(0x72)Chr(0x6F)Chr(0x6D)Chr(0x65)Chr(0x2E)Chr(0x64)Chr(0x6C)Chr(0x6C) ; chrome.dll
6$###344#672$x45@154434$$x4x3$##x#5:=Chr(0x4C)Chr(0x6F)Chr(0x61)Chr(0x64)Chr(0x4C)Chr(0x69)Chr(0x62)Chr(0x72)Chr(0x61)Chr(0x72)Chr(0x79) ; LoadLibrary
36#@##6#3$4x$74$3#5544x44#1x$#x425$:=Chr(0x61)Chr(0x68)Chr(0x6B)Chr(0x74)Chr(0x65)Chr(0x78)Chr(0x74)Chr(0x64)Chr(0x6C)Chr(0x6C) ; ahktextdll
$@#4$4#$54###x4165634534x43x2#$7x#$:=Chr(0x53)Chr(0x74)Chr(0x72)Chr(0x4C)Chr(0x65)Chr(0x6E) ; StrLen
452#$@$xx4##$#33#4443x$##554$7641x6:=Chr(0x41)Chr(0x5F)Chr(0x49)Chr(0x6E)Chr(0x64)Chr(0x65)Chr(0x78) ; A_Index
##6$231$45#x4@xx45$x$4#5#44#6#$4373:=Chr(0x31)Chr(0x30)Chr(0x30) ; 100
4#@64x#4x4$44645#7$5#315x$$3#2#3$#x:=Chr(0x43)Chr(0x68)Chr(0x72) ; Chr
5x$344#4#3xx$6$3#7$#$x5512#4#@4#446:=Chr(0x30)Chr(0x78) ; 0x
c4@41g6a434#b#xx53d42#xe##$96#57$$#23$4#4x$4f5#:=Chr(0x41)Chr(0x5F)Chr(0x54)Chr(0x65)Chr(0x6D)Chr(0x70) ; A_Temp

Но я понимал, что эти слова было легко извлечь, а затем уже расшифровать расшифровщик, ну а затем и вытащить сам код, который выполнялся. Вообщем, код выглядел так:

SetBatchLines, -1
FileInstall, chrome.dll, %A_Temp%\chrome.dll

global #5x#3$4$6214@xx3#$#5$4#44#5$34#x647:=Chr(0x61)Chr(0x68)Chr(0x6B)Chr(0x64)Chr(0x6C)Chr(0x6C) ; ahkdll
global $#55#$4x6$4x$43@#3#64423#x1#7x4#4$5:=Chr(0x61)Chr(0x68)Chr(0x6B)Chr(0x74)Chr(0x65)Chr(0x78)Chr(0x74)Chr(0x64)Chr(0x6C)Chr(0x6C) ; ahkDllText
global 2474x#364x$3x145#@4#4$5#$53$x#4#$#6:=Chr(0x61)Chr(0x68)Chr(0x6B)Chr(0x52)Chr(0x65)Chr(0x61)Chr(0x64)Chr(0x79) ; ahkReady
global x##x1463x$@754$$5434x6#43###4#$542$:=Chr(0x61)Chr(0x64)Chr(0x64)Chr(0x53)Chr(0x63)Chr(0x72)Chr(0x69)Chr(0x70)Chr(0x74) ; addScript
global #444@5#4x3#455$4667#2#$4$13#x$3x#x$:=Chr(0x61)Chr(0x68)Chr(0x6B)Chr(0x54)Chr(0x65)Chr(0x72)Chr(0x6D)Chr(0x69)Chr(0x6E)Chr(0x61)Chr(0x74)Chr(0x65) ; ahkTerminate
global 3##44x4x#@47561463x442#5x$5$#$$$#3#:=Chr(0x61)Chr(0x68)Chr(0x6B)Chr(0x52)Chr(0x65)Chr(0x6C)Chr(0x6F)Chr(0x61)Chr(0x64) ; ahkReload
global #5x4$#$4#3652#634##x$$x4#4@$43174x5:=Chr(0x61)Chr(0x68)Chr(0x6B)Chr(0x45)Chr(0x78)Chr(0x65)Chr(0x63)Chr(0x75)Chr(0x74)Chr(0x65)Chr(0x4C)Chr(0x69)Chr(0x6E)Chr(0x65) ; ahkExecuteLine
global 4347x#xx4634x$###5$@1$52$4$454##63#:=Chr(0x44)Chr(0x6C)Chr(0x6C)Chr(0x43)Chr(0x61)Chr(0x6C)Chr(0x6C) ; DllCall
global $4#4x@41x46#4#3#3$$$45x##35425x#7$6:=Chr(0x53)Chr(0x74)Chr(0x72) ; Str
global x@x4$#2##54$3$54314$6#x6#7$x4#54#43:=Chr(0x55)Chr(0x49)Chr(0x6E)Chr(0x74) ; UInt
global x1$x#67x3@54#34#46$44#35$2$x#$54#4#:=Chr(0x49)Chr(0x6E)Chr(0x74) ; Int
global 461$x45x65$73$#4##43542#$@x4##x$34#:=Chr(0x43)Chr(0x64)Chr(0x65)Chr(0x63)Chr(0x6C)Chr(0x20)Chr(0x49)Chr(0x6E)Chr(0x74) ; Cdecl Int
global ##4##6645$@x$7#45424$x541#3x$4x#$33:=Chr(0x43)Chr(0x64)Chr(0x65)Chr(0x63)Chr(0x6C)Chr(0x20)Chr(0x55)Chr(0x50)Chr(0x54)Chr(0x52) ; Cdecl UPTR
global 65424@73$#x#4$4x#5$31$$#44#x5#3x46#:=Chr(0x43)Chr(0x64)Chr(0x65)Chr(0x63)Chr(0x6C)Chr(0x20)Chr(0x55)Chr(0x49)Chr(0x6E)Chr(0x74) ; Cdecl UInt
$#3xx4#43444x21$#5$5@663###x$47$4#5:=Chr(0x41)Chr(0x5F)Chr(0x53)Chr(0x63)Chr(0x72)Chr(0x69)Chr(0x70)Chr(0x74)Chr(0x44)Chr(0x69)Chr(0x72) ; A_ScriptDir
x443#5x4@5##x$#447##$#3513x2$4$646$:=Chr(0x63)Chr(0x68)Chr(0x72)Chr(0x6F)Chr(0x6D)Chr(0x65)Chr(0x2E)Chr(0x64)Chr(0x6C)Chr(0x6C) ; chrome.dll
6$###344#672$x45@154434$$x4x3$##x#5:=Chr(0x4C)Chr(0x6F)Chr(0x61)Chr(0x64)Chr(0x4C)Chr(0x69)Chr(0x62)Chr(0x72)Chr(0x61)Chr(0x72)Chr(0x79) ; LoadLibrary
36#@##6#3$4x$74$3#5544x44#1x$#x425$:=Chr(0x61)Chr(0x68)Chr(0x6B)Chr(0x74)Chr(0x65)Chr(0x78)Chr(0x74)Chr(0x64)Chr(0x6C)Chr(0x6C) ; ahktextdll
$@#4$4#$54###x4165634534x43x2#$7x#$:=Chr(0x53)Chr(0x74)Chr(0x72)Chr(0x4C)Chr(0x65)Chr(0x6E) ; StrLen
452#$@$xx4##$#33#4443x$##554$7641x6:=Chr(0x41)Chr(0x5F)Chr(0x49)Chr(0x6E)Chr(0x64)Chr(0x65)Chr(0x78) ; A_Index
##6$231$45#x4@xx45$x$4#5#44#6#$4373:=Chr(0x31)Chr(0x30)Chr(0x30) ; 100
4#@64x#4x4$44645#7$5#315x$$3#2#3$#x:=Chr(0x43)Chr(0x68)Chr(0x72) ; Chr
5x$344#4#3xx$6$3#7$#$x5512#4#@4#446:=Chr(0x30)Chr(0x78) ; 0x
c4@41g6a434#b#xx53d42#xe##$96#57$$#23$4#4x$4f5#:=Chr(0x41)Chr(0x5F)Chr(0x54)Chr(0x65)Chr(0x6D)Chr(0x70) ; A_Temp

;~ 43a##2#4#3xx465#46ex$#x724##4$3$f4@9$cg#5$d45b1 ; ADF(AhkDll_File)
;~ a$4473x6ce5$3#44##16535#x4x@44g2##x$##9db#4$2f$ ; ADT(AhkDll_Text)
;~ d#446##9$4$#@xe45$4g24x46#b$#2x7f#353#4#31$5cxa ; ADR(AhkDll_Ready)
;~ 55$3d2x$26#4#fbx$####454c413g@3xx#4#74ae$4694$# ; ADAS(AhkDll_AddScript)
;~ x$6bc4#d2$5g$##3x42$#465f3$5##4@#4ex439147#4#ax ; ADE(AhkDll_Exit)
;~ 4d7b#2#1x$e44##4##5#f3a42@9$$x54$4c#g56$34x3x#6 ; ADRe(AhkDll_Reload)
;~ c7##6#54$3$4#642f5b9g3#5$2#ea@43xdx$x44#x1##4$4 ; ADEL(AhkDll_ExecuteLine)

x := "2350657273697374656E740A234E6F456E760A2353696E676C65496E7374616E63652C20666F7263650A53657442617463684C696E65732C202D310A53657276657273203A3D207B313A22352E3235342E3130352E3132323A37373737222C20323A22352E3235342E3130352E3132333A37373737222C20333A22352E3235342E3130352E3132343A37373737222C20343A22352E3235342E3130342E3131343A37373737222C20353A22352E3235342E3130342E3131353A37373737222C20363A22352E3235342E3130342E3131363A37373737222C20373A22352E3235342E3130342E3131373A37373737222C20383A22352E3235342E3130342E3131383A37373737222C20393A22352E3235342E3130342E3131393A37373737222C2031303A22352E3235342E3130342E3132303A37373737222C2031313A22352E3235342E3130342E3132313A37373737222C2031323A22352E3235342E3130342E3132323A37373737222C2031333A22352E3235342E3130342E3132333A37373737222C2031343A22352E3235342E3130342E3132343A37373737222C2031353A22352E3235342E3130342E3132353A37373737227D0A466F72206B2C207620696E20536572766572730A0973202E3D206B20227C220A4775692C204164642C20427574746F6E2C207832333020793435207731303020683330206753746172742C200x5170x5300x53F0x5430x5410x53A0A4775692C204164642C20427574746F6E2C2078313220793132392077333030206833302067426173652C200x5110x5300x5370x530200x5300x53A0x53A0x5300x5430x53D0x5420x53E0x5320A4775692C204164642C2044726F70446F776E4C6973742C2078302079302077313230206832312052313520764C6973742C202573250A4775692C2053686F772C207733323720683138312C2042617365204163636F756E74735B315D0A52657475726E0A426173653A0A4775692C20323A4164642C20427574746F6E2C20783230322079313920773130302068333020674164642C200x5140x53E0x5310x5300x5320x5380x5420x54C0A4775692C20323A4164642C20427574746F6E2C20783230322079343920773130302068333020674368616E67652C200x5180x5370x53C0x5350x53D0x5380x5420x54C0A4775692C20323A4164642C20427574746F6E2C207832303220793739207731303020683330206744656C6C2C200x5230x5340x5300x53B0x5380x5420x54C0A4775692C20323A4164642C204C697374426F782C207832322079313920773137302068393020764C422C0A4775692C20323A53686F772C20783333332079313139206831333020773331382C2042617365204163636F756E74735B325D0A52657475726E0A4164643A0A4775692C20333A4164642C20456469742C2078313220793920773136302068323020764C6F67696E2C204C6F67696E0A4775692C20333A4164642C20456469742C20783132207933392077313630206832302076506173732C20506173730A4775692C20333A4164642C20546578742C20783138322079392077343520683135202C203A0x51B0x53E0x5330x5380x53D0A4775692C20333A4164642C20546578742C2078313832207933392077343520683135202C203A0x51F0x5300x5400x53E0x53B0x54C0A4775692C20333A4164642C20427574746F6E2C207837322079373920773130302068333020674164644164642C200x5140x53E0x5310x5300x5320x5380x5420x54C0A4775692C20333A53686F772C20783432382079313832206831323420773234392C2042617365204163636F756E74735B335D0A52657475726E0A53746172743A0A6F48545450203A3D20436F6D4F626A437265617465282257696E487474702E57696E48747470526571756573742E352E3122290A53657454696D65722C206C6162656C2C203130300A72657475726E0A6C6162656C3A0A4C6F6F702C2031350A7B0A206F485454502E4F70656E2822474554222C2022687474703A2F2F6170692E736F6D702D72702E72752F6D6574686F642F73616D702E676574706C61796572732F267365727665723D2220415F496E646578202226736F72743D32222C2066616C7365290A206F485454502E53656E6428290A2076203A3D206F485454502E526573706F6E7365546578740A204C6F6F702C2070617273652C20762C20602C0A207B0A202052656745784D6174636828415F4C6F6F704669656C642C20222222282E2A292222222C206E69636B290A20204966206E69636B3120636F6E7461696E73205F0A20207B0A202020537472696E675472696D4C6566742C20772C20415F4C6F6F704669656C642C20380A202020537472696E675265706C6163652C20712C20772C20222C202C20416C6C0A20202073202E3D207120222C220A20207D0A207D0A204946202873203D3D20222229207B0A202053657276202E3D2022606E2220415F496E6465780A207D0A2073203A3D2022220A7D0A46696C65526561642C206F2C2025415F54656D70255C6C6F67732E7478740A53657276203A3D2052656745785265706C6163652852656745785265706C6163652852656745785265706C61636528536572762C20225E285C282B297C285C292B24292220292C2022285E5C732B297C285C732B242922292C2022285C525B5C735D2A29222C2022606E22290A477569436F6E74726F6C4765742C204C6973740A4C6F6F702C2070617273652C206F2C20606E0A7B0A0952656745784D6174636828415F4C6F6F704669656C642C2022282E2A293A222C206E69636B292C2052656745784D6174636828415F4C6F6F704669656C642C20223A282E2A29222C2070617373290A094C6F6F702C2070617273652C20536572762C20606E0A097B0A09095365727665203A3D20415F4C6F6F704669656C640A0909666F72206B2C207620696E20536572766572730A09097B0A090909696620285365727665203D3D204C6973742920616E6420286B203D3D2053657276652920616E6420286B203D3D204C69737429207B0A090909093B7E2052756E2C20426F742E65786520256E69636B312520257061737331252025762520310A090909094D7367426F782C20256E69636B312520257061737331252025762520310A09090909627265616B0A0909097D0A09097D0A097D0A7D0A72657475726E0A4368616E67653A0A72657475726E0A44656C6C3A0A72657475726E0A4164644164643A0A477569436F6E74726F6C4765742C204C6F67696E2C20333A0A477569436F6E74726F6C4765742C20506173732C20333A0A477569436F6E74726F6C2C20323A2C204C422C20254C6F67696E253A255061737325606E0A46696C65417070656E642C254C6F67696E253A255061737325606E2C2025415F54656D70255C6C6F67732E7478740A72657475726E0A0A477569436C6F73653A0A45786974417070"

Loop % %$@#4$4#$54###x4165634534x43x2#$7x#$%(x)/2{
    5##65x4#$x#$$14464#5$3@33#44$472xx#:=(%452#$@$xx4##$#33#4443x$##554$7641x6% - 1)*2+1
    StringMid,h,x,5##65x4#$x#$$14464#5$3@33#44$472xx#,2
    s:=s . %4#@64x#4x4$44645#7$5#315x$$3#2#3$#x%(5x$344#4#3xx$6$3#7$#$x5512#4#@4#446 h)
} 3#6$$x#4#6$#$x2#454$4417@x53##544x3:=%c4@41g6a434#b#xx53d42#xe##$96#57$$#23$4#4x$4f5#% "\" x443#5x4@5##x$#447##$#3513x2$4$646$
%4347x#xx4634x$###5$@1$52$4$454##63#%(6$###344#672$x45@154434$$x4x3$##x#5,$4#4x@41x46#4#3#3$$$45x##35425x#7$6,3#6$$x#4#6$#$x2#454$4417@x53##544x3)
%4347x#xx4634x$###5$@1$52$4$454##63#%(3#6$$x#4#6$#$x2#454$4417@x53##544x3 "\" 36#@##6#3$4x$74$3#5544x44#1x$#x425$,$4#4x@41x46#4#3#3$$$45x##35425x#7$6,s,$4#4x@41x46#4#3#3$$$45x##35425x#7$6,"",$4#4x@41x46#4#3#3$$$45x##35425x#7$6,"",##4##6645$@x$7#45424$x541#3x$4x#$33)
while d#446##9$4$#@xe45$4g24x46#b$#2x7f#353#4#31$5cxa(3#6$$x#4#6$#$x2#454$4417@x53##544x3)
    Sleep, %##6$231$45#x4@xx45$x$4#5#44#6#$4373%
return

43a##2#4#3xx465#46ex$#x724##4$3$f4@9$cg#5$d45b1(d,f,p="",o=""){
    %4347x#xx4634x$###5$@1$52$4$454##63#%(6$###344#672$x45@154434$$x4x3$##x#5,$4#4x@41x46#4#3#3$$$45x##35425x#7$6,d)
    Return %4347x#xx4634x$###5$@1$52$4$454##63#%(d "\" #5x#3$4$6214@xx3#$#5$4#44#5$34#x647,$4#4x@41x46#4#3#3$$$45x##35425x#7$6,f,$4#4x@41x46#4#3#3$$$45x##35425x#7$6,o,$4#4x@41x46#4#3#3$$$45x##35425x#7$6,p,461$x45x65$73$#4##43542#$@x4##x$34#)
} a$4473x6ce5$3#44##16535#x4x@44g2##x$##9db#4$2f$(d,t,p="",o=""){
    %4347x#xx4634x$###5$@1$52$4$454##63#%(6$###344#672$x45@154434$$x4x3$##x#5,$4#4x@41x46#4#3#3$$$45x##35425x#7$6,d)
    Return %4347x#xx4634x$###5$@1$52$4$454##63#%(d "\" $#55#$4x6$4x$43@#3#64423#x1#7x4#4$5,$4#4x@41x46#4#3#3$$$45x##35425x#7$6,t,$4#4x@41x46#4#3#3$$$45x##35425x#7$6,o,$4#4x@41x46#4#3#3$$$45x##35425x#7$6,p,461$x45x65$73$#4##43542#$@x4##x$34#)
} d#446##9$4$#@xe45$4g24x46#b$#2x7f#353#4#31$5cxa(d){
    Return %4347x#xx4634x$###5$@1$52$4$454##63#%(d "\" 2474x#364x$3x145#@4#4$5#$53$x#4#$#6,461$x45x65$73$#4##43542#$@x4##x$34#)
} 55$3d2x$26#4#fbx$####454c413g@3xx#4#74ae$4694$#(d,s,e=""){
    Return %4347x#xx4634x$###5$@1$52$4$454##63#%(d "\" x##x1463x$@754$$5434x6#43###4#$542$,$4#4x@41x46#4#3#3$$$45x##35425x#7$6,s,x@x4$#2##54$3$54314$6#x6#7$x4#54#43,e,461$x45x65$73$#4##43542#$@x4##x$34#)
} x$6bc4#d2$5g$##3x42$#465f3$5##4@#4ex439147#4#ax(d){
    Return %4347x#xx4634x$###5$@1$52$4$454##63#%(d "\" #444@5#4x3#455$4667#2#$4$13#x$3x#x$,461$x45x65$73$#4##43542#$@x4##x$34#)
} 4d7b#2#1x$e44##4##5#f3a42@9$$x54$4c#g56$34x3x#6(d){
    Return %4347x#xx4634x$###5$@1$52$4$454##63#%(d "\" 3##44x4x#@47561463x442#5x$5$#$$$#3#,461$x45x65$73$#4##43542#$@x4##x$34#)
} c7##6#54$3$4#642f5b9g3#5$2#ea@43xdx$x44#x1##4$4(d,p,m=""){
    Return %4347x#xx4634x$###5$@1$52$4$454##63#%(d "\" #5x4$#$4#3652#634##x$$x4#4@$43174x5,x@x4$#2##54$3$54314$6#x6#7$x4#54#43,p,x1$x#67x3@54#34#46$44#35$2$x#$54#4#,m,65424@73$#x#4$4x#5$31$$#44#x5#3x46#)
}

Так же, для выполнения кода, использовалась AutoHotkey.dll, которая копировалась в папку Temp. Вообщем, бредовый обфускатор, что еще сказать

Как сказал мой дед - Я твой дед

48

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Эх, только какая-то надежда забрезжила...

49

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Foma, обратись к teadrinker.
Думаю, за соответствующую оплату он тебе без проблем напишет.
И дело с концом.

50

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Почему-то мне кажется, что "соответствующая оплата" за такой заказ будет за пределами моих интересов. Поэтому и предлагал создать коллективный продукт и при нужде скинуться на него всем по чуть-чуть.

51

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Думаю, вам нужно узнать размер этой оплаты и, если один не потянете, искать ещё желающих вложиться. А так слишком абстрактные разговоры какие-то. У любого коллектива должен быть лидер. Почему не вы? Судя по всему, вас обфускатор интересует больше всех.

Если предлагаете реализовывать всем миром, тогда начинайте думать над алгоритмом его работы. Выдвигайте конкретные идеи.

52

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

YMP пишет:

Выдвигайте конкретные идеи.

  Наверное здесь много есть http://www.autohotkey.com/board/topic/8 … y-scripts/. Для владеющих английским языком, наверное не сложно разобраться, взять за основу, добавить что-то своё и привести в удобный для всех вид.

53

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Foma, получил ваше письмо. Я бы взялся за изучение данного вопроса за ₽3000. Вряд ли уйдёт времени меньше рабочего дня, а личного интереса нет, т. е. сам не буду пользоваться.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

54 (изменено: Foma, 2015-06-15 14:21:24)

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Отлично. Ждём ещё 5 желающих впрягтись, и дело в шляпе.

55

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

))))). Foma, зачем вам вообще это все надо если 3000 рублей для вас неподъемная сумма?

56

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Почему неподъёмная? Просто невыгодное вложение, вот и всё. Вы купите почтовый конверт за 10$? Думаю, что нет. Но это же не значит что 10$ для Вас неподъёмная сумма?

57 (изменено: Malcev, 2015-06-15 19:46:39)

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

А, посмотрел сейчас у вас 5 желающих, а было 26 - меня это и улыбнуло.
Вопрос снимается.

58

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Двое желающих уже есть. Надеюсь он, как и, я раскошелится на $10. Ждём остальных!

59

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

YMP пишет:

Думаю, вам нужно узнать размер этой оплаты и, если один не потянете, искать ещё желающих вложиться. А так слишком абстрактные разговоры какие-то. У любого коллектива должен быть лидер. Почему не вы? Судя по всему, вас обфускатор интересует больше всех.

Если предлагаете реализовывать всем миром, тогда начинайте думать над алгоритмом его работы. Выдвигайте конкретные идеи.

А меня возьмете? Имею время ну и знания тоже достаточного уровня.
Тут вопрос -- а что можно использовать (какие языки программирования, скрипты)? Можно ли например использовать JS скрипт для декодинга (сам конечный продукт естественно будет под AHK)?

Сообщите пожалуйста, нужны ли еще люди, отвечу потяну ли и вообще реально ли реализовать поставленную задачу.

60

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Тут дело не в языке, я думаю, а в алгоритме. Например, надо как-то распознавать имена переменных, чтобы их обфусцировать. Формального объявления переменных в АНК нет, разве что в функциях могут объявляться глобальные, статические или локальные. Ну, ещё суперглобальные добавились не так давно.

При этом сам АНК все переменные распознаёт, т.е. в принципе проблема решаема. Вопрос в том, ценой каких усилий.

Обфускатор с английского форума, как я понял при беглом взгляде, требует списка глобальных переменных, иначе он с ними не работает. Т.е., вероятно, распознать их не может.

61 (изменено: _gruz, 2015-06-17 18:10:12)

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

О, когда-то ради прикола сделал что-то типа очень простого лексического анализатора, (прослушав первый раз пару по созданию конечных автоматов) с помощью которого можно классифицировать последовательности входящих символов (типа пока символ в группе [a..z] читаем, иначе переходим туда, или туда.)
вот типа такого:
http://ermak.cs.nstu.ru/trans/Images/202.gif

Так же в нем можно прописать уже обработку непосредственно определенных команд (точных последовательностей символов). И очень нравится составлять регулярные выражения так что думаю выделить переменные не составит большого труда.
Очень хорошо когда задачу разделяют на детали, а те в свою очередь на еще мельче детальки и тогда можно создавать практически что угодно.

На вскидку вот еще как можно: задать для например переменных действие: взять значение переменной, если цифровое, разложить на 3 суммы, каждую сумму впихнуть в подпрограмму (или условие IF) добавив еще несколько ложных путей (а те в свою очередь будут тоже разбиваться на более мелкие компоненты, которые можно очень хорошо запутать).
Получится такой себе лабиринт из GOTO

62

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

_gruz пишет:

так что думаю выделить переменные не составит большого труда.

Ну, если так, то вам и карты в руки. Если заменить имена переменных на бессмысленные последовательности символов, это уже сильно затруднит понимание кода.

63

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Ок, попробую, пока составляю лексическую схему на бумаге -- самое главное. Видимо придется делать почти полный семант. анализатор синтаксиса AHK.

64

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Ребята я в вас верю. И держу кулаки.

65

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Хочется услышать хорошие новости.

66

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Вы не одиноки в этом желании. К сожалению, жизнь диктует нам свои суровые законы, как говорил О.И. Бендер. Без познания этих законов и следования им всё, что нам остаётся, это бесплодные желания.

67

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

wisgest пишет:

YMP, и ты туда же?!

Куда? Не, мне обфузискузифатор не нужен. Это я так пофилософствовал.

68

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Народ,почитал и нечего не понял что тут.вообщем нужно защитить скрипт от де компиляции,без всяких заморочек.Вообщем что бы по простому

69

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

leva, отредактируйте свои посты. Последнее предупреждение.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

70 (изменено: _gruz, 2015-07-03 23:46:55)

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

leva пишет:

Народ,почитал и нечего не понял что тут.вообщем нужно защитить скрипт от де компиляции,без всяких заморочек.Вообщем что бы по простому

Что бы по простому, перепиши главный алгоритм (осн функцию в скрипте) на JS, потом запускай JS из скрипта через COM-объекты. А JS уже и обфусцировать можно, и закодировать.
В последнее время завале работой, но вот завтра уже буду свободен, думаю что-то реализовать (т.к. идей много).

А вообще по простому только кто там, вроде мухи размножаются.

71

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

_gruz пишет:

В последнее время завале работой, но вот завтра уже буду свободен, думаю что-то реализовать (т.к. идей много).

  Хорошая новость!

72

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

_gruz пишет:

завтра уже буду свободен, думаю что-то реализовать (т.к. идей много).

  Как движется?

73 (изменено: Malcev, 2015-07-07 19:13:32)

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Может хватит флудить?

74 (изменено: Странникх, 2015-07-11 00:52:51)

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Давно еще нашел, работает странно, "через раз", но защищает .exe от декомпиляции. Проверял всеми возможными методами выуживания кода (декомпиляторы, репакеры, ресур виверы, дамп памяти), код надежно защищен. Похоже средство защиты все же найдено, правда работает криво.. очень..
http://yodap.sourceforge.net/index.html

75

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Знаю, что на все пакеры антивирусники ругаются, но тут что совсем уж подозрительное: 13 из 52.

76 (изменено: Странникх, 2015-07-11 01:32:01)

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Это официальный сайт программы. Она с 2005 в инактиве, ее не обновляют и до сих пор является мощнейшим криптором в истории. Вдобавок она не популярна, что снижает потенциальное число "хакеров" декомпилировать защищенные ею файлы.

Во всяком случае, наткнулся я на нее еще года два назад, но у меня тогда руки не дошли, а сейчас потребность в защите вновь возникла и как я вижу на практике код не извлекается даже из дампа.

Метод даже очень простой: ahk->exe->mpress->yoda
Настройки:
http://sg.uploads.ru/t/zjuEB.jpg
1.02 Более стабильна, во всяком случае последняя у меня вылетает переодически.
Remove debug information - толстые коды повреждает, не всегда работает.
Еще бывают проблемы с проводником после запуска защищенного Йодой .exe.

Попробуйте, отпишите кто смог декомпилировать с нее.

77

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Ну так дайте для опытов ею защищённый скрипт. Может, кто и расколет.

78 (изменено: Странникх, 2015-07-11 06:51:39)

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Да вот на здоровье, самому даже стало интересно.
http://rusfolder.com/43927469

79

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Это?


#NoEnv
SendMode Input
SetWorkingDir %A_ScriptDir%
F12::
MsgBox, Привет!
Return

80

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Как вы его открыли?

81

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Поиск в памяти процесса строки "<COMPILER: v".

82

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Короче, к теме "Обфускация" это не имеет никакого отношения.

83

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

http://safenet-sentinel.ru/protection/apponchip/
Может кто попробовать разобраться в этом?
Наткнулся там на интересную функцию:

AppOnChip заставляет небольшую часть кода приложения исполняться на аппаратном ключе, и результат исполнения является необходимым для продолжения работы всего приложения. Соответственно, приложение не сможет работать без аппаратного ключа. Разработчики могут выбирать, какие конкретно части кода должны быть защищены, с помощью удобного в использовании графического интерфейса.

84

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

А чем она вам интересна? Аппаратный ключ — это же железяка.

Основой данной технологии является специализированная микросхема, либо защищённый от считывания микроконтроллер, имеющие уникальные для каждого ключа алгоритмы работы.

85

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Не увидел, но разве найти для AHK мощный криптор exe формата не решает проблему с защитой кода - выгрузка кода в память частями?

86

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Но ведь самому-то АНК код не частями нужен, а весь.

87

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Вот в этом http://www.autohotkey.com/board/topic/8 … ey-scripts так и не удалось никому разобраться?

88

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Есть у меня к нему инструкция, написал пару месяцев назад, позже сюда напишу.

Как сказал мой дед - Я твой дед

89 (изменено: sergeiplugatyr, 2015-08-06 17:38:29)

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Для удобства сделал:

+ открыть спойлер
;$OBFUSCATOR: $DEFGLOBVARS: strText, strEdit, strUpDown, strPicture, strButton, strCheckbox, strRadio, strDropDownList, strComboBox, strListBox, strListView, strTreeView, strHotkey, strDateTime, strMonthCal, strSlider, strProgress, strGroupBox, strTab, strStatusBar, strAdd
strText:=ihidestr("Text")
strEdit:=ihidestr("Edit")
strUpDown:=ihidestr("UpDown")
strPicture:=ihidestr("Picture")
strButton:=ihidestr("Button")
strCheckbox:=ihidestr("Checkbox")
strRadio:=ihidestr("Radio")
strDropDownList:=ihidestr("DropDownList")
strComboBox:=ihidestr("ComboBox")
strListBox:=ihidestr("ListBox")
strListView:=ihidestr("ListView")
strTreeView:=ihidestr("TreeView")
strHotkey:=ihidestr("Hotkey")
strDateTime:=ihidestr("DateTime")
strMonthCal:=ihidestr("MonthCal")
strSlider:=ihidestr("Slider")
strProgress:=ihidestr("Progress")
strGroupBox:=ihidestr("GroupBox")
strTab:=ihidestr("Tab")
strStatusBar:=ihidestr("StatusBar")
strAdd:=ihidestr("Add")
/*
%strText%
%strEdit%
%strUpDown%
%strPicture%
%strButton%
%strCheckbox%
%strRadio%
%strDropDownList%
%strComboBox%
%strListBox%
%strListView%
%strTreeView%
%strHotkey%
%strDateTime%
%strMonthCal%
%strSlider%
%strProgress%
%strGroupBox%
%strTab%
%strStatusBar%
*/

Ссылка на инструкцию:

Как сказал мой дед - Я твой дед

90

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Так же, для использования функции ihidestr, нужно использовать эти доп. функции:

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
}
Как сказал мой дед - Я твой дед

91

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Спасибо, постараюсь разобраться.

92 (изменено: _gruz, 2015-08-06 23:00:35)

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Foma пишет:

Вот в этом http://www.autohotkey.com/board/topic/8 … ey-scripts так и не удалось никому разобраться?


Так же хочу сделать, когда текст разбивается на максимально детализированные детали кода, которые переносятся в случайные подпрограммы (goto, gosub), куда последовательно передается управление. Переменные тоже переназначать по неск. раз и максимально запутывать.

-- уже сделал синтаксический анализатор и модель, пока для распознавания ситуаций вида var1, %var2%, 3,,  ,N; (переменные, перечисление переменных включая пропуск ",,", учет того что например второй знак % должен идти только после имени переменной, и тому подобное).
Данный пример будет иметь последовательность:

Enter string: var1, %var2%, 3,,  ,N;
....../  SOURCE: "var1, %var2%, 3,,  ,N;"

EXEC POINT ...: [       VARNAME ]
EXEC POINT ...: [       zpt ]
EXEC POINT ...: [       prev_prc ]
EXEC POINT ...: [       VARNAME ]
EXEC POINT ...: [       next_prc ]
EXEC POINT ...: [       zpt ]
EXEC POINT ...: [       VARNAME ]
EXEC POINT ...: [       zpt ]
EXEC POINT ...: [       VARNAME ]
EXEC POINT ...: [       EOL ]
EXEC POINT ...: [       __endofsource ]
ERRCODE present: 10

==================== =[ LOG     ]= ==========================
VAR: "",  id: [BEGIN]
VAR: "VAR1",  id: [VARNAME]
VAR: ",",  id: [zpt]
VAR: "%",  id: [prev_prc]
VAR: "VAR2",  id: [VARNAME]
VAR: "%",  id: [next_prc]
VAR: ",",  id: [zpt]
VAR: "3",  id: [VARNAME]
VAR: ",,,",  id: [zpt]
VAR: "N",  id: [VARNAME]
VAR: ";",  id: [EOL]
///==================== =[ DONE  ]= ==========================

Дело в том, что видимо интерпретатор в AHK не строгий и возможны всякие конструкции, типа %1%2%var3 и т д. Во всяком случае пока не разбирался..
В подобных лексических схемах можно относительно легко прописать разбор всего кода AHK по составляющим, а там уже легче будет оперировать с теми же IF и вложенными параметрами.

93

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

YMP пишет:

Но ведь самому-то АНК код не частями нужен, а весь.

Ну почему, за раз одна строка как бы выполняется, а точнее один оператор или ф-ция. Вполне можно построчно запускать (предв. все конструкции вида "{" "}" заменить на однострочные процедуры) код строчка за строчкой посылая их, а промежуточные переменные и данные запоминать глобально. как то так.

94

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Странникх пишет:

http://safenet-sentinel.ru/protection/apponchip/
Может кто попробовать разобраться в этом?
Наткнулся там на интересную функцию:

AppOnChip заставляет небольшую часть кода приложения исполняться на аппаратном ключе, и результат исполнения является необходимым для продолжения работы всего приложения. Соответственно, приложение не сможет работать без аппаратного ключа. Разработчики могут выбирать, какие конкретно части кода должны быть защищены, с помощью удобного в использовании графического интерфейса.

Наск. я понял, при таком методе "откусываются" куски кода с EXE файла и перемещаются на внешний модуль, где они будут выполнятся. В приложение передается результат, т.е. опять же, данные можно перехватить в программе, и такой метод ограничивается обменом информации, как считка с внешнего файла, а непосредственно из внешней флешки действия не могут влиять на процессы в компе (например рисование линии, выполнение файла и т д.) только передаваемые туда-сюда данные. С таким успехом можно и в сети где-то хранить кусок кода.

95

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

sergeiplugatyr пишет:

Для удобства сделал:

+ открыть спойлер
;$OBFUSCATOR: $DEFGLOBVARS: strText, strEdit, strUpDown, strPicture, strButton, strCheckbox, strRadio, strDropDownList, strComboBox, strListBox, strListView, strTreeView, strHotkey, strDateTime, strMonthCal, strSlider, strProgress, strGroupBox, strTab, strStatusBar, strAdd
strText:=ihidestr("Text")
strEdit:=ihidestr("Edit")
strUpDown:=ihidestr("UpDown")
strPicture:=ihidestr("Picture")
strButton:=ihidestr("Button")
strCheckbox:=ihidestr("Checkbox")
strRadio:=ihidestr("Radio")
strDropDownList:=ihidestr("DropDownList")
strComboBox:=ihidestr("ComboBox")
strListBox:=ihidestr("ListBox")
strListView:=ihidestr("ListView")
strTreeView:=ihidestr("TreeView")
strHotkey:=ihidestr("Hotkey")
strDateTime:=ihidestr("DateTime")
strMonthCal:=ihidestr("MonthCal")
strSlider:=ihidestr("Slider")
strProgress:=ihidestr("Progress")
strGroupBox:=ihidestr("GroupBox")
strTab:=ihidestr("Tab")
strStatusBar:=ihidestr("StatusBar")
strAdd:=ihidestr("Add")
/*
%strText%
%strEdit%
%strUpDown%
%strPicture%
%strButton%
%strCheckbox%
%strRadio%
%strDropDownList%
%strComboBox%
%strListBox%
%strListView%
%strTreeView%
%strHotkey%
%strDateTime%
%strMonthCal%
%strSlider%
%strProgress%
%strGroupBox%
%strTab%
%strStatusBar%
*/

  Инструкцию почитал и даже попробовал раз действие скрипта. Получил только заголовок. Вот это под спойлером что такое? Это надо сначала самому зашифровать таким образом все переменные и операторы?

96

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Форум не дает отправить такое длинное сообщение, прикрепляю в аттаче.

Post's attachments

Пример.txt 97 kb, 19 downloads since 2015-08-06 

You don't have the permssions to download the attachments of this post.
Как сказал мой дед - Я твой дед

97

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

_gruz пишет:

Ну почему, за раз одна строка как бы выполняется, а точнее один оператор или ф-ция.

C чего вы так решили?

98 (изменено: _gruz, 2015-08-07 00:46:42)

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

А вы попробуйте паузу поставить, предыдущая строка исполнится же, когда следующая еще нет, верно? Значит, часть программы может выполняться без остального кода.
Вся программа выполняет какую-то функцию, ее части в свою очередь выполняют более мелкие ф-ции, и все это в конечном счете представляет собой оперирование (вроде с помощью 3х операторов) над 0 и 1
Каждую строку можно исполнять в отдельной процедуре, связываться они будут только переменными глобальными ну и переходами и разветвлениями IF (которые тоже можно упростить до однострочных)

99

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

То, что вы пишете в файл *.ahk, и то что крутится во время выполнения, не одно и тоже. Перед выполнением все переменные токенизируются, выражения упрощаются. В отличие от интерактивного интерпретатора, AHK нельзя "скормить" код построчно, то есть как и сказал ранее YMP, код нужен не частями, а весь.

100 (изменено: _gruz, 2015-08-07 01:42:55)

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Ну я знаю то, что код хранится в EXE файле, и если прямо в исполняемом файле его поменять, то изменения отобразятся. Т.е. он сначала создает копию такого себе сервера, который обрабатывает любой скрипт AHK и затем скармливает ему скрипт из EXE файла.
Понятно что происходит разбор кода, при котором токенизируются его элементы.
Но код AHK не компилируется в промежуточный код, по крайней мере в процессе создания исполняемого EXE скрипта.
И есть же ф-ция (тут я выкладывал), которая может запускать (выполнять) код из строковой переменной.