Jan 5 2009

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

Category: .NET | Toolsm3rLinEz @ 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: , , , , , , ,

Comments

1.
TAP TAP says:

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

2.
m3rlinez m3rlinez says:

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

3.
ijemmy ijemmy says:

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

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

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

4.
TAP TAP says:

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

5.
m3rlinez m3rlinez says:

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

6.
TAP TAP says:

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

7.
HyBRiD@KnigHT HyBRiD@KnigHT says:

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

8.
teerapap teerapap says:

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

9.
มะเขียวป้อม มะเขียวป้อม says:

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

10.
โบมุ โบมุ โบมุ โบมุ says:

^ _ ^

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

11.
m3rlinez m3rlinez says:

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

Add comment


(Will show your Gravatar icon)

biuquote
  • Comment
  • Preview
Loading