Author Topic: Обход капчи  (Read 6309 times)

0 Members and 1 Guest are viewing this topic.

FeNIkS

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Обход капчи
« on: July 18, 2014, 02:48:55 PM »
Всем привет! Нашёл похожие темы, но всё никак не получается написать обход.
Сможет ли кто-то помочь с написание скрипта под данную капчу?
Буду очень благодарен)

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Обход капчи
« Reply #1 on: July 18, 2014, 03:34:20 PM »
Нихрена себе капча.

Я думаю, возможно, только если там мало вариантов и программировать каждый.
« Last Edit: July 18, 2014, 03:39:05 PM by Vint »


FeNIkS

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Re: Обход капчи
« Reply #2 on: July 18, 2014, 06:11:27 PM »
Вариантов около 20-30 штук. Я думаю, что скрипт как-то будет похож на этот

FeNIkS

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Re: Обход капчи
« Reply #3 on: July 20, 2014, 02:41:46 PM »
Никто не может помочь в написании скрипта? Если трудно написать, то просто попрошу объяснить, как и что делать

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Re: Обход капчи
« Reply #4 on: July 20, 2014, 03:54:50 PM »
А что именно непонятно? Что нужно объяснять? Насколько я понимаю, весь скрипт будет напичкан IF_PICTURE_IN. Или тебе эта команда непонятна?
« Last Edit: July 20, 2014, 04:02:17 PM by Hito »
Я не ду... Потому и не бу...

FeNIkS

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Re: Обход капчи
« Reply #5 on: July 20, 2014, 11:14:54 PM »
Желательно, показать пример именно для этой капчи. Хотя бы для 1 вида

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Re: Обход капчи
« Reply #6 on: July 21, 2014, 10:56:02 AM »


Я хз - кто как сделал бы... Но я, так как я не силен в разных массивах и так далее, сделал бы так...
Code: (clickermann) [Select]
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "1.bmp", -1, 100) // Ищем картинку 1 (пустое место для звезды)
  GETSCREEN
  IF_PICTURE_IN (0,0, $_xmax,$_ymax, "3.bmp", -1, 100) // Если картинка 1 нашлась, то ищем картинку 3 (плавающую звездочку)
    LDOWN($_return1, $_return2)  // После того, как нашли картинку 3, зажимаем на ней левую кнопку мыши
    WAITMS(100)
    LUP(xxx,yyy) // Отпускаем правую кнопку мыши в тех координатах, где у нас  картинка 1
    WAITMS(100)
  END_IF
END_IF
WAITMS(100)

// Ниже то же самое для треугольника

Это приблизительный набросок... Чтоб мысль была понятна. Красным контуром обозначены границы, по которым я бы сделал скрины для поиска фигур.
« Last Edit: July 21, 2014, 02:17:15 PM by Hito »
Я не ду... Потому и не бу...

FeNIkS

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Re: Обход капчи
« Reply #7 on: July 21, 2014, 12:54:53 PM »
Спасибо, сейчас попробую)

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Обход капчи
« Reply #8 on: July 21, 2014, 01:22:11 PM »
Общая схема
  • Поиск окна капчи
  • Запуск
  • Обработка
  • Ожидание подтверждения

Обработка подробнее... Чтобы более-мение стандартизировать сделал так:
Ищу неподвижную область куда перетягиваются элементы, она же определяет номер варианта. Имя, например, ver_4.bmp

В подпрограмму передаю количество возможных "плавающих" картинок, номер варианта и смещения. Смещения - куда будем тянуть каждую картинку относительно ver_4.bmp. Чаще всего совпадают с положением ver_4.bmp, но бывает нужно в разные места.

Ищем последовательно картинки к данному варианту и перетягиваем их.
Иногда вариант один (косметичка), а наборы элементов бывают разные. Этим способом мы сильно сокращаем код и создание.

Вот почти готовый код. Осталось дополнять вариантами... Не реализован отдельный вариант с бабочками. Можно его или пропускать или обрабатывать другой подпрограммой, т.к. логика другая.
Code: (clickermann) [Select]
#name "AYH"
// Author: Vint
// Version: 0.3 (21.07.2014)
#logfile

$pref = "ver_"  // префикс имени основы картинки (варианты)
$num = 12        // сколько вариантов всего

//------------------------------------------------------------------------------

