ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π½ΠΈΠ΅ ΠΊΠ°ΠΏΡΠΈ Π² ΠΈΠ³ΡΠΎΠ²ΠΎΠΌ ΡΠ΅ΡΠ²ΠΈΡΠ΅ 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
)
ΠΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°, Π² sortedChars
Π²ΡΠ΅ 3 ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π»ΠΈ ΠΎΠ΄Π½ΠΈ ΠΈ ΡΠ΅ ΠΆΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ.
ΠΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ (ΠΊΠ»ΡΡ time
) Π·Π°Π½ΡΠ»ΠΎ 0.9 ΡΠ΅ΠΊ, ΡΠ΅ΠΌ Π±ΠΎΠ»ΡΡΠ΅ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΉ, ΡΠ΅ΠΌ Π±ΠΎΠ»ΡΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ ΡΠ°ΡΠΏΠΎΠ·Π½ΠΎΠ²Π°Π½ΠΈΠ΅.
Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΠΊΠ°Π·Π°Π½Π° ΠΎΠ±ΡΡΠ΅Π½Π½Π°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ, Π΅ΠΉ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ 1 ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ Π΄Π»Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΡΠΏΠΎΠ·Π½ΠΎΠ²Π°Π½ΠΈΡ, Π½ΠΎ ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΡΠ΅ΡΡΡ, Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ»ΡΡΠ°ΡΡ Π±ΡΠ²Π°ΡΡ Π°ΡΡΠ΅ΡΠ°ΠΊΡΡ, ΠΊΠΎΠ³Π΄Π° Π±ΡΠΊΠ²Π° Π·Π°Π»ΠΈΡΠ° ΠΈΠ»ΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ Π΅Π΅ Π½Π΅ Π²ΠΈΠ΄Π½ΠΎ, Π»ΠΈΠ±ΠΎ Π²ΠΈΠ΄Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΠΉ ΠΊΡΡΠΎΠΊ, Π² ΡΠ°ΠΊΠΈΡ ΡΠ»ΡΡΠ°ΡΡ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ Π΅ΡΡΡ ΠΏΠΎΠ³ΡΠ΅ΡΠ½ΠΎΡΡΠΈ.
ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅! ΠΡΠΎΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΎΠ±ΡΡΠ΅Π½Π½ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ, ΠΏΠΎΡΡΠΎΠΌΡ Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΡΠΎΠ±ΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈ ΠΎΠ±ΡΡΠΈΡΡ Π΅Π΅. Π― Π»ΠΈΡΡ ΠΏΠΎΠΊΠ°Π·Π°Π», ΡΡΠΎ ΡΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ. ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΏΠΎ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π·Π΄Π΅ΡΡ.
ΠΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ eng
:
$cracked = (new Crack($fileOrUrl))
->temp(__DIR__ . '/storage')
->model('eng')
->iterations(10)
->resolve(true);
ΠΠ»Ρ ΠΌΠΎΠ΄Π΅Π»ΠΈ eng
Π½ΡΠΆΠ½ΠΎ Π±ΠΎΠ»ΡΡΠ΅ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΉ ΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, Π½ΠΎ ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π½ΠΈΡ Π² Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΆΠ΅Π»Π°ΡΡ Π»ΡΡΡΠ΅Π³ΠΎ.
- Π Π΅ΡΠ°ΠΊΡΠΎΡΠΈΠ½Π³ ΠΊΠΎΠ΄Π°
- ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