메모리 관련해서 질문사항이 있습니다.

lunarainbow의 이미지

제가 알기론, 다른 프로세스 영역에서 사용중인 메모리는 참조가 불가능하다라고 들었습니다.

만약 볼 수 있게 허용이 되어 있다면.. 좀 이상해질 것 같은데..

여기서 궁금한것이 생깁니다.

분명 볼 수 없게 막아놨을것 같은데, 어떤 프로그램들은 다른 프로세스의 사용중인 메모리를 전부 조사하기도 하더군요.

예를 들면, 예전 게임내에서 돈이나 기타 수치적으로 표현되는 자료들의 변화량으로써, 해당 프로세스 영역내의 메모리로부터 위치를 알아낸 후 그것의 변조를 통해 사용자 임의대로 바꾸기.. 같은것 말입니다.

위와 같은 프로그램은 반드시 해당 프로세스의 사용중인 메모리 영역을 탐색하여야 할 것이며, 읽기, 쓰기 모두 가능해야 할 것입니다.

어떻게 가능하죠?

분명 자신의 프로세스가 아니면 불가능 할텐데...

그래서 프로세스끼리의 통신은 pipe라던가.. 기타 이런저런 방법으로 통신을 하게끔 하는것 아니었나요?

이에 대한 문서나 자료가 있으신분이 계신다면,

답변 부탁드립니다.

예전부터 궁금해 하던것인데.. 도무지 혼자 힘으론 알아 낼 수 없었고, 또 저는 자료 검색 능력이 너무 떨어지는 관계로..;;;

노력은 해봤는데 결과가 안나오네요. ^^;;

감사합니다.

익명 사용자의 이미지

lunarainbow wrote:
예를 들면, 예전 게임내에서 돈이나 기타 수치적으로 표현되는 자료들의 변화량으로써, 해당 프로세스 영역내의 메모리로부터 위치를 알아낸 후 그것의 변조를 통해 사용자 임의대로 바꾸기.. 같은것 말입니다.

혹시 그거 GameWizard 아니었나요? 그건 도스용이고 RealMode환경인데...
SoftICE도 그런 기능이 있죠. SoftICE의 경우는 보호모드 자체를
가로채서 가능하게 한 버젼도 있었는데.... 블루스크린이 심심치 않게 나오죠.

보호모드에서는 커널이 마음만 먹으면 다른 프로세스의 메모리 접근이
불가능하게 할수 있습니다.

만약 질문하신분의 말씀이 가능하다면 감시 프로세스 위에서 실행된
프로세스이거나 커널모드로 돌아가는 모듈을 이용한것이거나...

또는 Kernel에서 /dev/mem 같은 곳을 일반 유저에게 오픈할수 있게
컴파일하면 그것도 가능하겠죠.

다른 방법이 더 있을려나?

ukira의 이미지

메모리 주소가 바로 그 위치를 나타내니까 바로 접근이 가능했던거 같은데...
WINDOWS는 보호모드에서 돌아가기 때문에 다른 프로세스의 주소에 접근이
불가능 하잖아요...
그런데 디아블로 맵핵 같은건 그럼 어떤 원리죠?
보호모드에서 메모리 접근을 어떻게 하는지가 궁금합니다. ^^;;;

ai의 이미지

최근 버전의 게임위저드는 win32 환경에서 작동하고 있습니다. 보통 게임에서 사용되는 여러가지 변수값들은 공유메모리 영역에 보관되고 있는 것으로 보입니다. 게임의 본체인 .exe 와 라이브러리 .dll 간의 변수 공유를 위해서겠죠. 이 영역은 읽기/쓰기를 가능하게 설정하기 때문에 적절한 툴을 이용하시거나 혹은 직접 해당 영역을 수정할 수 있는 프로그램을 통해서 게임 데이터를 조작할 수 있습니다.