//==============================================================================
SUB(PLAY, $pic, $version, $D1_X,$D1_Y, $D2_X,$D2_Y, $D3_X,$D3_Y) //=============
   // количество картинок в этом варианте
   // № варианта
   // смещения X/Y куда тащить (от базовой)
   
   $time = $_time_t + 5
   WHILE($time > $_time_t)
      // 1-й элемент
      GETSCREEN
      IF_PICTURE_IN ($X1,$Y1,$X2,$Y2, STRCONCAT($pref, $version,"_1", ".bmp"))
         LOGWRITE ("нашли 1")
         // перенос
         LDOWN($_return1+5, $_return2+5)
         WAITMS(100)
         MOVE($main_X+$D1_X, $main_Y+$D1_Y)
         WAITMS(200)
         LUP($main_X+$D1_X, $main_Y+$D1_Y)
         WAITMS(300)
         MOVE($_xmax,$_ymax)
         WAITMS(50)
      END_IF     
     
      // 2-й элемент
      IF($pic > 1)
         GETSCREEN
         IF_PICTURE_IN ($X1,$Y1,$X2,$Y2, STRCONCAT($pref, $version,"_2", ".bmp"))
            LOGWRITE ("нашли 2")
            // перенос
            LDOWN($_return1+5, $_return2+5)
            WAITMS(100)
            MOVE($main_X+$D2_X, $main_Y+$D2_Y)
            WAITMS(200)
            LUP($main_X+$D2_X, $main_Y+$D2_Y)
            WAITMS(300)
            MOVE($_xmax,$_ymax)
            WAITMS(50)
         END_IF
      END_IF
     
      // 3-й элемент
      IF($pic > 2)
         GETSCREEN
         IF_PICTURE_IN ($X1,$Y1,$X2,$Y2, STRCONCAT($pref, $version,"_3", ".bmp"))
            LOGWRITE ("нашли 3")
            // перенос
            LDOWN($_return1+5, $_return2+5)
            WAITMS(100)
            MOVE($main_X+$D2_X, $main_Y+$D2_Y)
            WAITMS(200)
            LUP($main_X+$D2_X, $main_Y+$D2_Y)
            WAITMS(300)
            MOVE($_xmax,$_ymax)
            WAITMS(50)
         END_IF
      END_IF
     
      // 4-й элемент
      IF($pic > 3)
         GETSCREEN
         IF_PICTURE_IN ($X1,$Y1,$X2,$Y2, STRCONCAT($pref, $version,"_4", ".bmp"))
            LOGWRITE ("нашли 4")
            // перенос
            LDOWN($_return1+5, $_return2+5)
            WAITMS(100)
            MOVE($main_X+$D2_X, $main_Y+$D2_Y)
            WAITMS(200)
            LUP($main_X+$D2_X, $main_Y+$D2_Y)
            WAITMS(300)
            MOVE($_xmax,$_ymax)
            WAITMS(50)
         END_IF
      END_IF
     
      // 5-й элемент
      IF($pic > 4)
         GETSCREEN
         IF_PICTURE_IN ($X1,$Y1,$X2,$Y2, STRCONCAT($pref, $version,"_5", ".bmp"))
            LOGWRITE ("нашли 5")
            // перенос
            LDOWN($_return1+5, $_return2+5)
            WAITMS(100)
            MOVE($main_X+$D2_X, $main_Y+$D2_Y)
            WAITMS(200)
            LUP($main_X+$D2_X, $main_Y+$D2_Y)
            WAITMS(300)
            MOVE($_xmax,$_ymax)
            WAITMS(50)
         END_IF
      END_IF
   END_CYC
END_SUB

//==============================================================================

start:
// ищем-ждём окно с капчей
MOVE($_xmax,$_ymax)
$find = 0
WHILE($find = 0)
   GETSCREEN
   IF_PICTURE_IN (0,0,$_xmax,$_ymax, "start.bmp",-1,86)
      HINTPOPUP("Капча!")
      LCLICK($_return1+50,$_return2+10)
     
      // основная область капчи
      $X1 = $_return1-131
      $X2 = $_return1+230
      $Y1 = $_return2-82
      $Y2 = $_return2+50
      // кнопка RELOAD
      $reload_X = $_return1+154
      $reload_Y = $_return2+64
     
      $find = 1
   ELSE
      WAITMS(200)
   END_IF
END_CYC

// распознаём вариант капчи
MOVE($_xmax,$_ymax)
WAITMS(2000)
$version = 0
WHILE($version = 0)
   GETSCREEN
   $version = 0
   $i = 0
   FOR($i,$i < $num)
      IF_PICTURE_IN (0,0,$_xmax,$_ymax, STRCONCAT($pref, $i+1, ".bmp"),-1,100)
         $version = $i+1
         LOGWRITE ("Вариант капчи № ", $i+1)
         $main_X = $_return1
         $main_Y = $_return2
         $i = 10000       // выходим досрочно
      ELSE
         WAITMS(20)
      END_IF
   END_CYC
   
   IF($version = 0)
      // тут лучше проверить на релоад
      // Можно или обновить капчу или определять вариант опять
      $version = 10000
   END_IF
