Author Topic: Антигейт и вопросы по нему  (Read 7558 times)

0 Members and 1 Guest are viewing this topic.

RioT

  • Зашел в гости
  • *
  • Posts: 5
    • View Profile
Антигейт и вопросы по нему
« on: January 10, 2014, 12:17:53 AM »
В общем-то попытался разобраться в этом коде, но не всё нужное нашел.
[spoiler]
В последнее время народ всё чаще спрашивает про антикапчу. Но внятно связать работу со своим скриптом не могут.
Хочу выложить шаблон для капчи Вконтакте. Здесь один из вариантов. Оформлена как #include

Скачиваем AGClient v1.2
Читаем инструкцию. Настраиваем, запускаем.
Вставляем в свой скрипт #include "Антикапча 0.2 ВК include"

Code: (clickermann) [Select]
GOSUB(capcha)// гле нужно вызываем подпрограмму проверки вылезла ли капча.
сам include (скачиваем в этом посте вместе с картинками) состоит:
Code: (clickermann) [Select]
SUB(capcha) //========== Ловим капчу ===========================================
   
   MOVE(0,0)
   WAITMS(100)
   GETSCREEN
   IF_PICTURE_IN (0,0,$_xmax,$_ymax, "capcha_NEW.bmp",-1,80) //есть капча
      $x1 = $_return1+17
      $y1 = $_return2+40
      $x2 = $_return1+146
      $y2 = $_return2+89
     
      $hwnd = wndFind("AGClient v1.2") // находим окно
      // последовательное задание координат
      PostMessage($hwnd, 0x555, 1, $x1)
      PostMessage($hwnd, 0x555, 2, $y1)
      PostMessage($hwnd, 0x555, 3, $x2)
      PostMessage($hwnd, 0x555, 4, $y2)
     
      repeat:
      waitms(200)
      PostMessage($hwnd, 0x555, 5, 0) // распознать
      waitms(1000)
     
      GETSCREEN
      IF_PICTURE_IN (0,0,$_xmax,$_ymax, "AGClient.bmp")
         $AGC_x = $_return1-25
         $AGC_y = $_return2-56
         LOGWRITE("AGClient X=", $_return1, ", Y=", $_return2)
      END_IF
     
      $pic=0
      WHILE($pic=0)
         GETSCREEN
         IF (PXL($AGC_x, $AGC_y)=65535) // жёлтый
            WAITMS(300)
         END_IF
         IF (PXL($AGC_x, $AGC_y)=65280) // зелёный
            WAITMS(100)
            $pic=1 // выходим из цикла
         END_IF
         IF (PXL($AGC_x, $AGC_y)=255) // красный
            LOGWRITE("Не распознали")
            HINTPOPUP("Не распознали")
            //HALT
            $pic=2
         END_IF
      END_CYC
     
      IF($pic=2) // если не распознали отправляем повторно новую капчу
         TOCLIP("12345")
         WAITMS(100)
         GOSUB(paste)
         WAITMS(1500)
         GOTO(repeat)
      END_IF
     
      GOSUB(paste)
      WAITMS(300)
   END_IF
END_SUB