메모리 영역을 직접 에디트하거나 리버스 엔지니어링을 위해 사용하는 툴은 minzkn 님께서 예로 드신 softice 가 대표적이죠. 게임위저드는 어느정도 게임에만 특화되었다는 느낌이 강하지만 나름대로 사용하기 편리한 구석도 있습니다. 이런 툴들은 굉장히 많은 종류가 소개되어 있는데, 이를테면 아래 프로그램을 통해 다른 프로세스의 메모리 영역이 어떠한지 확인할 수 있습니다. 출처가 어디였는지 기억이 나지 않는데, 공개용이었던 것 같네요.

ftp://cizz.net/pub/DelphiTools.exe

다만 읽기/쓰기가 금지된 타 프로세스 영역에 대해서는 어떤 방법으로 접근이 가능할지 모르겠네요. 전혀 불가능한 것은 아니라고들 합니다만.. :)

War doesnt determine whos right, just whos left.

lunarainbow의 이미지

답변 감사드립니다. ^^

그러니깐.. 결론은 이러한 것인가요?

공유 dll과의 변수 공유를 위해서는,
 
반드시 공유 메모리 영역에 각 변수들이 저장 되어야 한다.
 
그러므로 외부의 다른 프로세스들이 특별한 방법으로 읽기/쓰기가 가능하다.[code]
 
그렇다면 다시 궁금해 지는것이 있는데,
 
제가 간단한 프로그램을 만들었다고 생각을 하고,
 
그것을 컴파일 해서 돌립니다.
 
잘 돌아가고 있을때, 현재 이것의 메모리 상황이 어떤가... 궁금해서 메모리 덤프를 해볼 수 있지 않나요?
 
그것는 읽기 권한이 있어야 가능한 것일텐데,
 
읽기 권한이 주어진다면... 보안상 치명적 문제가 생기지 않을까요? ^^;;
 
에고.. OS란... 생각해 보면 볼수록 신기하네요...;;;[/code]
charsyam의 이미지

정확한지는 모르겠지만, 윈도우즈의 경우에, 실행 프로세스에,

DLL을 injection 할 수 있습니다. 그러므로, 자기가 자기 자신의 메모리를

참조하므로 ^^ 문제가 될건 없겠죠. Hooking 이나 DLL injection 쪽으로

찾아보시길 ^^ 윈도우즈 쪽에 유명한 리치책에 설명이 나옵니다. ^^

=========================
CharSyam ^^ --- 고운 하루
=========================

ai의 이미지

프로세스가 사용하고 있는 메모리의 내용을 누군가 들여다 볼 수 있기 때문에 보안상 치명적이라고 생각해도 괜찮을 것 같습니다. 꽤 예전에는 네트웍에 물려서 동작하는 프로그램이 그다지 많지 않았기 때문에 그러한 문제가 비교적 덜했겠지만, 지금은 상황이 많이 달라졌죠. 프로그래머가 의도했던 것처럼 언제나 클라이언트가 정상적인 방법으로 서버와 통신한다고 가정해버리면 반드시 문제가 됩니다. 물론 네트웍과 무관하게 동작하는 프로그램 역시 비슷한 문제점은 가지고 있죠. 크랙이라는 것도 메모리 덤프나 디스어셈블로부터 시작하니까요. 결론적으로.. 그러한 악의적인 오동작을 막는 것은 사실상 무리겠지만, 얼마나 까다롭게 (혹은 귀찮게) 만드느냐로 정리되는 것 같습니다.

War doesnt determine whos right, just whos left.

지리즈의 이미지

갑자기 MS가 주장하던 팔라딘 프로젝트 기억이 나는군요...

하드웨어 지원없이는 불가능하다라는 평이었고,
ACPI에 이어, MS가 하드웨어를 리드하려고 하던,
야심찬 계획이었던것으로 기억하는데.
요즘은 조용하네요.

잘은 기억이 안나지만, MS운영체제의 한계상
프로세스간 메모리가 100%보호가 안돼는 걸로 기억합니다.

There is no spoon. Neo from the Matrix 1999.

댓글 달기

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