Не вижу никаких проблем с реализацией этого на стороне пользователя - после декрипта вызвать соответствующую функцию, возвращающую длину строки.Да и еще было бы хорошо, если в будущем функция VMProtectDecryptStringX будет еще и возвращать длину раскриптованой строки.
Как защитить значения глобальных констант?
Re: Как защитить значения глобальных констант?
Re: Как защитить значения глобальных констант?
Так оно сейчас и работает, но вдруг декриптованная строчка будет без завершающего нуля??? что тогда - exception ?Не вижу никаких проблем с реализацией этого на стороне пользователя
Re: Как защитить значения глобальных констант?
VMProtectDecryptStringX на входе "ждет" строчку с завершающим нулем, соответственно после декрипта он там тоже будет.Так оно сейчас и работает, но вдруг декриптованная строчка будет без завершающего нуля???
Re: Как защитить значения глобальных констант?
Функция ожидает константную строчку в момен компиляции и завершающий ноль будет в любом случае, а вот во время дикриптации - я за ноль уже не уверен!VMProtectDecryptStringX на входе "ждет" строчку с завершающим нулем, соответственно после декрипта он там тоже будет.
+ если я буду "ДОСТОВЕРНО" знать длину строки которую вернула эта функция - я смог бы заполнить ее рандомным мусором. Делать предположение на то, что там будет ноль крайне не желательно.
Re: Как защитить значения глобальных констант?
В момент декриптации происходит декриптация ВСЕЙ строки, включая завершающий ноль - иначе ваша программа перестанет нормально работать.Функция ожидает константную строчку в момен компиляции и завершающий ноль будет в любом случае, а вот во время дикриптации - я за ноль уже не уверен!
Зачем вы собрались заполнять строку рандомным мусором? Если только для того чтобы после использования убрать из памяти её декриптованный вариант, то вы столкнетесь сразу с несколькими проблемами:+ если я буду "ДОСТОВЕРНО" знать длину строки которую вернула эта функция - я смог бы заполнить ее рандомным мусором. Делать предположение на то, что там будет ноль крайне не желательно.
1. При заполении памяти мусором при последующем вызове VMProtectDecryptStringX с той же самой строкой вы получите свой мусор, т.к. декрипт строки происходит только при первом вызове VMProtectDecryptStringX и указатель на память пишется в "глобальную" переменную, которая будет выступать результатом при повторном VMProtectDecryptStringX.
2. В режиме отладки (до компиляции в VMProtect) вы гарантировано получите Access Violation при записи по указателю, т.к. VMProtectDecryptStringX вернет вам тотже самый указатель, который вы передали в качестве параметра (строки). А все константные вещи компилер складывает в секцию без флага WRITABLE.
Re: Как защитить значения глобальных констант?
Да я же не против, что ваш алгоритм гарантирует криптацию с завершающим нулем, но согласитесь, строка которую вернула функция - уже не константа которая была в момент компиляции!В момент декриптации происходит декриптация ВСЕЙ строки, включая завершающий ноль - иначе ваша программа перестанет нормально работать.
1. При заполении памяти мусором при последующем вызове VMProtectDecryptStringX с той же самой строкой вы получите свой мусор, т.к. декрипт строки происходит только при первом вызове VMProtectDecryptStringX и указатель на память пишется в "глобальную" переменную, которая будет выступать результатом при повторном VMProtectDecryptStringX.
По большому счету VMProtectDecryptStringX нужен чтобы скрыть строку в бинарнике от чужих глаз. Я получу строчку, произведу с ней нужные манипуляции, и с точки зрения безопасности (по крайней мере до тех пор пока нет функции гарантированого уничтожения этой строки - аналог Free) я хотел бы избавится от нее, иначе смысл ее прятать - так как вплоть до момента завершения программу в адрессном пространстве процесса будет гулять открытый указатель на нее.
Это вообще не проблемма2. В режиме отладки (до компиляции в VMProtect) вы гарантировано получите Access Violation при записи по указателю, т.к. VMProtectDecryptStringX вернет вам тотже самый указатель, который вы передали в качестве параметра (строки). А все константные вещи компилер складывает в секцию без флага WRITABLE.
Re: Как защитить значения глобальных констант?
Совершенно непонятно почему вы думаете, что функция возвращает совсем не то что было на момент компиляции ) Согласитесь, что если бы она возвращала не то (в том числе и без завершающего нуля), то ваша программа работала бы неправильно после компиляции в VMProtect.но согласитесь, строка которую вернула функция - уже не константа которая была в момент компиляции!
Если у вас нет возможности подождать реализацию VMProtectFreeString, то я бы предложил вам более простой вариант (но правда не очень удобный) с созданием строки на стеке:По большому счету VMProtectDecryptStringX нужен чтобы скрыть строку в бинарнике от чужих глаз. Я получу строчку, произведу с ней нужные манипуляции, и с точки зрения безопасности (по крайней мере до тех пор пока нет функции гарантированого уничтожения этой строки - аналог Free) я хотел бы избавится от нее, иначе смысл ее прятать - так как вплоть до момента завершения программу в адрессном пространстве процесса будет гулять открытый указатель на нее.
Code: Select all
var S: array [0..9] of Byte;
...
S[0]:='A';
S[1]:='b';
S[2]:='c';
...
S[9]:=#0;
Re: Как защитить значения глобальных констант?
Еще одна трабла со стингами. При использовании типа протекта для стрингов: мутация - VMProtectDecryptStringA падает с завидной регулярностью. Бинарник не перекомпиливаю, а только перепротекчиваю... в 9 из 10 случаем - эксепшен! При использовании протекта в режиме: виртуаллизация 10 из 10 - все ок.
Прошу как то обратить на это внимание, т.к использовать виртуализацию вообще в проекте не хочется.
Прошу как то обратить на это внимание, т.к использовать виртуализацию вообще в проекте не хочется.
Re: Как защитить значения глобальных констант?
Присылайте тестовый проект - будем разбираться.Еще одна трабла со стингами. При использовании типа протекта для стрингов: мутация - VMProtectDecryptStringA падает с завидной регулярностью. Бинарник не перекомпиливаю, а только перепротекчиваю... в 9 из 10 случаем - эксепшен!
Re: Как защитить значения глобальных констант?
На данном этапе выслать рабочий проект не могу, если воспроизведу на тестовом - то обязательно пришлю. Проблемму со стрингами решим своими силами, а с не парными маркерами поиграемся с настройками компиляции. Спасибо.Присылайте тестовый проект - будем разбираться.