شکستن کپچا

تغییرات پروژه از ابتدا تا تاریخ 1392/12/24
یکی از معمول‌ترین شکل کپچا به صورت تصویر است. در این نوع کپچا معمولا حروف و اعدادی انگلیسی به شکلی کنار هم قرار می‌گیرند و از کاربر پرسیده می‌شود که بگوید که این حروف و اعداد چیست. معمولا مسئولین این سایت‌ها فکر می‌کنند که ربات‌ها یا برنامه‌های کامپیوتری نمی‌توانند پاسخ این سؤالات را بدهند.

مواقع زیادی هم رخ می‌دهد که این کپچاها به غیر از اعصاب خوردی چیزی برای ما ندارد.

![کپچای گلستان](http://bayanbox.ir/id/4595269189662952626?view)

در این پروژه ما می‌خواهیم که یک افزونه برای مروگر بنویسیم که یک کپچا را بکشند و به صورت خودکار آن را حل نماید.

برای مثال ساده‌تر می‌توانید از کپچای [سامانه آموزش دانشگاه شریف](http://edu.sharif.edu) استفاده کنید.

![کپچای شریف](http://bayanbox.ir/id/7003945522720661269?view)


# مقدمه


کپچا در تعریفی ساده  سامانهٔ امنیتی و روند ارزیابی است که بااستفاده از ازمون تورینگ  برای جلوگیری از برخی حمله‌های خرابکارانهٔ ربات‌های اینترنتی به‌کار می‌رود. این روند می‌تواند مشخص کند که مراجعه کنندگان به یک وب‌گاه و یا سایر خدمات آنلاین انسان هستند یا کامپیوتر.

 بدین منظور برنامهٔ کپچا آزمون‌هایی را تولید می‌کند که:


1. انسان بتواند به راحتی و در طول چند ثانیه به آن پاسخ دهد و دراین زمینه به مشکل برنخورد.
2. کامپیوترهای فعلی ، نباید قادر باشند به چنین سوالاتی پاسخ دهند.

هر کاربری که آنرا درست حل کند، انسان فرض می‌شود

کپچا گاهی «معکوس تست تورینگ» نامیده می‌شود. چون تست تورینگ توسط انسان برگزار می‌شود و هدفش تشخیص ماشین است اما کپچا توسط ماشین برگزار می‌شود و هدفش تشخیص انسان است.


#روش پیشنهادی

1. حذف درهم و برهمی پس زمینه ، به عنوان مثال با فیلتر کردن  رنگها  و تشخیص دادن  خطوط نازک
در ابتدا باید نموداری  از رنگها در تصویر را مشخص کنیم ،این کار با گرفتن تمام پیکسل ها وگروه بندی انها انجام میشود 
مثلا پس زمینه  سفید ،خطوط نویز خاکستری ،متن قرمز خواهد شد

2. تقسیم بندی ، یعنی تقسیم تصویر به قطعات حاوی یک حرف
با پردازش افقی در طول تصویر زوج مرتبی از موقعیتی که هر حرف شروع و تمام شده میتوان به دست اورد
 
3. تشخیص دادن حرف هر بخش
 در حال حاضر مجموعه ای از حروف اماده برای تشخیص داریم ،با به  کارگیری از الگوریتم های شبکه عصبی میتوان حروف را مشخص کرد
در این مرحله  نیاز به اطلاعات جامع و کاملی دارد که در هنگام اموزش  باید تکمیل شده باشد 



مرحله اول به طور معمول بسیار اسان بوده و به طور خودکار انجام میشود 
در مرحله سوم با استفاده از الگوریتم شبکه های عصبی به درصد خطای کمتری نسبت به انسان میرسیم 
ولی در مرحله دوم هنوزم انسان بهتر است زیرا اگر درهمریختگی های پس زمینه متشکل ازاشکال متشابه باحروف باشد 
این اشکال وحروف توسط این درهم و برهمی متصل شده  یا گاهی به اشتباه  در هر تصویر 2 حرف تقسیم بندی می شود
تقسیم بندی  این نوع کپچا با نرم افزار های فعلی غیر ممکن است .
از این رو برای بهبود عملکرد  باید بر این بخش تمرکز کرد



اما با اثبات این موضوع که تشخیص کاراکتر ها اسیب پذیر هستند ،برخی محققان جایگزین هایی مانند تشخیص تصویر را پیشنهاد داده اند
این محققان تشخیص تصویر را چالش برانگیزتر میدانند زیرا محدود به کاراکتر و رقم در الفبای انگلیسی نیست


# کارهای مرتبط

. پروژه Mori G. که به چاپ مقاله ای در* IEEE CVPR'03* منجر شد.در این مقاله یک روش برای شکستن یکی از مشهورترین کپچا ها پرداخته اند و تاحدود 92% موفق به شکست کپچا شده اند:


[ Breaking a Visual CAPTCHA](http://www2.cs.sfu.ca/~mori/research/gimpy/)

. پروژه PWNtcha  نیز پیشرفت زیادی در این زمینه دارد :

[ it stands for “Pretend We’re Not a Turning Computer but a Human Antagonist” ](http://caca.zoy.org/wiki/PWNtcha                       
)

. [Captcha Solver as a Service](http://deathbycaptcha.com/)

.[An Anti-SMS-Spam Using CAPTCHA](http://ieeexplore.ieee.org/xpl/login.jsp?tp=&arnumber=4609698&url=http%3A%2F%2Fieeexplore.ieee.org%2Fxpls%2Fabs_all.jsp%3Farnumber%3D4609698)

. [decoding-captcha](http://www.boyter.org/decoding-captchas/   )

# آزمایش‌ها 

خوشبختانه بسیاری از کپچا ضعیف هستند و با تمیز کردن ، حذف خطوط درهم و برهم و به کمک OCR های ساده حل شده اند
![captcha](http://webscraping.com/static/img/blog/captcha/original2.png)

با  گذشتن از مرحله اول 

![clean captcha](http://webscraping.com/static/img/blog/captcha/threshold2.png)

اکنون نتایج حاصل را برای استخراج متن به OCR داده میشود
در اینجا از 3 ابزار OCR برای مقایسه استفاده شده :

Tesseract :hirbz

Gocr:_i_bz

Ocrad:hi_bL

چند نمونه دیگر:

![clean captcha1](http://webscraping.com/static/img/blog/captcha/original1.png)


Tesseract :7rrq5

Gocr :7rr95

Ocrad :7rrgs


![clean captcha2](http://webscraping.com/static/img/blog/captcha/original3.png)


Tesseract :izi3b

Gocr :izi3b

Ocrad :iLi3b

در این ازمایش گرفتن نتیجه 100% ملاک نیست زیرا مردم واقعی هم گاهی اشتباه میکنند
در این ازمایش ، Tesseract فقط g با q  اشتباه کرد  و Gocr به  جای g  ,عدد 9 را چاپ کرده بود که قابل درک بود
ولی  Ocrad هیچ جواب درستی نداده است 

#اینده کپچا 
[The Future of CAPTCHA ](http://mollom.com/blog/the-future-of-captchas)
# مراجع

J Yan and A S El Ahmad. “Breaking Visual CAPTCHAs with Naïve Pattern Recognition Algorithms”, in IEEE 
Conference Proc. of the 23rd Annual Computer Security Applications Conference (ACSAC’07) 

K Chellapilla, and P Simard, "Using Machine Learning to Break Visual Human Interaction Proofs (HIPs)," Advances in Neural Information Processing Systems 17, Neural Information Processing Systems (NIPS), MIT Press, 2004.

Akshay Mittal , Ankit Kumar ,Recognising Text from Captcha 

Kumar Chellapilla Patrice Y. Simard “Using Machine Learning to Break Visual 

Mori G,Malik J (2003),"Recognizing Objects in Adversarial Clutter:Breaking a Visual CAPTCHA," proc. of the computer Vision 
and pattern Recognition (CVPR )Conference,IEEE Computer Society, vol.l,June 18-20,2003

Chandavale, A.A., Sapkal, A.M., Jalnekar, R.M.: Algorithm To Break Visual CAPTCHA. In: Second International Conference on Emerging Trends in Engineering and Technology, ICETET 2009 (2009)

Shirali-Shahreza, M. ; Sharif Univ. of Technol., Tehran ; Shirali-Shahreza, S., Question-Based CAPTCHA, Conference on Computational Intelligence and Multimedia Applications 

  Paul Baecher,  Niklas Büscher,  Marc Fischlin,  Benjamin Milde , Breaking reCAPTCHA: A Holistic Approach via Shape Recognition

Haribabu, K. ; Comput. Sci. Group, Birla Inst. of Technol. & Sci., Pilani, India ; Arora, D. ; Kothari, B. ; Hota, C.Detecting Sybils in Peer-to-Peer Overlays Using Neural Networks and CAPTCHAs

# پیوندهای مفید

+ [Nucaptcha](http://www.nucaptcha.com/)

+ [Vicarious](http://vimeo.com/77431982)

+ [video  ](https://developers.google.com/recaptcha/)

+ [کتابخانه اپن‌سی‌وی](http://opencv.org)
+ [اپن‌سی‌وی در پایتون](http://docs.opencv.org/trunk/doc/py_tutorials/py_tutorials.html)
+ [بینایی کامپیوتری در جاوا اسکریپت](http://inspirit.github.io/jsfeat/)
+[شبکه‌های عصبی در جاوا اسکریپت](https://github.com/harthur/brain)
+ [شبکه‌های عصبی کانلوشنال در جاوا اسکریپت](https://github.com/karpathy/convnetjs)
+ [یک منبع خوب](http://stackoverflow.com/questions/9413216/simple-digit-recognition-ocr-in-opencv-python)
+ [پیاده‌سازی svm در جاوا اسکریپت](https://github.com/karpathy/svmjs)
+ [پایگاه داده نمونه](http://www.cs.cmu.edu/~guestrin/Class/10701/projects.html#image)