Re: AHK: Проверка защиты скрипта.
Ок а сам код интерпретатора виден?
Не в dll а в ехе.
Win10x64 AhkSpy, Hotkey, ClockGui
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Ок а сам код интерпретатора виден?
Не в dll а в ехе.
Не понял вопроса. Код интерпретатора написан на c++ и скомпилирован.
Я к тому что если есть исходники AutoHotkey_L и его можно собрать, то насколько сложно поместить код AutoHotkey (например в виде base64) в переменную в самом интерпретаторе, и переучить его брать код не из файла, а из переменной?
написан на c++ и скомпилирован.
И насколько по твоему защищены программы c++ от раскрытия исходников?
Так код скрипта же в любом случае текстом написан, даже если он будет браться из какого-то другого места, всё равно в памяти окажется.
Не знаю, насколько защищены, я тут не спец.
Так код скрипта же в любом случае текстом написан, даже если он будет браться из какого-то другого места, всё равно в памяти окажется.
То есть значения всех переменных в программах на c++ можно выудить простым просмотром дампа памяти?
Не знаю, как на c++, но код скрипта не на c++ написан. Чтобы интерпретатор смог с ним работать, он должен быть явным образом помещён в память.
он должен быть явным образом помещён в память.
Как понять "явным образом"? Переменные самого интерпретатора разве не явным образом в ней находятся?
Явным образом — в смысле в виде простого незашифрованного текста в кодировке UTF-16. И нет никакой разницы, где и как код был спрятан до этого. Что там с переменными интерпретатора, я не в курсе.
Кто то из нас кого то не понимает. Я говорю про то что если код уже будет в переменной интерпретатора в виде текста перед сборкой в VS.
Если код будет в каком-то другом формате, обычный интерпретатор не сможет с ним работать. Придётся его полностью переписывать, учитывая все нюансы.
переучить его брать код не из файла, а из переменной?
Придётся его полностью переписывать
Вот теперь всё на месте. Это мне и интересно, если его переписать таким образом, то это будет значить что в дампе не будет кода анк ни в каком виде и ни в какой момент.
Я понимаю что тут нет спецов по С++, потому интересует чисто субъективное мнение.
То, что ты предлагаешь — это по сути переделать интерпретируемый язык в компилируемый. Предполагаю, чтобы настолько поменять интерпретатор, потребуется очень много работы.
Думаю прежде чем думать про объём работы, надо определится с жизнеспособностью концепции.
переделать интерпретируемый язык в компилируемый
Почему? Он также будет перебирать строки исходника, просто сразу из своей переменной а не из ресурса, и интерпретировать их.
Вот пароль в Н и Basic, он что шифрует, исходник в ресурсе?
Если это так:
то ты писал что в какой то момент расшифрованный исходник всплывает в памяти.
Но ведь в расшифрованном виде он появляется только в памяти интерпретатора в переменной какой то из его функций.
Поэтому я и спрашивал про переменные С++, значит и другие тоже видны.
Он также будет перебирать строки исходника, просто сразу из своей переменной а не из ресурса, и интерпретировать их.
Ну тогда без разницы, откуда будет браться код, из ресурса, или он будет захардкоден в исполняемый файл, от этого ничего не поменяется. В любом случае интерпретатор умеет работать с кодом только в виде текста в памяти.
То есть не будет разницы между таким вариантом сделанным из AutoHotkey_L, и AutoHotkey_H с паролем?
А какая разница? Пароль только ресурс с кодом шифрует.
Защита от отладчика в них одинаковая?
Я так понимаю, что да — никакой нет.
YMP в 4 и 6 писал про отладчик, думаешь он про обе версии имел в виду?
Ну, не знаю, я делал дампы памяти обычного AHK и AHK_H, разницы не заметил, код скрипта виден и там, и там.
А как дампы делаешь, код ведь только при запуске видно?
Просто запускал и делал из диспетчера задач.
То есть и в AHK_H с кастомным паролем исходник висит до закрытия процесса.
Думаю, от пароля это никак не зависит. Но как долго код существует в памяти, я не тестировал.
А .DMP чем смотришь, просто в любом НЕХ редакторе?
Да, без разницы.
А как ты исходник видишь, разве он в полном объёме одной строкой так сказать?
Так открой, и увидишь. Я пользовался поиском по содержанию текстовой переменной.
Попробую.
В виде колонок, я не сообразил как из этого код собрать, все пробельные символы выводятся как точки
А ты можешь какой нибудь AHK_H с кастомным паролем прислать?
я не сообразил как из этого код собрать
Собирать надо не из текста, а из соответствующих байтов.
А ты можешь какой нибудь AHK_H с кастомным паролем прислать?
Имеешь в виду скрипт, или интерпретатор?
Скрипт конечно, интерпретатор ты не дашь. )
Собирать надо не из текста, а из соответствующих байтов.
Имеешь в виду посмотреть по какому адресу начало и конец текста, и с помощью StrGet получить из файла дампа?
Напиши скрипт, я тебе скомпилирую.
с помощью StrGet получить из файла дампа?
Ну, типа того. Хотя я не уверен, что код будет полностью в исходном виде, тем не менее, можно посмотреть все значения переменных в коде, иногда этого достаточно для взлома.
InputBox, Input
If Input = 1234
MsgBox Yes
Else
MsgBox No
Попозже немного, сейчас как раз новую версию AHK_H скачал, перекомпилирую.
Защита от отладчика в них одинаковая?
Я так понимаю, что да — никакой нет.
AHK_H у меня с отладчиком не запускается, AHK_L без проблем.
Ну, может там и есть что-то такое, только толку-то, если код в памяти всё равно виден.
Так ты же говоришь что не весь. Но я пока не могу найти, ты как ищешь? В AHK_L он целиком.
Задай в коде какую-нибудь уникальную переменную, например myText := "duwnhdfyermvohdbfjr", и ищи по юникод-тексту duwnhdfyermvohdbfjr.
А ты можешь какой нибудь AHK_H с кастомным паролем прислать?
InputBox, Input If Input = 1234 MsgBox Yes Else MsgBox No
В аттаче.
Спасибо.
Не знаю почему у меня не так, в IDA Pro 7.5 х32 или х64 от админа открываю дамп твоего ехе, ввожу в поиске текста MsgBox, ничего не находит. Пробовал на своём ехе со стандартным паролем с myText := "duwnhdfyermvohdbfjr" искать duwnhdfyermvohdbfjr, тоже ничего.
А скрипт (уже готовая программа) может делать проверку на запрос Диспетчера создать дамп-файл на эту программу? Если да, то можно резко заменить переменные или закрывать себя либо диспетчер, хотя сомневаюсь что поможет.
ввожу в поиске текста MsgBox, ничего не находит
Искал по строке 1234, вижу:
Последняя часть кода всё же отсутствует, нашёл её в другом месте. не могу никак прокомментировать.
Может, в последней версии что-то изменилось в лучшую сторону.
А ты в каком редакторе смотришь?
Hex Editor Neo
Ок, поставил Hex Editor Neo Ultimate Edition v6.44.01.6234 Portable Official, по 1234 475 совпадений, ты ручным перебором искал?
Да, на седьмое уже попало. Я и говорил, что лучше использовать какой-то уникальный текст.
У меня с какого то раза теперь находит в третьем совпадении, но вместо текста преимущественно ерунда. Может кодировку где поменять...
Я не менял, поменяй лучше строку для поиска.
В смысле искать следующие совпадения?
У тебя та же версия Hex Editor Neo?
Не-а, у меня более старая, я давно ставил.
В смысле искать следующие совпадения?
Заменить строку, которую ищешь в коде на более уникальную.
InputBox, Input
If Input = 17171717
MsgBox Yes
Else
MsgBox No
Находит в том же месте.
Не-а, у меня более старая, я давно ставил.
А какая именно, поставлю такую же?
6.25.00.5960, но не думаю, что от версии что-то зависит.
Я, кстати, на семёрке всё это пробовал, на десятке, может, дамп другой получается.
Здравствуйте! В новых версиях Ahk2Exe при компилировании убрали возможность ставить пароль?
peterverhovensky
Да.
teadrinker
А ты встречал декомпилятор AHK_H?
Потому что защиты не дает или по другой причине?
А ты встречал декомпилятор AHK_H?
Не-а, сейчас как раз делаю.
Я видел только что пароль используется BundleAhkScript в ZipRawMemory, но ведь там вроде шифрование AES?
Далее пароль передаётся в ProcessDirectives, и не используется в ней.
AES + Base64 + LiteZip.
Я пробовал использовать какие-то встроенные функции, но пока безуспешно, может, не понял пока чего-то.
AES + Base64 + LiteZip.
Это порядок дешифровки?
А что у тебя сейчас на выходе после дешифровки?
pw[i] = pwd == g_default_pwd ? (TCHAR) _T("A\000\000\000\000u\000\000\000\000t\000\000\000\000o\000\000\000\000H\000\000\000\000o\000\000\000\000t\000\000\000\000k\000\000\000\000e\000\000\000\000y\000\000\000\000")[i*5] : (TCHAR)*pwd[i];
i*5 непонятно, как будто оно каждый 5 символ берёт (A0000o00). Для AES ведь нужен пароль не меньше 16 байт.
teadrinker
Ты нашёл в компиляторе, где выполняется шифрование AES, такое ощущение что оно как то не явно выполняется в AutoHotkey.ехе.
Или ты уже сделал...
Для AES ведь нужен пароль не меньше 16 байт.
Там не сам пароль используется, а его хеш.
Ты нашёл в компиляторе, где выполняется шифрование AES
В смысле, в исходном коде, или что ты имеешь в виду?
Компилятор - ahk2exe.ahk.
не сам пароль используется, а его хеш.
Где, в ahk2exe.ahk?
Не важно где, просто для шифрования AES в AHK_H используется хеш пароля, как, впрочем, и в других случаях, с которыми я сталкивался. Код ahk2exe я не разбирал, я смотрел в util.cpp.
Я там не увидел где вместо пароля передаётся хеш пароля.
А как ты вышел сразу на util.cpp, оно же начинается всё в компиляторе, а ты даже его не разбирал. СИ-шником стал. )
На AHK форуме есть инструкция, как пароль менять на кастомный, оттуда вроде и вышел.
if (!(CryptHashData(phHash, (BYTE*)pw, (DWORD)_tcslen(pw) * sizeof(TCHAR), 0)))
На AHK форуме есть инструкция
Эта https://www.autohotkey.com/boards/viewt … mp;t=37786?
Трудный язык.
Значит из компилятора туда передаётся ресурс исходника на последней стадии шифрования, и обратно уже данные не возвращаются?
Чего гадать-то, вот и изучи данный вопрос, код у тебя есть.
Если бы все были такие учёные как ты, так и форум не нужен был.
Ты хоть надежду дай, у тебя получилось?
Не думаю, что там что-то может быть сложное.
В среднем всего 100$ просят.
https://www.freelancer.com.ru/projects/ … otkey-file
AES и Base64 расшифровал, с LiteZip разбираюсь. Вероятно, для этого есть какая-то из встроенных функций, но я пока не понял, буду dll использовать.
Malcev, я так понимаю, serzh82saratov имел в виду декомпиляцию, если известен пароль.
Собственно, зная исходный код, любой пароль, даже кастомный, скорее всего тоже можно выудить из памяти процесса.
с LiteZip разбираюсь. Вероятно, для этого есть какая-то из встроенных функций
Не UnZipRawMemory?
имел в виду декомпиляцию, если известен пароль.
Да.
В среднем всего 100$ просят.
Я там даты постов не увидел, и упоминание AHK_Н, может там про Basic. Да и для спеца Си с исходниками на руках, это как 2 пальца...
Собственно, зная исходный код, любой пароль, даже кастомный, скорее всего тоже можно выудить из памяти процесса.
Ты имеешь ввиду если пароль просто пропатчен.
Не UnZipRawMemory?
Оно расшифровывает, но не до конца, на выходе такое:
Это base64 построчно, но если это декодировать, текст не получается.
Ты имеешь ввиду если пароль просто пропатчен.
Не понял, что ты имеешь в виду. Без разницы, пропатчен, или нет, всё равно он всплывёт в памяти, когда ресурс будет расшифровываться.
но не до конца, на выходе такое:
Знакомый месадж, прям один в один, на нём я в своё время и остановился, хотя наверняка я шёл другим путём.
всплывёт в памяти
Где то что всплывёт. А как его найти в дампе, ты так говоришь, как будто знаешь заранее где.
Свой я, к сожалению, обнаружил поиском. Наверняка есть какие-то значения с указателями на него, но пока не искал.
Свой я, к сожалению, обнаружил поиском
В дампе или в ехе?
В дампе. В exe он тоже есть, как и дефолтный пароль, но мой считывается вразнобой, так что оттуда его не получить.
А дефолтный в дампе всегда на одном месте?
Угу.
А, он в дампе так же как и в ехе выглядит.
Ты хоть надежду дай, у тебя получилось?
Блин, вспомнил, мы уже тут когда-то это обсуждали. Скрипт дальше построчно также закодирован с тем же паролем.
В общем тебя можно поздравить.
А MPRESS или UPX как определяешь и снимаешь?
Пока с этим не разбирался.
Здравствуйте! В новых версиях Ahk2Exe при компилировании убрали возможность ставить пароль?
Да, в AutoHotkey_L исходный код не зашифровать. У программы AutoHotkey_L открытый исходный код. Наверное поэтому разработчики AutoHotkey_L не хотят, чтобы код скрипта можно было прятать.
Чтобы отправить ответ, вы должны войти или зарегистрироваться