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

Форум в топку

f0gg0t (f0gg0t@gmail.ru)

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


Но учти! Флудить – здоровью вредить. Лучше занимайся чем-нибудь более полезным и прибыльным.

многопоточность

Любой флудер обязательно должен быть многопоточным для достижения максимальной скорости и, соответственно, эффективности. Флудить, пардон, лучше всего топиками, избавиться от них довольно-таки сложно, да и вреда они приносут намного больше, чем сообщения. Как работать с TThread, думаю, объяснять не надо, но все же напомню о том, что синхронизация - вещь не последняя, поэтому при обращении с VCL-компонентами, всегда используй Synchronize.

прокси

Осталось сказать несколько слов в пользу безопасности. Многие авторы подобных программ ленятся добавить лист прокси или хотя бы одну, ведь ручной бан никто не отменял, резиновые дубины - тоже, поэтому учимся прикручивать прокси.

Приделать их особого труда не составляет, всего лишь вместо хоста желаемого сервиса нужно коннектиться к прокси и посылать запрос с данными, предназначенными для нашего форума. Самое сложное - это учесть все возможные ситуации. Начиная от проверки коннекта, кончая проверкой ответа на наличие куков. Не стоит пренебрегать try...except-конструкциями и забывать о том, что connect - все-таки функция, а не процедура.

функции распознавания картинки

function ChkColorNumber4Ipb2(Color:TColor):boolean;

var

R,G,B:integer;

begin

Result:=true;

R:=GetRValue(Color);

G:=GetGValue(Color);

B:=GetBValue(Color);

if (R>44) or (G>44) or (B>44) then Result:=false;

end;

function GetNumber4Ipb2(Imagex:TBitmap):string;

const

tops: Array[1..6] of Integer = (0,27,54,81,108,135);

//Координаты активных зон

var

bmps:Array[0..9] of TBitmap; //массив эталонов

i,x,yy,n,o,p:integer;

ibreak,ybreak,pbreak:Boolean;

Nums: Array[1..6] of Integer;

Cifr: Array[1..6] of Integer;

Img:TBitmap;

begin

yBreak:=false;

pBreak:=false;

iBreak:=false;

n:=0;

Img:= TBitmap.Create;

Img.Width :=Imagex.Width;

Img.Height :=32; //Граница по вертикали

for i:=1 to 6 do Nums[i]:=0;

for x:=0 to Imagex.Width-4 do begin

for yy:=0 to Imagex.Height-4 do begin

if ChkColorNumber4Ipb2(Imagex.Canvas.Pixels[x,yy]) then

Img.Canvas.Pixels[x-27,yy-16]:=clred;

end;

end;

for i:=0 to 9 do begin //Загружаем 10 эталонов

bmps[i]:=TBitmap.Create;

bmps[i].LoadFromFile(ExtractFilePath(Application.ExeName)+

'images/'+IntToStr(i)+'.bmp');

end;

for x:=1 to 6 do begin //Проверяем каждый участок

if yBreak then begin

yBreak:=false;

break;

end;

for i:=0 to 9 do begin //Сверяем с каждым эталоном

if iBreak then begin

iBreak:=false;

break;

end;

for o:=0 to 11 do begin //Изучаем участок

if pBreak then begin

pBreak:=false;

break;

end;

for p:=0 to 31 do begin

if Img.Canvas.Pixels[tops[x]+o,p-1]=bmps[i].Canvas.Pixels[o,p] then

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