Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #73, ЯНВАРЬ 2005 г.

Молот и топор

Shturmovik (Shturmovik@bk.ru)

Хакер, номер #073, стр. 073-108-4


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

Генератор размеров баннера

label 1,2;

var

x,y: integer;

begin

randomize;

1: x:=random(400);

2: y:=random(400);

if x<300 then goto 1;

if y<200 then goto 2;

Form2.Width:=x;

Form2.Height:=y;

Form2.Show;

Есть и еще одна интересная мысль - при запуске программы запускать таймер и производить проверку, допустим, каждые 10 минут работы (естественно, опираясь на все антикрэкерские средства, описанные мной выше). Чтобы не пускать существование нашей рекламы на самотек, я предлагаю тем же таймером проверять наличие баннера через определенные промежутки времени. Если это окно с заголовком, можно просто получать хэндл баннера, тем самым проверяя, точно ли баннер отображается или же его срезали. В противном случае можно просто вызывать функцию отображения несколько раз. Добить мозг юного взломщика можно приемом вложенных процедур, когда процедура прорисовки баннера заложена в процедуру проверки регистрационных данных и уже оттуда, независимо от правильности регистрации, идет код, который отвечает, допустим, за создание главного на форме. Таким образом, просто вырезать процедуру проверки невозможно - не будет работать программа. В этом случае хакеру придется трассировать код с заходом во множественные процедуры. Это может выдержать опытный взломщик, однако крякеры рангом поменьше просто пропадут в процедурах и утонут, как Титаник :). На основе всего, что мы рассмотрели в данной статье, я написал свой крэкми, который предлагаю для всеобщего обучения как исследователям защит, так и тем, кому она необходима.

Послесловие

Конечно, я рассмотрел и привел лишь малую, но действенную часть методов защиты программ. Однако, познав основы, ты сможешь разобраться и с более серьезными вещами. За кадром остались такие методы, как защита сервисом, создание исключений (SEH) и многое другое из набора программиста, разрабатывающего защиту. Скорее всего, мы еще рассмотрим эти методы на страницах «Кодинга» :).

Код для пункта «Ход конем»

procedure TForm1.Timer1Timer(Sender: TObject);

var

i: integer;

s, sn: string;

begin

s:=Edit1.text;

Назад на стр. 073-108-3  Содержание  Вперед на стр. 073-108-5