Автор Тема: Как сделать сохранение текста прошедшого удачный перебор?  (Прочитано 6584 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн -BlackJack- [?]

  • Новичок
  • *
  • Сообщений: 13
  • Репутация: 0
    • Награды
Доброе утро, день, вечер, ночь увж.Знатоки Autoit.

Есть данный код:

Код: AutoIt [Выделить]
#include <file.au3>


$bLoop = 1
While $bLoop = 1

    $text = InputBox("Name", "Text")
    If @error = 1 Then
        MsgBox(4096, "Name", "Text")
        Exit 0
    Else
    If $text = "" or $text = "1" Then
            MsgBox(4096, "Error", "Text")
            Else
            $bLoop = 0
        EndIf
    EndIf
WEnd
If WinExists(@ScriptName) Then Exit
AutoItWinSetTitle(@ScriptName)
HotKeySet("{ESC}", "Terminate")

$sFilePath = @ScriptDir & "\box.txt" ;файл в папке со скриптом
FileWrite("good.txt", "1" & @CRLF & "1") ;файл в папке со скриптом для сохранения удачной комбинации
$text1 = "Name Window"
WinWait($text1,"")
If Not WinActive($text1,"") Then WinActivate($text1,"")
WinWaitActive($text1,"")

For $i = 1 To $sLines ; от 1 до количества строк в файле выполнять:
$command = FileReadLine($sFilePath, $i)

; Check if file opened for writing OK
Send("{F7}")
Sleep(20)
Send($command&"{ENTER}")
Sleep(20)
Next

Func Terminate()
Exit 0
EndFunc


Чего хочу добиться (так как знаний пока что немного,но останавливаться  не собираюсь)-

1. Что бы после прогонки "слов" из файла box.txt и после найденного-подобранного правильного "слова" он останавливался, а не продолжал работу(система похожа на брут, но используется не много в другом месте). - если возможно.
2. Если же первый пункт не возможен, то основной задачей которую я для себя поставил, это сохранение правильного подобранного "слова" в файл good.txt. - основная проблема.

По самой проге. Перебор идет в одну строку, то есть в активное окно для ввода текста.(как пример- логина нет, есть только пасс). Система так же смахивает на флудоботы.

Если же есть другие предложения (по изменению, модернизации), буду очень выслушать их и принять во внимание.
Заранее благодарен.

ЗЫ.. Просьба, выкладывать не кусок кода, а уже готовое решение.

Русское сообщество AutoIt


Оффлайн dwerf [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 478
  • Репутация: 218
  • Пол: Мужской
  • Использует ArchLinux
    • Награды
Проверка нужна, правильное было слово или нет. Для реализации предоставлено не достаточно данных.
А потом как то так (внизу):
(нажмите для показа/скрытия)
00110110001000001101000011010011001

Оффлайн kzru_hunter [?]

  • Осваивающий
  • **
  • Сообщений: 144
  • Репутация: 49
    • Награды
-BlackJack- Распиши по подробнее свою проблему, а то многое не понятно, и в коде желательно комментарии расписать, чтобы было понятно, что хочешь в нём сделать.
Как я понял, ты хочешь брать каждое слово из файла box.txt и вставлять в определенное окно другого приложения, и если какое-то слово прокатит, то записывать это слово в good.txt и выходить из скрипта? Но тут не ясно, как ведёт то приложение при вводе в окно правильного и неправильно слова.

Оффлайн Yuriy [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 737
  • Репутация: 281
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Вот такой пример написал.
Для демонстрации надо файл box.txt
Если в этом файле где-то будет строка qwerty,
пароль будет найден.
Код: AutoIt [Выделить]
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$pass = "qwerty" ;правильный пароль

$Form1 = GUICreate("Enter password", 320, 111, 192, 114)
$Input1 = GUICtrlCreateInput("", 8, 8, 297, 21)
$Button1 = GUICtrlCreateButton("Ok", 24, 72, 105, 25)
$Button2 = GUICtrlCreateButton("Cancel", 192, 72, 105, 25)
GUISetState(@SW_SHOW)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit       
        Case $Button1
            $File = FileOpen("box.txt", 0) ;открыть файл со словарем (должен находиться в одной директории со скриптом)
            If $file = -1 Then
                MsgBox(16, "Error", "Unable to open file.")
                Exit
            EndIf
            Call("Check"); вызвать функцию перебора      
        Case $Button2
            Exit
    EndSwitch
WEnd

Func Check()
    While 1
        Sleep(200); для наглядности  
        $line = FileReadLine($file);читать файл словаря построчно
        If @error = -1 Then
            MsgBox(64, "Перебор", "Перебор закончен")
            ExitLoop
        EndIf
        GUICtrlSetData($Input1,$line); ввести строку в поле ввода пароля
        $text = GUICtrlRead($Input1); прочитать строку из поля ввода
        If $text = $pass Then; сравнить прочитанную строку и сравнить с правильным паролем         
            MsgBox(64, "Пароль подошел", $text)
            FileClose($file)
        Exit
        EndIf
    WEnd
EndFunc




Добавлено: Май 13, 2010, 14:04:06
Еще такой вариант. На большее фантазии не хватило.
Эта программа с интерфейсом - цель:
Код: AutoIt [Выделить]
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

$pass = "qwerty"

$Form1 = GUICreate("Авторизация", 296, 130, 192, 114)
$Input1 = GUICtrlCreateInput("", 8, 8, 273, 21)
$Label1 = GUICtrlCreateLabel("Состояние", 8, 48, 274, 17)
$Button1 = GUICtrlCreateButton("Ok", 32, 88, 81, 25)
$Button2 = GUICtrlCreateButton("Cancel", 184, 88, 81, 25)
GUISetState(@SW_SHOW)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit       
        Case $Button1
            $text = GUICtrlRead($Input1)
            If $text = $pass Then              
                GUICtrlSetData($Label1,"Пароль принят: " & $text)
            Else
                GUICtrlSetData($Label1,"Плохой пароль")
            EndIf
        Case $Button2
            Exit
    EndSwitch
WEnd


Эта программа - переборщик цели:

Код: AutoIt [Выделить]
If WinExists("Авторизация") Then
    WinSetState("Авторизация", "", @SW_RESTORE)
Else
    MsgBox(16, "Ошибка", "Сачала запустите программу авторизации")
    Exit   
EndIf

$File = FileOpen("box.txt", 0)
    If $file = -1 Then
        MsgBox(16, "Error", "Unable to open file.")
        Exit
    EndIf

While 1
    Sleep(200)
    $line = FileReadLine($file)
    If @error = -1 Then
        MsgBox(64, "Перебор", "Перебор закончен")
        ExitLoop
    EndIf
    ControlSetText("Авторизация", "", "Edit1", $line)
    ControlClick("Авторизация", "Ok", "Button1")
    If WinExists("Авторизация", "Плохой пароль") = 0 Then
        MsgBox(64, "Пароль найден", $line)
        ExitLoop
    EndIf
WEnd
FileClose($file)


Запускам сначала цель, затем переборщик.
Файл словаря box.txt тоже нужен.
« Последнее редактирование: Май 13, 2010, 14:04:07 от Yuri, Причина: Объединение сообщений »

Русское сообщество AutoIt


Оффлайн -BlackJack- [?]

  • Новичок
  • *
  • Сообщений: 13

  • Автор темы
  • Репутация: 0
    • Награды
-BlackJack- Распиши по подробнее свою проблему, а то многое не понятно, и в коде желательно комментарии расписать, чтобы было понятно, что хочешь в нём сделать.
Как я понял, ты хочешь брать каждое слово из файла box.txt и вставлять в определенное окно другого приложения, и если какое-то слово прокатит, то записывать это слово в good.txt и выходить из скрипта? Но тут не ясно, как ведёт то приложение при вводе в окно правильного и неправильно слова.



Окно авторизации(ввода пароля) находится в программе.
Код: AutoIt [Выделить]
$text1 = "Название окна"

Включаем программу "переборщик".
Автоматически активируется (уже открытое) окно программы.

Поле ввода пароля активируется командной нажатия клавиши "F7" (то есть открывается отдельно в этом же приложении (в центре экрана)). Все остальные окна в этом приложение блокируются, окно ввода пасса становится основным пока его не закроешь или не введешь вариант пароля(так что координаты ввода попросту не нужны).
Код: AutoIt [Выделить]
; Check if file opened for writing OK
    Send("{F7}") ;активирует окно ввода пароля
    Sleep(20)
    Send($command&"{ENTER}") ;ввод пароля из box.txt с последующим нажатием "ENTER"
    Sleep(20)


Вводится один вариант пароля(построчно) из файла box.txt.
Код: AutoIt [Выделить]
$sFilePath = @ScriptDir & "\box.txt" ;файл в папке со скриптом



Командой "ENTER" активируется введенный пароль.
Заметка: окно закрывается автоматически - при люом раскладе - верный вариант или не верный.
Заметка: ограничения(блокировщика) по кол-ву введенных вариантов нет.
Далее в таком же ритме снова "F7", "ввод пароля", "ENTER".

Цитировать
Как я понял, ты хочешь брать каждое слово из файла box.txt и вставлять в определенное окно другого приложения, и если какое-то слово прокатит, то записывать это слово в good.txt и выходить из скрипта?

Именно.

Проблема заключается в том, что подгрузки ни какой нет, и скрипт не может ни за что зацепиться в данном приложении.

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

Вот первоначальный вариант скрипта.
(нажмите для показа/скрытия)
« Последнее редактирование: Май 13, 2010, 17:31:05 от -BlackJack- »

Оффлайн kzru_hunter [?]

  • Осваивающий
  • **
  • Сообщений: 144
  • Репутация: 49
    • Награды
Цитировать
Просто в таком состоянии в каком сейчас этот скрипт находится, он открывает окно, вводит пароль, нажимает ввод, и даже если пароль подошел, это можно увидеть только если сидеть перед экраном.
Если можно увидеть на экране монитора, что пароль подошёл, то и AutoIt это может заметить. Если бы скрин выложил, где можно было бы увидеть то место, где написано, что пароль подошёл, то смог бы помочь, а так нет.

А так просто сделал, чтобы скрипт каждый раз брал пасс из box.txt и вставлял в окно другого приложения. При ручном выходе с помощью горячей клавиши записывается номер пасса по списку, на котором остановились, и при след. запуске скрипта пассы будут браться с того места, откуда в прошлый раз остановились.
Код: AutoIt [Выделить]
#include <file.au3>
#Include <Misc.au3>

; --- Блокирует повторный запуск скрипта --------
If _Singleton("MyProgram") = 0 Then Exit
; -----------------------------------------------

; Опустил авторизацию при запуске скрипта

HotKeySet("{ESC}", "Terminate")

$BoxFile = "box.txt"
$CountFile = "count.txt" ; файл, в котором будет хранится номер пароля из списка, на котором остановились в прошлый раз
;$GoodFile = "good.txt"

; -------------- Ждём окно другой программы, а потом активируем его --------
$Title1 = "Name Window"
WinWait($Title1)
If Not WinActive($Title1) Then WinActivate($Title1)
WinWaitActive($Title1)
; --------------------------------------------------------------------------

$BoxFile_Read = FileRead($BoxFile)
$CountFile_Read = FileRead($CountFile) ; читаем файл "count.txt"

; ------------ Выдаём сообщение, которое будет спрашивать сначала ли начать перебор или с последнего
$g_Count = 1
If IsInt($CountFile_Read) Then
    If $CountFile_Read > 1 Then
        $msg_ret = MsgBox(36,"","Продолжить перебор пароля?" & @CRLF & "Если нет, то перебор начнётся сначала")
        If $msg_ret = 6 Then $g_Count = StringStripWS($CountFile_Read,3)
    EndIf
EndIf

$array_lines = StringSplit($BoxFile_Read,@CRLF,1)
For $i = $g_Count To $array_lines[0] ; от 1 до количества строк в файле
    $pass = $array_lines[$i]

    Send("{F7}")
    Sleep(20)
    Send($pass & "{ENTER}")
    Sleep(20)

    $g_Count = $i
Next

Func Terminate()
    Local $hFile = FileOpen($CountFile,2)
    FileWrite($hFile,$g_Count+1)
    FileClose($hFile)
    Exit
EndFunc
 


Оффлайн -BlackJack- [?]

  • Новичок
  • *
  • Сообщений: 13

  • Автор темы
  • Репутация: 0
    • Награды
Цитировать
Просто в таком состоянии в каком сейчас этот скрипт находится, он открывает окно, вводит пароль, нажимает ввод, и даже если пароль подошел, это можно увидеть только если сидеть перед экраном.
Если можно увидеть на экране монитора, что пароль подошёл, то и AutoIt это может заметить. Если бы скрин выложил, где можно было бы увидеть то место, где написано, что пароль подошёл, то смог бы помочь, а так нет.

А так просто сделал, чтобы скрипт каждый раз брал пасс из box.txt и вставлял в окно другого приложения. При ручном выходе с помощью горячей клавиши записывается номер пасса по списку, на котором остановились, и при след. запуске скрипта пассы будут браться с того места, откуда в прошлый раз остановились.
(нажмите для показа/скрытия)

Проверил, но скрипт не работает, перебора не происходит.
Если есть возможность, вставьте скрипт сохранения перебранных вариантов в мой скрипт.

Оффлайн kzru_hunter [?]

  • Осваивающий
  • **
  • Сообщений: 144
  • Репутация: 49
    • Награды
Цитировать
Если есть возможность, вставьте скрипт сохранения перебранных вариантов в мой скрипт.
(нажмите для показа/скрытия)

Цитировать
Проверил, но скрипт не работает, перебора не происходит.
Скорее всего это из-за:
Код: AutoIt [Выделить]
    Send("{F7}")   
    Sleep(20)
    Send($pass & "{ENTER}")
    Sleep(20)
 

Нужно как-то так сделать:
Код: AutoIt [Выделить]
Send("{F7}")
    WinWaitActive("Титул окна для набора пароля")
    Sleep(20)
    Send($pass,1) ; также можно ClipPut($pass), а затем Send("^v") ) или с помощью ControlSetText
    Sleep(20)
    Send("{ENTER}")
    WinWaitNotActive("Титул окна для набора пароля")
    Sleep(20)


Русское сообщество AutoIt


Оффлайн -BlackJack- [?]

  • Новичок
  • *
  • Сообщений: 13

  • Автор темы
  • Репутация: 0
    • Награды
Цитата: kzru_hunter

(нажмите для показа/скрытия)

(нажмите для показа/скрытия)
[/spoiler]



kzru_hunter, спасибо большое за вашу помощь, вот это вариант рабочий. Перебор происходит, счетчик записывает перебранные варианты, последние пассы сохраняются(поменял лишь кол-во с 10 на 20).
Единственный скрипт не работает - перебор с последних вариантов.

Код: AutoIt [Выделить]
; ------------ Выдаём сообщение, которое будет спрашивать сначала ли начать перебор или продолжить с прошлого раза -------
If IsInt($CountFile_Read) Then
    If $CountFile_Read > 1 Then
        $msg_ret = MsgBox(36,"","Продолжить перебор пароля?" & @CRLF & "Если нет, то перебор начнётся сначала")
        If $msg_ret = 6 Then $g_Count = StringStripWS($CountFile_Read,3)
    EndIf
EndIf
;

« Последнее редактирование: Май 14, 2010, 14:55:52 от -BlackJack- »

Оффлайн kzru_hunter [?]

  • Осваивающий
  • **
  • Сообщений: 144
  • Репутация: 49
    • Награды
Я просто не тестил скрипт, когда писал, поэтому и ошибку допустил.
Вот надо как сделать:
Код: AutoIt [Выделить]
; ------------ Выдаём сообщение, которое будет спрашивать сначала ли начать перебор или продолжить с прошлого раза -------
If Int($CountFile_Read) > 1 Then
        $msg_ret = MsgBox(36,"","Продолжить перебор пароля?" & @CRLF & "Если нет, то перебор начнётся сначала")
        If $msg_ret = 6 Then $g_Count = Int($CountFile_Read)
    EndIf
EndIf
; ------------------------------------------------------------------------------------------------------------------------

Надеюсь, тут нет ошибки

Оффлайн -BlackJack- [?]

  • Новичок
  • *
  • Сообщений: 13

  • Автор темы
  • Репутация: 0
    • Награды
Да, тут снова была ошибка, не хватало строки, исправил.

Код: AutoIt [Выделить]
If  Int($CountFile_Read) Then
    If $CountFile_Read > 1 Then  ;предыдущая строка на которой остановился перебор.
        $msg_ret = MsgBox(36,"","Продолжить перебор пароля?" & @CRLF & "Если нет, то перебор начнётся сначала")
        If $msg_ret = 6 Then $g_Count = Int($CountFile_Read)
    EndIf
EndIf


Теперь все ок, огромное спс.

Русское сообщество AutoIt


 

Похожие темы

  Тема / Автор Ответов Последний ответ
5 Ответов
3987 Просмотров
Последний ответ Октябрь 14, 2011, 14:46:10
от Redline
2 Ответов
2238 Просмотров
Последний ответ Июнь 21, 2012, 21:38:49
от agikon
0 Ответов
2144 Просмотров
Последний ответ Март 17, 2013, 11:01:14
от bazanski
5 Ответов
2818 Просмотров
Последний ответ Август 28, 2013, 18:52:12
от nero0711
0 Ответов
1305 Просмотров
Последний ответ Май 31, 2015, 19:18:03
от Jameser
4 Ответов
1743 Просмотров
Последний ответ Декабрь 15, 2015, 09:23:33
от serg41
14 Ответов
2740 Просмотров
Последний ответ Октябрь 01, 2016, 17:29:20
от sem0709
5 Ответов
1726 Просмотров
Последний ответ Декабрь 09, 2016, 12:59:57
от Tosyk
0 Ответов
611 Просмотров
Последний ответ Февраль 28, 2017, 18:30:40
от [email protected]
11 Ответов
1093 Просмотров
Последний ответ Июль 06, 2017, 15:59:25
от ra4o