후킹!

토끼아빠의 이미지

안녕하세요~~

Windows 왕초보입니다.

어떤 XX프로그램이 있는데 이 놈은 실행되면서 SendMessage, PostMessage 같은 함수들을 모두 후킹하여 핸들이 자기 핸들이면 메시지가 오지 못하게 하네요...
전 이놈한테 마우스 이벤트를 보내고싶은데요...
요놈이 먼저 표준 DLL들 후킹해놓았으니 어쩔 방도가 없습니다..

첫째: SendMessage, PostMessage, SetCursorPos와 같은 일반적인 API를 이용하지 않고 마우스 이동이나 클릭할수 있는 그런거 있나요?
둘째: 어떻게 하면 이 프로그램에 이벤트를 보낼수 있나요?

여러 고수님들의 조언 부탁드립니다.

좋은 하루 되세요~~~

토끼아빠의 이미지

80번이나 읽혔는데 댓글무!!

좋은 하루 되세요!!

좋은 하루 되세요!!

madman93의 이미지

이미 후킹을 통해서 미리 막아 놓은 상태라면..
일반적인 방법으로는 힘들것 같습니다.

리버스 엔지니어링을 통해서는 가능할것 같습니다.

간단하게 예제들을 해 보시고서
시도해 보시지요!!

---------------------------------------------
svn + trac + my project --> success ???
---------------------------------------------

---------------------------------------------
git init
git add .
git commit -am "project init"
---------------------------------------------

mangg의 이미지

필터 드라이버를 만들면 되지 않을까요??

예제는 DDK 에 보면 있고

키보드 마우스 필터 드라이버 키로 구글검색하면 나옵니다.

그 프로그램 게임 클라이언트 프로그램이죠?
-------------------
나는 Copy&Paster 이다. 나의 화려한 기술 조합에 모두들 나를 두려워 한다. 나도 코드 Maker 이고 싶다.

-------------------
나는 Copy&Paster 이다. 나의 화려한 기술 조합에 모두들 나를 두려워 한다. 나도 코드 Maker 이고 싶다.

brucewang의 이미지

안녕하세요, 수고가 많으십니다.

전에 메시지 전송 문제를 말씀하셨던 것이 이것이 원인이었나요?

우선, 명확한 증상을 알아야 할 것 같아서 질문 드립니다.

Quote:

이 놈은 실행되면서 SendMessage, PostMessage 같은 함수들을 모두 후킹하여 핸들이 자기 핸들이면 메시지가 오지 못하게 하네요...

여기서 '핸들이 자기 핸들' 이라는것이 정확히 어떤것을 말씀하시는지 모르겠네요.

후킹 방법은 여러가지가 있습니다. 윗분 말씀대로 필터 드라이버를 만들수도 있겠지만 드라이버인 관계로 많이 어렵습니다. (드라이버 충돌 등..),

그리고 윈도우즈에서 제공하는 후킹 API를 사용하는 방법도 있습니다.
( http://msdn.microsoft.com/en-us/library/ms644990(VS.85).aspx
"SetWindowsHookEx Function" 을 검색해 보시기 바랍니다. )

드라이버가 되었던 API를 통한 hook이 되었던 Windows에서도 이런 'FIlter' 들은 Chain을 형성하게 되어 있습니다. 즉 키보드 기능을 가로채는 필터(혹은 훅)이 F1, F2가 시스템에 등록되어 있다면, 키보드 이벤트가 발생할 때 제일 먼저 설치된 놈 F1에게 그 내용이 전달되고, F1의 처리가 끝나면 그 내용이 F2로, 마지막엔 user application에 전달됩니다.

그런데 만약 F1이 다음 처리를 F2에 넘겨주지 않고 바로 끝내버리면 어떻게 될까요, F2의 조작은 무시되고 F1의 결과만 처리된 다음에 application에 전달되겠죠.

따라서 훜을 새로 만들으셔서 XX라는 프로그램의 훅 보다 먼저 설치되게 하시면 XX의 처리를 막아 버릴 수 있게 되겠습니다.

그런데 자세한 것은 XX라는 프로그램이 무슨 프로그램인지, 토끼아빠님께서 하시려는건 정확하게 무었인지 알려주시면 더 좋겠네요. 혹시 '자동클릭' 비슷한 것인지요?

