![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Адреса функций в памяти
FearG0 © (2007-09-27 04:53:00)Интересует вот какой момент:
Допустим есть процедура:
procedure TForm1.Button1Click(Sender: TObject);
begin
SubProc1;
beep;
ShowMessage('Период использования программы истёк!');
SubProc2;
end;
Если я возьму адреса @SubProc1 и @SubProc2 то в памяти между ними будет находится код
beep;
ShowMessage('Период использования программы истёк!');
?
FearG0 (2007-09-27 22:04:00) [41]Ну дайте мне алгоритм хотя бы.
oxffff (2007-09-27 22:00:00) [42]
> FearG0 © (27.09.07 21:33) [44]
>
> > 1. Как определить что участок кода в exe соответствует
> именно
> > моей процедуре в сорце. определяем адрес процедуры и длину
>
> > (можно просканить до первого ret)
>
> Можно алгоритм или кусок кода если не тяжело?
Даже, если выдрать этот кусок. Простовставить в другую программу не получится в подавляющем большинстве случаев.
Больше ничего не скажу. :)
P.S. Чтение мне не раз помогало. А вам?
FearG0 (2007-09-27 21:33:00) [43]
> 1. Как определить что участок кода в exe соответствует именно
> моей процедуре в сорце. определяем адрес процедуры и длину
> (можно просканить до первого ret)
Можно алгоритм или кусок кода если не тяжело?
vpbar (2007-09-27 20:45:00) [44]Но если кратко.
1. Как определить что участок кода в exe соответствует именно моей процедуре в сорце.
определяем адрес процедуры и длину (можно просканить до первого ret)
если адрес кода входит в этот диапазон - то это та процедура
2. Как патчить процедуру в памяти.
для начала ставим возможность записи для секции кода, запрещаем винде всякие ругательства типа DEP потом пишем по нужному адресу.
В делфе можно привести адрес к PChar и писать туда.
vpbar (2007-09-27 20:32:00) [45]>>FearG0 © (27.09.07 19:33) [41]
1. сроки поджимают
- купите готовое решение
2. Тонны мануалов никогда не заменят 1-2 примера
- 1-2 примера никогда не заменят теорию
3. Если кто сталкивался подскажите хороший источник где такая тема уже поднималась, обсуждалась и реализовывалась. В гугл посылать не надо, уже почитываю что там есть.
- я сталкивался. Источник посоветовал.
FearG0 (2007-09-27 19:33:00) [46]Читать теорию это все конечно хорошо и ознакомиться можно.
Но -
1. сроки поджимают
2. Тонны мануалов никогда не заменят 1-2 примера
3. Если кто сталкивался подскажите хороший источник где такая тема уже поднималась, обсуждалась и реализовывалась. В гугл посылать не надо, уже почитываю что там есть.
vpbar (2007-09-27 19:09:00) [47]
> FearG0 © (27.09.07 16:10) [15]
> 1. При наличие дебаггеров просо вываливаться программе
> 2. После получения кода с сервера запускать поток, который
> если прога уж очень долго выполняет этот критичный код будет
> ее вырубать
> 3. Внутри кода несколько блоков которые будут проверять
> целостность программы, путем подсчета CRC и в случае ее
> патча вываливаться
> 4. еще что-нить придумаю
Если ты это реализовал, то тогда непонятно в чем проблема с сабжем, после того как сумел обмануть дебагеры - сабж это чепуха.
Если еще не реализовал, тогда бегом на WASM .ru читать до просветления. А потом можно на http://www.cracklab.ru/посмотреть на противника :) хотя они там щас сонные. И тогда вопросы типа
"1. Как определить что участок кода в exe соответствует именно моей процедуре в сорце.
2. Как патчить процедуру в памяти." Отпадут.
А если время дороже - купи готовое решения, типа тех что предлагали выше.
FearG0 (2007-09-27 18:32:00) [48]Решено остановиться на Themida так как аналоги все в 2-3 раза дороже, и есть надежда что пока появится распаковщик новой версии, я уже выпущу новый релиз запакованный как-то похитрее.
Но одной защитой все таки не обойтись и поэтому вернемся к нашим баранам.
1. Как определить что участок кода в exe соответствует именно моей процедуре в сорце.
2. Как патчить процедуру в памяти.
У кого есть какая информация поделитесь.
Для размышлений предлагается старая статейка от DDA
procedure metka1;
//Начальная метка - нужна что бы находить потом в exe файле эти символы и знать
//откуда начинать шифровать
//Здесь метка представляет из себя десятичные числа от 0 до 256 через запятые
//Если метка 50,60,70,80,90 то это соответствует символам 2<FPZ
//Кстати, такого кол-во символов в метке может быть мало и лучше использовать больше
//Т.к если программа большая то такие последовательности могут встретиться не один раз
begin
asm
DB 50,60,70,80,90 //2<FPZ это метка начальная
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
beep;
ShowMessage('Период использования программы истёк!');
end;
procedure metka2;
//Конечная метка - нужна чтобы знать до куда нужно шифровать в файле и
//докуда расшифровывать в памяти
begin
asm
DB 68,68,67,45,61 //DDA-= это метка конечная
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
//Процедура Расшифрования(В даном примере и зашифрования)
var
ptrAddr: Pointer; {для Адреса процедуры вывода сообщения}
dwOldProtect: DWORD;
begin
ptrAddr := @TForm1.Button1Click; //Получаем адрес процедуры вывода сообщения
VirtualProtect(@TForm1.Button1Click, 2048, PAGE_READWRITE, @dwOldProtect);
//2048 это размер в байтах с которыми можно работать(по моему)
//Если процедура большая то нужно подбирать соответствующий размер
while ptrAddr <> @metka2 do
//шифрование(слабое) выполняем пока не дойдем то конечной метки
begin
Byte(ptrAddr^) := Byte(ptrAddr^) xor $41;
//каждый байт в памяти ксорится с кодом 65'A'(к примеру)
//Используйте более надёжные алгоритмы шифрования
inc(Integer(ptrAddr));
end;
exit; //нужно так сделать что б компилятор включил эти процедуры
metka1; //в код,т.к Delphi не вставляет в результирующий код процедуры,
metka2; //которые никогда не используются
end;
Anatoly Podgoretsky (2007-09-27 18:31:00) [49]> FearG0 (27.09.2007 17:10:36) [36]
Надеяться надо в первую очередь на голову, навесная защита всего лишь инструмент.
FearG0 (2007-09-27 17:47:00) [50]Однако не так хороша Themida как показалась сначала
hxxp://cracklab.ru/f/index.php?action=vthread&forum=1&topic=8643&page=3
FearG0 (2007-09-27 17:10:00) [51]Отлично. Мне это подходит. Эхх вот бы они еще WebMoney принимали вообще сказка бы была.
Как думаете стоит ли сочетать Themida со своей защитой или понадеяться только на нее. И вообще кто-нибудь имел опыт работы с ней? К Делфи она вообще прикручивается?
Сергей М. (2007-09-27 17:10:00) [52]
> FearG0 © (27.09.07 17:01) [33]
А вот с AES-128 (aka Rijndael), реализованным в современных аппаратных ключах, скажем, от Алладина, дело обстоит явно посложней Темиды.
Так что выбирай, куда вложить деньги, если оно того стоит.
Сергей М. (2007-09-27 17:03:00) [53]
> сколько потребуется времени чтобы сломать программу с защитой
> от Themida?
Если китайцыбудут продолжать ломать - ну пару лет максимум)
FearG0 (2007-09-27 17:01:00) [54]
> Но вряд ли ты ее потянешь
Сто пудов не потяну. Но на будущее не плохо было бы ознакомиться.
На сервер вынести не могу потому что код ресурсоемкий, и если хотя бы 50 человек одновременно потребуют от сервера решения своей задачи, то он накроется медным тазом.
За Themida и WinLicence спасибо, очень интересные программы судя по нытью во многих форумах как взломать, возможно стоит приобрести лицензию. Но вот проблема, чем большим крякерам такая защита сломала жизнь тем больше ее будут пытаться сломать.
Ваши мысли сколько потребуется времени чтобы сломать программу с защитой от Themida?
Сергей М. (2007-09-27 16:52:00) [55]
> Anatoly Podgoretsky © (27.09.07 16:49) [30]
> раз работа ведется с сервером, то почему ему не поручить
> эту работу
дык - так точно, сэр !
В этих условиях сервер - первый и последний бастион)
Сергей М. (2007-09-27 16:50:00) [56]
> Идеи есть?
Для малохольных взломщиков, если угодно, есть еще идея реализации тобой самомодифицирующегося кода. Но вряд ли ты ее потянешь)
Anatoly Podgoretsky (2007-09-27 16:49:00) [57]> Сергей М. (27.09.2007 16:47:29) [29]
Ну так это же он пожаловался.
Но я не пойму, раз работа ведется с сервером, то почему ему не поручить эту работу и взламывать будет нечего, кроме сервера, а это уже особый и совсем другой случай. У него же просто благоприятные условия для защиты, идеальные, именно те о которых только мечтает Микрософт.
Сергей М. (2007-09-27 16:47:00) [58]
> Anatoly Podgoretsky © (27.09.07 16:45) [28]
Толя, не пугай парня)
Мне кажется, он пока еще адекватен)
Anatoly Podgoretsky (2007-09-27 16:45:00) [59]> FearG0 (27.09.2007 16:39:26) [26]
Тогда лучше сразу сдавайся правоохранительным органам.
Сергей М. (2007-09-27 16:44:00) [60]
> FearG0 © (27.09.07 16:39) [26]
А тот самый твой "сервер", фигурирующий в "беде", достаточно надежен в плане взлома и несанкц.доступа ?
Ну дык вынеси ты свои "суперпуперсекретные" алгоритмы на сторону сервера - в чем проблема-то ?)