SUB(paste) //========== Вставить ===============================================
   KEYDOWN (#CTRL) // Ctrl+V
   WAITMS (50)
   KEYDOWN (#V)
   WAITMS (50)
   KEYUP (#V)
   WAITMS (50)
   KEYUP (#CTRL)
   WAITMS (50)
   KEYDOWN (#ENTER)
   KEYUP (#ENTER)
   WAITMS (50)
END_SUB


В указанном скрипте, если AGClient прислал, что капча не распознана, вводим что попало обновляя капчу и отсылаем заново. Если при нераспознавании нужно станавливаться, раскомментируем строку //HALT
[/spoiler]
Скажу сразу, перечитал форум, справку и справку языка, может я тугой, но нужна помощь, не прошу сделать за меня, а просто подтолкнуть к решению.
Ситуация: Браузерная игрушка, периодическая капча в одном месте(т.е. первая часть кода, как я понимаю, не нужна, ибо корды капчи можно забить заранее).
Что нужно:На пиксель цвета капчи ставим инклюд, который запускает распознавание, это сделал (адекватное и правильное ли такое решение?).Нужна помощь именно от перехода с оконного режима браузерак антигейту(там нажимаем на распознать, проверяем цвет индикатора, при красном репетим, при желтом ждем, при зеленом идем дальше) и переход обратно к этому браузеру и вводом капчи (думаю, реализовать через ctrl+v , нормально будет?), ну дальше основной скрипт продолжаем.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Антигейт и вопросы по нему
« Reply #1 on: January 10, 2014, 06:59:51 AM »
Не понятно в чём проблема? Или окно браузера привязано и нужно всё делать в "теневом режиме"? Тогда нужно посмотреть окно с капчей, имеет ли оно тот же hwnd. Если да - всё получится, если нет - только выводить на передний план и там перепривязать или сразу распознать. В общем в немешающем режиме тогда не получится.


RioT

  • Зашел в гости
  • *
  • Posts: 5
    • View Profile
Re: Антигейт и вопросы по нему
« Reply #2 on: January 10, 2014, 07:53:19 PM »
Не понятно в чём проблема? Или окно браузера привязано и нужно всё делать в "теневом режиме"? Тогда нужно посмотреть окно с капчей, имеет ли оно тот же hwnd. Если да - всё получится, если нет - только выводить на передний план и там перепривязать или сразу распознать. В общем в немешающем режиме тогда не получится.
Здравствуйте, спасибо, что откликнулись .
Не очень вас понял. Сама проблема в том, что я недостаточно знаю синтаксис, чтобы отвязать привязку от браузера , потом привязать его к Антигейту , а потом обратно к браузеру , чтобы всё это было в "немешающем" режиме.
Про hwnd .. капча выходит в браузере -> она имеет тот же hwnd , если вы об этом.

RioT

  • Зашел в гости
  • *
  • Posts: 5
    • View Profile
Re: Антигейт и вопросы по нему
« Reply #3 on: January 10, 2014, 07:58:39 PM »
Так же на счет того кода, не всё уяснил :
Code: [Select]
PostMessage($hwnd, 0x555, 5, 0) // распознать Это мы посылаем Антигейту сообщение, чтобы он распознал капчу,так?
Code: [Select]
GETSCREEN
      IF_PICTURE_IN (0,0,$_xmax,$_ymax, "AGClient.bmp")
         $AGC_x = $_return1-25
         $AGC_y = $_return2-56
         LOGWRITE("AGClient X=", $_return1, ", Y=", $_return2)
      END_IF

тут я вообще не понимаю что мы делаем.
Code: [Select]
TOCLIP("12345")
         WAITMS(100)
         GOSUB(paste)
И тут... что за TOCLIP?
Зачем при нераспознанной капче вставлять её ?Оо

В остальном, всё ясно, попробую сегодня написать код и потестить.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Антигейт и вопросы по нему
« Reply #4 on: January 10, 2014, 10:47:00 PM »
Так же на счет того кода, не всё уяснил :
Code: [Select]
PostMessage($hwnd, 0x555, 5, 0) // распознать Это мы посылаем Антигейту сообщение, чтобы он распознал капчу,так?
Code: [Select]
GETSCREEN
      IF_PICTURE_IN (0,0,$_xmax,$_ymax, "AGClient.bmp")
         $AGC_x = $_return1-25
         $AGC_y = $_return2-56
         LOGWRITE("AGClient X=", $_return1, ", Y=", $_return2)
      END_IF

тут я вообще не понимаю что мы делаем.
Code: [Select]
TOCLIP("12345")
         WAITMS(100)
         GOSUB(paste)
И тут... что за TOCLIP?
Зачем при нераспознанной капче вставлять её ?Оо

В остальном, всё ясно, попробую сегодня написать код и потестить.
1. Так.
2. Здесь мы ищем один из известных элементов окна AG и от него высчитываем где нам проверять цвет сигнализатора.
3. Такое было техзадание. Если не распознал вставляли что попало чтобы капча сменилась. Чтобы не зависнуть отправляя снова и снова трудную капчу надеясь попасть на догадливого китайца. TOCLIP это передача в буфер обмена.
Скрипт писался и использовался без привязки.
Сначала сохранить hwnd привязанного окна браузера.
Там где ищем окно AG запоминаем его hwnd.
Привязываться/отвязываться командой HSET($hwnd, 1)
1 привязать
0 отвязать
нужно пробовать.
« Last Edit: January 10, 2014, 10:51:20 PM by Vint »


RioT

  • Зашел в гости
  • *
  • Posts: 5
    • View Profile
Re: Антигейт и вопросы по нему
« Reply #5 on: January 11, 2014, 11:53:24 PM »
Quote
1. Так.
2. Здесь мы ищем один из известных элементов окна AG и от него высчитываем где нам проверять цвет сигнализатора.
3. Такое было техзадание. Если не распознал вставляли что попало чтобы капча сменилась. Чтобы не зависнуть отправляя снова и снова трудную капчу надеясь попасть на догадливого китайца. TOCLIP это передача в буфер обмена.
Скрипт писался и использовался без привязки.
Сначала сохранить hwnd привязанного окна браузера.
Там где ищем окно AG запоминаем его hwnd.
Привязываться/отвязываться командой HSET($hwnd, 1)
1 привязать
0 отвязать
нужно пробовать.
так, я всё понял, и остался 1 вопрос, можно ли вместо того, чтобы посылать сообщения антигейту,искать корды от картинки и т.д. просто этой командой привязаться к нему просто нажать по нужным кординатам и привязаться обратно к браузеру?
Есть ли уязвимости и недостатки этого метода?

---Добавил----

[spoiler]
Code: (clickermann) [Select]
   SUB(cap) 
$hwnd = wndFind("AGClient v1.2")
HSET($hwnd, 1)
 repeat:
      WAITMS(rnd(100,200))
      LCLICK(50,67) // распознать
      WAITMS(rnd(700,1200))
 
   
           $p=0
      WHILE($p=0)
         
         IF (PXL(23,33)=65535) // жёлтый
            WAITMS(300)
         END_IF
         
         IF (PXL(23,33)=65280) // зелёный
            WAITMS(100)
           
            $p=1 // выходим из цикла
         END_IF
         
         IF (PXL(23,33)=255) // красный
         
            $p=2
         END_IF
      END_CYC
 
      IF($p=2) // если не распознали отправляем повторно новую капчу
         WAITMS(1000)
         GOTO(repeat)
      END_IF
 
      GOSUB(paste)
      WAITMS(rnd(120,460))
    END_SUB


SUB(paste) //========== Вставить ===============================================
$hwndm = wndFind("*Браузер*")
HSET($hwndm, 1)
   lclick (rnd(343,392),rnd(109,116)) //корды
   KEYDOWN (#CTRL) // Ctrl+V
   WAITMS(rnd(110,260))
   KEYDOWN (#V)
   WAITMS (50)
   KEYUP (#V)
   WAITMS(rnd(60,120))
   KEYUP (#CTRL)
   WAITMS(rnd(170,520))
   KEYDOWN (#ENTER)
   KEYUP (#ENTER)
   WAITMS(rnd(300,790))
END_SUB
[/spoiler]

Собственно, сделал, что скажите?
« Last Edit: January 12, 2014, 06:00:42 AM by RioT »

RioT

  • Зашел в гости
  • *
  • Posts: 5
    • View Profile
Re: Антигейт и вопросы по нему
« Reply #6 on: January 12, 2014, 07:07:52 PM »
Quote
1. Так.
2. Здесь мы ищем один из известных элементов окна AG и от него высчитываем где нам проверять цвет сигнализатора.
3. Такое было техзадание. Если не распознал вставляли что попало чтобы капча сменилась. Чтобы не зависнуть отправляя снова и снова трудную капчу надеясь попасть на догадливого китайца. TOCLIP это передача в буфер обмена.
Скрипт писался и использовался без привязки.
Сначала сохранить hwnd привязанного окна браузера.
Там где ищем окно AG запоминаем его hwnd.
Привязываться/отвязываться командой HSET($hwnd, 1)
1 привязать
0 отвязать
нужно пробовать.
так, я всё понял, и остался 1 вопрос, можно ли вместо того, чтобы посылать сообщения антигейту,искать корды от картинки и т.д. просто этой командой привязаться к нему просто нажать по нужным кординатам и привязаться обратно к браузеру?
Есть ли уязвимости и недостатки этого метода?

---Добавил----

[spoiler]
Code: (clickermann) [Select]
   SUB(cap) 
$hwnd = wndFind("AGClient v1.2")
HSET($hwnd, 1)
 repeat:
      WAITMS(rnd(100,200))
      LCLICK(50,67) // распознать
      WAITMS(rnd(700,1200))
 
   
           $p=0
      WHILE($p=0)
         
         IF (PXL(23,33)=65535) // жёлтый
            WAITMS(300)
         END_IF
         
         IF (PXL(23,33)=65280) // зелёный
            WAITMS(100)
           
            $p=1 // выходим из цикла
         END_IF
         
         IF (PXL(23,33)=255) // красный
         
            $p=2
         END_IF
      END_CYC
 
      IF($p=2) // если не распознали отправляем повторно новую капчу
         WAITMS(1000)
         GOTO(repeat)
      END_IF
 
      GOSUB(paste)
      WAITMS(rnd(120,460))
    END_SUB


SUB(paste) //========== Вставить ===============================================
$hwndm = wndFind("*Браузер*")
HSET($hwndm, 1)
   lclick (rnd(343,392),rnd(109,116)) //корды
   KEYDOWN (#CTRL) // Ctrl+V
   WAITMS(rnd(110,260))
   KEYDOWN (#V)
   WAITMS (50)
   KEYUP (#V)
   WAITMS(rnd(60,120))
   KEYUP (#CTRL)
   WAITMS(rnd(170,520))
   KEYDOWN (#ENTER)
   KEYUP (#ENTER)
   WAITMS(rnd(300,790))
END_SUB
[/spoiler]

Собственно, сделал, что скажите?

Что-то траблы с этой привязкой , ничего с HSET не выходит. Конкретнее напишу позже.