윈도우즈의 후킹(hook)을 리눅스에서는 어떻게?

yshkorea의 이미지

윈도우즈에서 이벤트 훅, 키보드훅 등을 해봤는데요
리눅스에서는 어떤방식으로 해야하는건지 잘 모르겠습니다.
리눅스 관련 서적보면 그런내용은 다루지 않는것 같고요..
사이트 찾아봐도 별다른 내용은 없습니다.

리눅스에서 후킹 어떻게 진행해야 하는겁니까?
(콘솔 환경입니다)

혹은 관련서적 있으면 추천 바랍니다.

keedi의 이미지

gui 라이브러리마다 다를거에요.
어느 환경에서 작업하실지 부터 결정하셔야겠죠.
예를들면 gtk 기반인지 qt 기반인지... :-)

---------------------------
Smashing Watermelons~!!
Whatever Nevermind~!!

Keedi Kim

----
use perl;

Keedi Kim

yshkorea의 이미지

일반적인 리눅스 환경 의 콘솔에서 진행할겁니다
GUI는 들어가지 않고요..

예를들어 root에서 후킹프로그램 돌려놓고
aa 란 계정에서 작업한것을 모니터링 가능
bb 란 계정에서 작업한것을 모니터링 가능

===================
"yshkorea" 죽을만큼 노력했는가? 그만큼 간절했는가?

"yshkorea" 죽을만큼 노력했는가? 그만큼 간절했는가?

semmal의 이미지

후킹이란 이벤트 핸들러 기반에서 이벤트를 가로채서 변환하는 등의 행동을 말합니다.
당연히 쉘이나 시스템 기반에서는 이런 이벤트 메커니즘이 없구요. 그건 윈도즈라도 GUI 띄우기전의 command.com/cmd.exe에서의 작업역시 이벤트가 없기때문에 후킹할 수 없습니다.
yshkorea님이 쉘이나 그와 비슷한 프로그램을 짜야 원하는 일을 할 수 있을 것 같군요.
------------------------------
How many legs does a dog have?

------------------------------
How many legs does a dog have?

yshkorea의 이미지

그렇다면 콘솔에서 키보드 누르는 것 탐지하려면(키로거) 어찌 해야하는거죠?
혹은 콘솔 화면에 출력되는 데이터는 어떻게 잡아낼수있나요?

아 어렵네요...윈도우만 하다가..ㅜ.ㅜ

===============================
"yshkorea" 죽을만큼 노력했는가? 그만큼 간절했는가?

"yshkorea" 죽을만큼 노력했는가? 그만큼 간절했는가?

Hyun의 이미지

X를 띄우지 않은 까만 콘솔화면에서 키보드 등의 이벤트(커널내부에서는 이벤트로 처리하죠)를 가로채려면... 디바이스 드라이버를 짜야하지 안을까 합니다. 현재 PC에 달린 키보드, 마우스 등의 이벤트를 모두 볼 수 있을껍니다.
어플리케이션에서 /dev/input/* 등의 노드를 읽어보는걸로도 모니터링은 가능하지 않을까 합니다. 우째우째하면 같은 노드를 이용해 이벤트를 임의로 생성해 집어넣을 수도 있었던거 같습니다.

ganadist의 이미지

후킹까지는 아니지만 LD_PRELOAD같은 환경변수를 이용해서 특정함수를 강제로 다른 라이브러리에 있는 넘으로 교체가 가능합니다.

리눅스에서는 대부분 이벤트가 파일 또는 소켓 인터페이스로 전달되기 때문에 read/write 또는 send/recv만 잘 낚아서 처리하면 원하시는 작업을 처리할 수 있을 것 같습니다.

----
Do not feed troll!

----
데스크탑 프로그래머를 꿈꾸는 임베디드 삽질러

powerson의 이미지


박현우 wrote:

X를 띄우지 않은 까만 콘솔화면에서 키보드 등의 이벤트(커널내부에서는 이벤트로 처리하죠)를 가로채려면... 디바이스 드라이버를 짜야하지 안을까 합니다. 현재 PC에 달린 키보드, 마우스 등의 이벤트를 모두 볼 수 있을껍니다.

박현우님이 말씀하신 것처럼 keyboard device driver쪽을 통해서 가능할 거 같습니다. linux kernel source tree 중 (Linux Source Tree)/drivers/char/keyboard.c 이 소스를 분석해보시면 될거 같네요.

------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.

------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.

tifler의 이미지

멀티유저가 가상의 터미널로 접속한 상황에서
특정 유저가 하는 작업을 모니터링 하고자 하시는거 같은데
이런경우에는 가상터미널쪽을 살펴보셔야 합니다.
drivers/char/pty.c를 기본으로 분석해 보시기 바랍니다.

키보드 후킹은 콘솔만 모니터링이 가능하겠죠?

/***********************
* while(1) sleep(INFINITE);
***********************/

/***********************
* while(1) sleep(INFINITE);
***********************/

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.