아무튼 XX의 정체와 메커니즘에 따라 접근해야 할 방식이 다를 수 있을 것 같습니다.

예를들어, 그 XX라는 프로그램이 앞서의 방법 대신, Windows의 대부분 API들이 들어 있는 DLL과 완전히 동일하게 export되어 있는 모든 함수(API)들의 signature 그대로 export한 dll을 만들어 몇가지 함수들에 앞서 말씀하셨던 '자기핸들일 경우 무시' 라는 코드를 집어 넣고, 그 외 API들에 대해서는 원래의 DLL에 수행을 돌리는 식으로 해 놓은 다음,

원래 Windows시스템의 DLL 이름을 변경하고 자신의 DLL을 이름과 동일하게 동일 위치에 넣어버리면 그렇게도 완전한 후킹이 됩니다.

정확히 원하시는 바는 모르겠사오나, 어쩌면 힘든 싸움이 될지도 모르겠네요.
좋은 결과를 기원합니다.

-------------------------------------------------
$yes 4 8 15 16 23 42

-------------------------------------------------
$yes 4 8 15 16 23 42

토끼아빠의 이미지

제 소개를 간단히 한다면 임베디드 리눅스쪽에만 묻혀있다가 얼마전부터 Windows에 접한 Windows왕초보입니다.
요즈음 시간도 좀 있고 해서 후킹에 대해 공부하고있는중입니다.
Windows에서 제공하는 API를 이용하는 예제정도는 한번씩 해보았습니다.
좀 난도가 높은걸 해보려고 ....
이미 시스템DLL들이 후킹된 상태에서 조작을 좀 해보려는겁니다.

님께 명확한 상황설명을 해드리죠~

인용:
여기서 '핸들이 자기 핸들' 이라는것이 정확히 어떤것을 말씀하시는지 모르겠네요.

음. 이건 제가 잘못 생각한것 같네요...
어쨌든 SendMessage, PostMessage, SetCursorPos 등을 이용하여 마우스를 움직이거나 클릭하게 하면 XX프로그램 윈도 영역에서만 안되고 그 밖의 영역에서는 괜찮습니다.

인용:

그런데 자세한 것은 XX라는 프로그램이 무슨 프로그램인지, 토끼아빠님께서 하시려는건 정확하게 무었인지 알려주시면 더 좋겠네요. 혹시 '자동클릭' 비슷한 것인지요?

제가 하려는게 찍어서 말하면 '자동클릭'입니다.
그리고 XX라는건 강력한 보안프로그램이 설치되어있는 게임이구요..
음.. 오해하진 마세요..
제 실력으로 이런거 할수 있겠나 해서 그냥 달라붙어본겁니다..

인용:

따라서 훜을 새로 만들으셔서 XX라는 프로그램의 훅 보다 먼저 설치되게 하시면 XX의 처리를 막아 버릴 수 있게 되겠습니다.

저도 이 방법을 이용하려고 합니다.
그런데 어떤 방법으로 해야 할지 감이 오지 않습니다.

어떻게 하면 되겠는지 조언 부탁드립니다...
다시 한번 인사드립니다...

좋은 하루 되세요!!

좋은 하루 되세요!!

brucewang의 이미지

안녕하세요,

Quote:

제 소개를 간단히 한다면 임베디드 리눅스쪽에만 묻혀있다가

그 어려운 임베디드 리눅스를... 존경스럽습니다.. ToT
나중에 저 좀 많이 도와주세요.

Quote:

인용:

따라서 훜을 새로 만들으셔서 XX라는 프로그램의 훅 보다 먼저 설치되게 하시면 XX의 처리를 막아 버릴 수 있게 되겠습니다.

저도 이 방법을 이용하려고 합니다.
그런데 어떤 방법으로 해야 할지 감이 오지 않습니다.

제가 저 글에서 말씀드린 내용은 그 MSDN 링크를 따라가셔서 "SetWindowsHookEx Function" 에 대한 내용을 보시면 관련 함수들과 설명들이 딸려 나온답니다. 저의 설명은 오히려 불필요할 것 같습니다.

Quote:

제가 하려는게 찍어서 말하면 '자동클릭'입니다.
그리고 XX라는건 강력한 보안프로그램이 설치되어있는 게임이구요..

