เคยอยากรู้ไหมว่าใครพิมพ์อะไรบ้าง แอบเก็บข้อมูลง่ายๆด้วย Key Logger!!!

Ada Kaminkure
2 min readMay 13, 2019

--

Photo by Kaur Kristjan on Unsplash

สวัสดีครับ ขึ้นหัวเรื่องมาซะน่ากลัวเลยครับ จริงๆไม่มีอะไรมาก วันนี้จะมาพาทุกท่านย้อนวันวาน สมัยวัยเยาว์ กับ Key Logger คิดว่าพวกเราที่โตมาในยุคปลายๆปี 1900 น่าจะต้องเคยเข้าร้านเกม เล่นเมออนไลน์สุดฮอตอย่าง Ragnarok online กันใช่ไหมครับ? (ดักแก่ 5555)

แต่สิ่งที่เรามักถูกเตือนกันมาเสมอเลยก็ คือ การถูกดักจับ Key หรือดักอะไรก็ตามที่เราพิมพ์ลงไปในเครื่องคอมพิวเตอร์ แน่นอนครับว่ารวมถึง Username และ Password ที่ใช้ในการเล่นเกมด้วย มันก็เลยมีช่วงที่โดนแฮกกันกระจายของหาย โดยเจ้าตัวเป็นคนทำเอง 5555+ มันก็สนุกดีเนอะครับ^^

แต่การกระทำแบบนี้อย่าเรียกว่าเป็นการ Hack เลยครับ อยากให้เรียกว่า Social Engineering มากกว่าเพราะ มันคือการหลอกล่อเหยื่อให้มันนั่งเล่นในเครื่องที่เราจัดเตรียมไว้ หรือแม้แต่หลอกให้เหยื่อเปิดโปรแกรมเหล่านี้ด้วยตนเองเลย^^

เอาล่ะครับ มาเข้าเรื่องกัน!

วันนี้ผมขอนำเสนอ PyKLogger ซึ่งเป็นโปรแกรมที่ผมเขียนขึ้นมาด้วย Python และ ความช่วยเหลือของ package ที่สามารถทำให้เราทำการควบคุม Mouse และ Keyboard ได้ด้วยปลายนิ้วสัมผัส!
(PyKLogger ผมยังไม่ได้ทำเป็น package ขึ้น pip นะครับ)

เอาล่ะมาเริ่มกันเลย

ขออธิบายแผนก่อนนะครับ

PyKLogger จะถูกเปิดเอาไว้แล้วจะดักจับการกดคีย์ (key press) จากผู้ใช้ และนำไปบันทึกลงบน disk ซึ่งผมต้องการให้เก็บข้อมูลแบบวันต่อวัน นั่นคือใน 1 ปี เราก็จะมี 365 ไฟล์ กันไปเลยยยย!

Step 1: Installation

Ok สิ่งเดียวเลยที่เราต้องการ คือ Pynput ไม่ได้พิมพ์ผิดนะ ชื่อนี้จริงๆ
หน้าที่ของ Pynput คือ ทำหน้าที่เป็น APIs ให้เราสามารถควบคุม mouse, keyboard ได้แบบง่ายๆไม่ว่าจะ Controlling หรือ Monitoring ในเคยของพวกเรา เราจะทำการ Monitoring กันครับ

(อ่านเพิ่มเติมได้ที่ https://pynput.readthedocs.io/en/latest/)

pip install pynput

Step 2: Write Down, and Show me ya Code!

ขั้นตอนนี้เราก็จะเริ่มมาโชว์ของกันเป็น Programmer ก็ต้องเขียนโค้ดงั้นมาลุยกันครับบบบ

ในโปรแกรมนี้แบ่งออกเป็น 5 ส่วนง่ายๆดังนี้ครับ

  1. lines 5–8, Importing Part
    ส่วนนี้ผมคัดเลือก import มาในส่วนที่ผมต้องการใช้จริงๆมาครับ ก็จะมี…
    - os ที่ใช้ในการจัดการ path ให้เนียนที่สุด
    - datetime ผมเอามา get วันปัจจุบัน โดยผมไม่ได้สนใจเวลานะ
    - pynput พระเอกของงาน หยิบ Key และ Listener มาครับ
  2. lines 10–12, Initial Part
    จุดนี้ผมเตรียมสิ่งที่ต้องการไว้ก่อนเช่น file path ต่างๆครับ และที่สำคัญชื่อไฟล์ ถูกกำหนดจากส่วนนี้ก่อนครับ
  3. lines 14–42, Function Part
    มีทั้งหมดด้วยกัน 3 functions ครับ คือ
    - on_press(key) ทำงานทันทีเมื่อมีการคีย์ใดๆ ก็ตาม
    - on_release(key) ทำงานทันทีเมื่อมีการปล่อยคีย์
    - main() ฟังก์ชั่นหลักในการรันโปรแกรมนี้ครับ

หลักการทำงานเป็นแบบนี้ครับ

อยากให้ดูใน main() ก่อนครับ ก็จะพบว่า มีการเรียก Listener จาก pynput มาใช้งานซึ่งเจ้าตัวนี้เนี่ย ทำหน้าที่ในการดักฟังเฝ้ารอ การคีย์ของผู้ใช้งาน ซึ่งสิ่งที่เราต้องเซตให้มันทำงานได้แบบที่เราต้องการ เนี่ยมีอยู่ 2 ส่วนครับ คือ parameters on_press, และ on_release ครับ คุ้นๆใช่ไหมล่ะครับบบบ

ถูกต้องแล้วครับ! เราจะนำ functions ที่เราเขียนไว้มา plug เข้าในส่วนนี้ครับ เพื่อให้ Listener ทำงานให้เป็นไปตามความต้องการของเราครับผม ^^

on_press(key)

ฟังก์ชั่นของเรานี้จะทำงานเมื่อมีการกดคีย์ ครับถ้าถามว่าทำอะไรบ้างก็ต้องมาดูกันครับ

- lines ที่ 15
ผมเปิด with statement ขึ้นมาเพื่อให้มีการจัด block การทำงานในการเปิดไฟล์ขึ้นมาเพื่อที่เราจะบันทึก log ลงไปครับ

- lines 16–30
ในส่วนนี้เราดัก Exception เอาไว้ครับเพราะ keys ที่เรามีแบ่งออกเป็น 2 แบบครับ คือ Alphabetic keys และ Special Keys ครับดังนั้นแล้วเมื่อเรา กด Special Keys เมื่อไหร่ มันจะเกิด AttributeError ทันทีทำให้เราต้อง rise exception เอาไว้คร้าบบบ

เราผู้ใช้กด Alphabetic keys ก็จะทำการ write ลงไปบน log file ในทันทีครับ แต่ถ้าหากเป็น Special keys แล้วนั้น ผมเลือกในการจัด format มันนิดหน่อยครับ เช่น เมื่อกด Enter ก็บันทึกการ Enter จริงๆ ลงบน log file เพื่อความง่ายในการอ่านไฟล์ และนำไปใช้ในอนาคตครับ

on_release(key)

สำหรับฟังก์ชั่นนี้ตอนนี้ไม่ได้มีอะไรมากไปกว่า การแสดงข้อความออกทางหน้าจอเพื่อให้ผู้ใช้ ทราบเฉยๆว่ามีการปล่อยคีย์ และจุดสนุกก็คือ ผมเช็คเอาไว้ว่าถ้าหากมีการปล่อย Esc key จะส่งผลให้โปรแกรมปิดตัวลงในทันทีคร้าบบบ

จบแล้วคร้าบบบ ที่เหลือผมอยากให้ทุกท่านลอง clone PyKLogger นี้ไปลองเล่นกันดูนะคร้าบบบ อยากแนะนำปรับปรุงให้มันทำอะไรได้ มากขึ้นกว่านี้ก็เปิด issues แนะนำกันมาได้นะคร้าบบบบ

--

--

Ada Kaminkure
Ada Kaminkure

Written by Ada Kaminkure

Indie Game Dev, Software Engineer, Teacher, and Self-Taught Mathematician

No responses yet