Skip to content

chipslays/cracker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

36 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸͺ Cracker

АвтоматичСскоС распознаваниС ΠΊΠ°ΠΏΡ‡ΠΈ Π² ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΌ сСрвисС Steam.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°

ΠŸΡ€ΠΈ написании Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Steam Client, я сталкивался с Π²Π²ΠΎΠ΄ΠΎΠΌ ΠΊΠ°ΠΏΡ‡ΠΈ. Π’ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ постоянный Π²Π²ΠΎΠ΄ ΠΊΠ°ΠΏΡ‡ΠΈ стал Π½Π°Π΄ΠΎΠ΅Π΄Π°Ρ‚ΡŒ, поэтому Π±Ρ‹Π»ΠΎ принято Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ распознованиС ΠΊΠ°ΠΏΡ‡ΠΈ.

РСшСниС

Для распознования ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Tesseract OCR + ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ обучСнная модСль (языковой Ρ„Π°ΠΉΠ») Π½Π° основС 5000 Ρ€Π°Π·Π½Ρ‹Ρ… ΠΊΠ°ΠΏΡ‡.

ΠžΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ сдСлано Π½Π° основС этого рСпозитория.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ распознования ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ: ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ссылка Π½Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ с ΠΊΠ°ΠΏΡ‡Π΅ΠΉ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ тСкст Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΡƒΠΌΠΈΡ€Π°Π΅Ρ‚. Но тСкст Π½Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅ всСгда Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅, мСняСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ…Π°ΠΎΡ‚ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ Π±ΡƒΠΊΠ² ΠΈ ΡˆΡƒΠΌΠ°. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½Π° основС этого, задаСтся количСство ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ распознования, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 10 ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ, послС окончания Ρ†ΠΈΠΊΠ»Π°, Π²Ρ‹Π±ΠΈΡ€Π°ΡŽΡ‚ΡΡ Ρ‚Π΅ символы ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Π»ΠΈΡΡŒ Ρ‡Π°Ρ‰Π΅ всСго.

Зависимости

Imagick

Tesseract OCR

Trained model (for better recognition)

Установка

$ composer require chipslays/cracker

ИспользованиС

use Cracker\Crack;

require 'vendor/autoload.php';


/**
 * МоТно ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» ΠΈΠ»ΠΈ ссылку.
 * НапримСр:
 *      https://steamcommunity.com/public/captcha.php?gid=387475048XXXXXXXXXXXXXXXX
 *      images/captcha.png
 */
$cracked = (new Crack('https://raw.githubusercontent.com/chipslays/cracker/master/.github/captcha.png'))
    ->temp(__DIR__ . '/storage') // ΠΏΠ°ΠΏΠΊΠ° для Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²
    ->tessdata(__DIR__) // ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ ΠΏΡƒΡ‚ΡŒ Π³Π΄Π΅ Ρ…Ρ€Π°Π½ΡΡ‚ΡŒΡΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ
    ->model('steam') // ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ свою модСль
    ->iterations(1) // количСство ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ
    ->resolve(true); // true - Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ массив

print_r($cracked);

/** output */
Array
(
    [sortedChars] => Array
        (
            [0] => Array
                (
                    [M] => 1
                )

            [1] => Array
                (
                    [J] => 1
                )

            [2] => Array
                (
                    [X] => 1
                )

            [3] => Array
                (
                    [N] => 1
                )

            [4] => Array
                (
                    [P] => 1
                )

            [5] => Array
                (
                    [9] => 1
                )

        )

    [mostUsedChars] => Array
        (
            [0] => M
            [1] => J
            [2] => X
            [3] => N
            [4] => P
            [5] => 9
        )

    [captcha] => MJXNP9
    [time] => 0.9768
)

ΠšΠ°ΠΏΡ‡Π°: MJXNP9

Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°, Π² sortedChars всС 3 ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ распознали ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ символы.

ВрСмя Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ (ΠΊΠ»ΡŽΡ‡ time) заняло 0.9 сСк, Ρ‡Π΅ΠΌ большС ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ, Ρ‚Π΅ΠΌ большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ распознованиС.

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΡƒΠΊΠ°Π·Π°Π½Π° обучСнная модСль, Π΅ΠΉ достаточно 1 ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ распознования, Π½ΠΎ Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ модифицируСтся, Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях Π±Ρ‹Π²Π°ΡŽΡ‚ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚Ρ‹, ΠΊΠΎΠ³Π΄Π° Π±ΡƒΠΊΠ²Π° Π·Π°Π»ΠΈΡ‚Π° ΠΈΠ»ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚ Π΅Π΅ Π½Π΅ Π²ΠΈΠ΄Π½ΠΎ, Π»ΠΈΠ±ΠΎ Π²ΠΈΠ΄Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ малСнький кусок, Π² Ρ‚Π°ΠΊΠΈΡ… случаях ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ³Ρ€Π΅ΡˆΠ½ΠΎΡΡ‚ΠΈ.

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅! Π­Ρ‚ΠΎΡ‚ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Π½Π΅ содСрТит ΠΎΠ±ΡƒΡ‡Π΅Π½Π½ΡƒΡŽ модСль, поэтому Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΎΠ±ΡƒΡ‡ΠΈΡ‚ΡŒ Π΅Π΅. Π― лишь ΠΏΠΎΠΊΠ°Π·Π°Π», Ρ‡Ρ‚ΠΎ это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΏΠΎ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΡŽ находится здСсь.

МоТно ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ модСль eng:

$cracked = (new Crack($fileOrUrl))
    ->temp(__DIR__ . '/storage')
    ->model('eng')
    ->iterations(10)
    ->resolve(true);

Для ΠΌΠΎΠ΄Π΅Π»ΠΈ eng Π½ΡƒΠΆΠ½ΠΎ большС ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π½ΠΎ качСство распознавания Π² любом случаС оставляСт ΠΆΠ΅Π»Π°Ρ‚ΡŒ Π»ΡƒΡ‡ΡˆΠ΅Π³ΠΎ.

TODO

  • Π Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΊΠΎΠ΄Π°
  • Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

About

πŸͺ Crack, crack aaand crack it!

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages