CUAuth: ลอกอินเน็ตเวิร์กจุฬาอัตโนมัติ

by m3rLinEz 5. January 2009 20:36

อันนี้เป็นผลงานร่วมระหว่างผมกับน้องบุ๊ค (@hybridknight) นะครับ จริงๆมีความคิดเรื่องแนวๆนี้ผ่านเข้ามาในหัวเรื่อยๆบ้างตั้งแต่ตอนเรียนวิชาเกมแล้วขี้เกียดลอกอิน เพราะว่าบางทีก็พิมพ์รหัสนิสิตผิด พิมพ์เกินบ้าง ขาดบ้าง บางทีก็พิมพ์ password ตัวเองลงไปผิดช่อง คนอื่นมาเห็นก็แย่เลย บางทีพิมพ์ครบหมดก็ลืมกดยอมรับข้อตกลงอีก ..'' ก็เลยเป็นเรื่องที่ ... annoying พอสมควรครับ

ไอเดียเริ่มต้นคงอธิบายได้ด้วย Conversation ชุดนี้

ปัญหาอย่างเดียวของการลอกอินอัตโนมัติก็คือเจ้า "Captcha" นี่เอง  แต่เนื่องจาก captcha ที่เราเจอในเคสนี้ยังไม่หนักหนาสาหัสถึงขั้นจะแกะไม่ได้ครับ มีลักษณะคร่าวๆดังนี้

  • ประกอบด้วยสีมากมาย
  • มีเส้นพาดไปพาดมามากมายในฉากหลัง
  • แต่ละตัวอักษรหมุนเอียงไปในทิศทวนเข็มนาฬิกา (เท่านั้น) ด้วยองศาไม่เท่ากัน

ก็เลยได้ไอเดียที่ว่าจะอ่านตัวอักษรในภาพได้ต้องทำดังต่อไปนี้

แยกเฉพาะตัวอักษรออกมาก่อน ทำโดยการแยกส่วนของภาพที่มีสีของตัวอักษรเท่านั้นออกมา ทำได้โดยการวิเคราะห์ Histogram หากสังเกตดูดีๆก็จะพบว่า สีของตัวอักษรนั้นจะเป็นสีที่ครอบครองพื้นที่ในรูปมากเป็นอันดับสองเสมอ (อันดับหนึ่งคือสี Background) ก็สามารถแยกออกมาได้โดยง่าย

ทำ OCR บนตัวอักษรที่แยกออกมา เลิกคิดเรื่องเขียนเองไปได้เลย หลังจากควานหา library ดูซักพักก็พบ  tesseract-ocr ที่ดูแลอยู่โดยพี่ Google แต่เนื่องจากตัว library มันเป็น C/C++ ดังนั้นถ้าจะเอามาใช้กับ .NET ก็จะวุ่นวายพอสมควร จะให้ไปเขียน C/C++ ก็คงมากไปสำหรับโปรเจคเขียนเล่นเอามัน ควานไปเรื่อยๆเจอคนใจดีทำ wrapper ไว้ให้ คือ Tessnet .NET Tesseract wrapper ทำให้ OCR ง่ายไปเลย (โค้ดตัวอย่างจากเว็บ)

Bitmap image = new Bitmap("eurotext.tif");


tessnet2.Tesseract ocr = new tessnet2.Tesseract();


ocr.SetVariable("tessedit_char_whitelist", "0123456789"); // If digit only


ocr.Init("fra", false); // To use correct tessdata


List<tessnet2.Word> result = ocr.DoOCR(image, Rectangle.Empty);


foreach (tessnet2.Word word in result)


    Console.WriteLine("{0} : {1}", word.Confidence, word.Text);

หลังจากได้ทุกอย่างมาครบ ก็เริ่มทำโปรเจค มีการใช้คลาสพวก HttpWebRequest พวกนี้นิดหน่อยตามธรรมชาติของโปรแกรมลักษณะนี้

ผมได้โปรแกรมตั้งต้นหน้าตาเป็นแบบนี้

และหลังผ่านการปรับปรุงและเพิ่ม Feature เช่นแก้ส่วนของ Keep-Alive, จัดโปรแกรมลง Tray, และอื่นๆ โดยคุณน้องบุ๊ค @hybridknight ก็ได้อะไรประมาณนี้ออกมา http://twitpic.com/xmfe

