Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Шифрование кода в проге 22.08.01 17:33
Автор: MadDevil Статус: Незарегистрированный пользователь
|
|
Я имею желание собственно вставить сабж в прогу(имеется там критичееская к отладке ф-ция). Так вот я делаю так:компилю прогу, вырезаю hiew ф-цию в файл, затем шифрую его RASом и вставляю в ресурсы. Ну так вот ессно она не работает т.к. тама имеються вызовы ф-ций. Так вот как бы это дело обделать т.к. вставлять ф-цию в ресурсы после компиляции в лом ибо они имеют уж очень уродский формат. Кто может сказать что-нить по этому поводу????? Уж очень хоццца
|
 |
Шифрование кода в проге 22.08.01 22:05
Автор: ggg <ggg> Статус: Elderman
|
#pagma code_seg
помещаешь функцию в отдельную секцию
после компиляции шифруешь секцию
при старте программы расшифровываешь её
p.s.
программа должна загружаться по своему дефолтному base address, иначе зашифрованная секция при загрузке будет изменена и расшифруется не так как нужно :)
|
 |  |
А где взять подробности 23.08.01 04:12
Автор: Улыбка Статус: Незарегистрированный пользователь
|
Это очень интересно
А где взять подробности, ПРИМЕРЫ и т.д.
|
 |  |  |
А где взять подробности 23.08.01 05:29
Автор: ggg <ggg> Статус: Elderman
|
> Это очень интересно > А где взять подробности, ПРИМЕРЫ и т.д.
коротко объяснить нельзя
всё-равно могут возникнуть глюки и прийдётся разбираться самому во всём
советую прочитать описание формата PE-файлов в MSDN - там всё понятно
а если коротко :
1) pragma описана в MSDN :)
<<<<<<<<<<<<
// sample.cpp
#pragma code_seg("crypt")
void f(void)
{
// ...
}
<<<<<<<<<<<<
2) положение секции в файле можно узнать с помощью dumpbin /headers yourfile.exe
dumpbin входит в состав MSVC
в том что выведет dumpbin находишь SECTION HEADER #... у которого поле name = crypt
здесь нужны два значения: virtual size; file pointer to raw data
вот этот кусок файла и нужно зашифровать
правда я не монимаю зачем использовать шифрование, всё равно пароль для расшифровки будет прописан в самом файле;
а во время работы программы секция будет расшифрована - дебагеру ничто не помешает её трасировать;
а для того чтобы помешать дизассемблировать функцию прямо в файле достаточно её просто закодировать простым алгоритмом
3) чтобы узнать положение секции в загруженном модуле наверно прийдётся всё-таки разобраться с заголовком PE-файла;
правда можно вставить эту информацию как константы, узнав их из dumpbin, но это криво по-моему (нужно дважду компилить прогу);
вобщем там нужны будут значения: a) virtual size, b) virtual address.
a - размер полезной информации
b - смещение относительно image base address (обычно 0x400000 - можно узнать через ::GetModuleHandle(NULL))
после того как секция расшифрована (a) байт её нужно поместить в память по соответствующему адресу;
естественно всё это надо делать до первого вызова функции :)
|
|
|