음... 제가 전에 그 관련 기술 팀 '옆자리'에 있어봐서 조금은 아는데요, 제가 말씀드린 3가지 방법중에 필터 드라이버를 사용하는 방법 정도의 low level이 아니면 힘들 것 같네요...

그런 툴들은 먼저 시스템에 드라이버를 설치합니다. 그 드라이버가 어느 시점에 injection(또는 설치, 로딩, 활성화) 되느냐 보안 툴 마다 다르지만, 그렇게 드라이버 또는 제가 말씀드린 마지막 방법으로 시스템 전체 API를 감시하는 상태가 되어 있다면, "SetWindowsHookEx Function" 함수 호출 자체도 감시 당하고 있다는 얘기가 됩니다. ToT

따라서 그 보안 툴의 드라이버/혹은 다른 layer 보다 더 아래 layer에서 활동하지 않으면 안되는데요, 그 이상은 저도 잘 모를 뿐더러 전의 회사와 조금 관련이 있을것 같아서 말씀드리기 조금 어렵네요... ToT

우선은 WDM (Windows Driver Model)이라는 것에 대해 research를 해 보시면 Windows2k이상에서의 드라이버레벨에 대한것을 보시게 되면서 그 툴의 방식에 대해 이해 하시게 될 것 같습니다..

저는 이만 줄행랑~

-------------------------------------------------
$yes 4 8 15 16 23 42

-------------------------------------------------
$yes 4 8 15 16 23 42

토끼아빠의 이미지

음 그저 일반적인 방법으로는 안될것 같습니다.
필터드라이버정도는 해보았는데 되지 않습니다.
그리고 후킹도 다 막혔구요...
좀더 실력향상을 한 다음에 다시 접해야 할듯??

많은 도움 받았습니다.
앞으로도 잘 부탁드립니다.

좋은 하루 되세요!!

좋은 하루 되세요!!

vamf12의 이미지

접근하는 방법을 바꾸세요.. -_-

게임이라고 하시니 아마 nProtect를 사용하는 것 같군요.

nProtect가 뜨지 않도록 하시는게 먼저 입니다.

Munsen의 이미지

nProtect 안 뜨게 하는 방법 아시면 좀 알려주세요 =_=
이놈 때문에 와인으로 게임이 안 돌아가는 것 같아서요.

vamf12의 이미지

nProtect가 안뜨게 하는 방법 자체는 간단합니다.

nProtect를 사용하는 게임들은 내부적으로 일종의 테스트 루틴을 가지고 있더군요. 아마도 개발시에 사용하는 부분인것 같던데...

저라면 릴리즈 할때 이부분을 아예 없애고 릴리즈 하겠지만, 남겨진 저부분으로 실행되도록 하면 됩니다.

그런데 말씀하시는 것을 들어 보아하니... 좀 힘드실것 같군요. 어셈블리어를 조금 할줄 아셔야 가능한 작업입니다.

토끼아빠의 이미지

당연히 보안프로그램이 안뜨면 마음먹은대로 조작이 가능하겠죠.
그런데 nProtect든 뭐든 보안프로그램을 안뜨게 할 정도면 굉장한 고수겠죠??
전 그런 고수가 못되어서...

혹 님께서 방도를 가르쳐주신다면 정말 고맙겠습니다..
잘 부탁드립니다.

좋은 하루 되세요!!

좋은 하루 되세요!!

madman93의 이미지

softice밖에 없을것 같군요 ㅋㅋㅋㅋ

---------------------------------------------
svn + trac + my project --> success ???
---------------------------------------------

---------------------------------------------
git init
git add .
git commit -am "project init"
---------------------------------------------

brucewang의 이미지

네, SoftIce로 특정 JMP를 찾아 무효화 시키거나 할 수 도 있겠지만, 대부분 그런 조건 분기등의 중요 루틴의 무결성도 검사하게 되어 있어서 (변경될 경우 실행중지 및 해킹보고) 신중을 기하시길 바랍니다..

-------------------------------------------------
$yes 4 8 15 16 23 42

-------------------------------------------------
$yes 4 8 15 16 23 42

토끼아빠의 이미지

SoftIce는 깔기만 해도 컴이 다운됩니다..
그 프로그램때문에...
다른 방법은 없을까요???
잘 부탁드립니다..

좋은 하루 되세요!!

좋은 하루 되세요!!

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.