โปรเจคนี้ทำเล่นเอามัน และ communicate ผ่าน Twitter ตลอด (จนเพื่อนบางคนอาจจะรำคาญ - -''a) ไม่มีจุดประสงค์ใดแอบแฝง

ตัวโปรแกรมและซอร์สโค้ด จะอัญเชิญเวอร์ชันล่าสุดจากน้องมาโปะให้เร็วๆนี้นะครับ และโปรแกรมนี้เพื่อการศึกษาเท่านั้นนะ :P

Tags: , , , , , , , Category: .NET | Tools

Comments (12) -

TAP
TAP
1/5/2009 9:23:43 PM #

ขอแบบ firefox add-on ได้ป่ะ

m3rlinez
m3rlinez
1/5/2009 9:24:47 PM #

ไฟร์ฟอกซ์คงตายตอนทำ OCR Smile

ijemmy
ijemmy
1/5/2009 10:11:45 PM #

Firefox ใช้ C++ ได้นะ

คอมไพล์แล้วเชื่อมผ่าน XPCOM Interface

แต่วุ่นวายมาก ถ้าจะทำขอเตือนไว้ก่อน

TAP
TAP
1/5/2009 10:54:47 PM #

OCR ผ่าน web service ไงนาย

m3rlinez
m3rlinez
1/5/2009 11:16:49 PM #

TAP ใช้ Web Service ไม่ได้ เพราะว่ายังต่อเน็ตไม่ได้ Smile

TAP
TAP
1/5/2009 11:37:28 PM #

เออ หว่ะ โง่เลย

HyBRiD@KnigHT
HyBRiD@KnigHT
1/6/2009 1:23:20 AM #

อับบล็อกแล้วนะครับ

teerapap
teerapap
1/12/2009 1:35:09 AM #

เอ่า ทำออกมาแล้วเรอะ หะหะ ดูดีว่ะ
ตอนได้ยินตอนแรก ไม่นึกว่าจะ implement แนวนี้ แต่คิดๆดู มันก็โอเคนี่หว่า

มะเขียวป้อม
มะเขียวป้อม
1/18/2009 10:40:30 PM #

สุดยิดไปเลยนาย !!

โบมุ โบมุ
โบมุ โบมุ
1/28/2009 2:04:12 PM #

^ _ ^

นึกอยู่แล้วว่าต้องมีคนทำ  ยังไงฝากลองดูเรื่อง Wording ของ GUI ด้วยนะ มีพี่ๆเขาฝากมา

m3rlinez
m3rlinez
1/28/2009 3:40:01 PM #

โอ้สสส พี่โบมุมาถึงนี่เลย o__o!

สุกิจ
สุกิจ
4/21/2010 12:38:52 PM #

อยากได้ code มาศึกษาอ่ะครับ

เผอิญว่า ที่มหาวิทยาลัย ใช้ระบบล็อกอินเน็ตเหมือนกันอะครับ

คือเขาใช้ https แล้วก็ใช้แบบฟอร์มส่งค่าชนิด post

ดังโค๊ดเลยครับ

<HTML>
<HEAD>
<TITLE>Authentication Proxy Login Page</TITLE>
</HEAD>
<BODY>

<H1>Please Login with Email or Modem Account  <BR><BR>  HTTPS

Authentication<BR><BR><p>


<FORM name="log" method=post action="https://64.233.181.104:443">

<input type=hidden name=au_pxytimetag value="1869088442">

Username: <input type=text name=uname ><BR><BR>

Password: <input type=password name=pwd><BR><BR>

<input type=submit name=ok>

</H1>

</FORM>

</BODY>

</HTML>


อยากทราบว่า เวลาเขียน c# จะเขียนยังไงอ่ะครับ แบบว่า...พึ่งเริ่มหัดเขียนอ่ะครับ

ขอบคุณมากๆเลยครับ

Add comment




biuquote
  • Comment
  • Preview
Loading






Most comments

khimkhim khimkhim
1 comments
weaw weaw
1 comments
domehuhu domehuhu
1 comments

RecentComments

Comment RSS