Молот и топор 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; |