END_CYC

// релоад
IF($version = 10000)
   LCLICK($reload_X,$reload_Y)
   WAIT(1)
   GOTO(start)
END_IF


SWITCH($version)
CASE(1)   // вариант 1 (ТОРТ)
   PLAY(2, $version, 15,10, 15,10, 0,0)  // 2 картинки, №варианта, смещения XY
CASE(2)   // вариант 2 (бегуны)
   PLAY(2, $version, -30,0, -30,0, 0,0)
CASE(3)   // вариант 3 (мылыш обжора)
   PLAY(4, $version, 20,25, 20,25, 20,25)
CASE(4)   // вариант 4 (косметичка)
   PLAY(4, $version, 0,0, 0,0, 0,0)
CASE(5)   // вариант 5 (летающие звери)
   PLAY(5, $version, 0,0, 0,0, 0,0)
CASE(6)   // вариант 6 (ваза с цветами)
   PLAY(4, $version, 0,0, 0,0, 0,0)
CASE(7)   // вариант 7 (рожа)
   PLAY(3, $version, 0,25, 0,55, 0,68)
CASE(8)   // вариант 8 (Aliens)
   PLAY(3, $version, 0,25, 0,25, 0,25)
CASE(9)   // вариант 9 (баскетбол)
   PLAY(1, $version, 0,40, 0,0, 0,0)
CASE(10)   // вариант 10 (гольф)
   PLAY(1, $version, 0,10, 0,0, 0,0)
CASE(11)   // вариант 11 (велосипед)
   PLAY(2, $version, 0,0, 55,-70, 0,0)
CASE(12)   // вариант 12 (лимонад)
   PLAY(2, $version, 0,0, 0,0, 0,0)
END_SWITCH

// Ждём подтверждения
MOVE($_xmax,$_ymax)
WAITMS(50)
$time = $_time_t + 15
$find = 0
WHILE(($find = 0) & ($time > $_time_t))
   GETSCREEN
   IF_PICTURE_IN ($X1,$Y1,$X2,$Y2, "complete.bmp",-1,75)
      LOGWRITE ("Капча распознана!")
      HINTPOPUP("Капча распознана!")
      $find = 1
      LCLICK($reload_X,$reload_Y)
      WAIT(1)
   ELSE
      WAITMS(100)
   END_IF
END_CYC
IF($find = 0)
   LOGWRITE ("Не распознали")
   LCLICK($reload_X,$reload_Y)
   WAIT(1)
END_IF
GOTO(start)

HALT

« Last Edit: July 22, 2014, 07:21:40 AM by Vint »


Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Re: Обход капчи
« Reply #9 on: July 21, 2014, 02:21:26 PM »
Кстати... Обработать всего вариантов 5, а остальные пропускать - тоже выход )) Я бы вообще не заморачивался - обработал бы 1 вариант и кер бы с ним )) Пусть скрипт его и ищет постоянно ))
« Last Edit: July 21, 2014, 03:34:22 PM by Hito »
Я не ду... Потому и не бу...

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Обход капчи
« Reply #10 on: July 21, 2014, 04:11:27 PM »
Это только, если там нет штрафа за это или ограничения.
Даже мои 20 вариантов очень мало, долго ждать подходящего.
« Last Edit: July 21, 2014, 05:48:17 PM by Vint »


FeNIkS

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Re: Обход капчи
« Reply #11 on: July 21, 2014, 06:09:35 PM »
Огромное спасибо) Дальше уже буду дополнять) Кстати, да, капчу нужно выполнять с первого раза, т.к. сайт начинает подозревать работу бота

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Re: Обход капчи
« Reply #12 on: July 22, 2014, 08:20:10 PM »
Ну, значит надо кропотливо проработать все варианты...)) А от себя еще хочу обратить внимание вот на что. В скрипте уважаемого Vinta, в отличие от моего (отличиев там много, но я хочу обратить внимание на это)

Code: (clickermann) [Select]
         LDOWN($_return1+5, $_return2+5)
         WAITMS(100)
         MOVE($main_X+$D1_X, $main_Y+$D1_Y)
         WAITMS(200)
         LUP($main_X+$D1_X, $main_Y+$D1_Y)
         WAITMS(300)
         MOVE($_xmax,$_ymax)
         WAITMS(50)

после зажима ЛКМ идет сначала MOVE в нужную точку, потом пауза и только потом отпускается ЛКМ и это правильно. Только прошу понять меня правильно. Это не оценка скрипта уважаемого Vinta с моей стороны, а указание на МОЮ грубую ошибку. Это на тот случай, если мой пример хоть как-то будет рассматриваться  :)
« Last Edit: July 22, 2014, 08:32:56 PM by Hito »
Я не ду... Потому и не бу...