2010-07-11 3 views
1

C++에 대한 기본적인 지식으로 프로그램 (ReadProcessMemory을 사용하는 )에서 일부 데이터를 읽고, 5 분마다 내 웹 서버로 보냅니다. 내가 집에없는 동안 그 프로그램의 상태를 보아라.영구 메모리 주소

"메모리 해킹 소프트웨어"라는 게임을 해킹하도록 설계된 프로그램을 사용하여 읽을 메모리 주소를 발견했습니다. 문제는 프로그램을 다른 컴퓨터로 옮길 때마다 주소가 변경된다는 것입니다.

내 질문은 : 어떤 컴퓨터에서나 동일한 '영구적 인'주소를 찾는 방법이 있습니까? 또는 이것은 단순히 불가능합니다. 실례합니다.이 질문이 벙어리이지만, 주제에 대해 많이 알지 못합니다. 또는 실행중인 프로그램에서 정보에 액세스하는 다른 방법 일 수 있습니다. 일체의 도움을

감사합니다!

+1

왜 이것을 다운 시키셨습니까? 나는 그 질문에 아무 문제가 없음을 본다. –

+1

@San Jacinto : 당신이 이것을하려는 경우, 무엇보다 먼저 잘못된 것입니다. –

+1

Upvoting 질문입니다. OP가 왜 이것이 필요한지에 대한 논평에서 밝혀졌으며 충분히 합리적으로 보입니다. 다른 일을 할 수있는 방법이 없다는 사실은 종종 내 경력에서 여러 번 "틀린"일을하게 만들었습니다 :-) 제 직업은 가능하면 작업 가능한 해결책, 깨끗하고 순수한 마음을 제공하는 것입니다. 필요하면 더러운. downvoter에 대한 나의 제안은 누군가가 잘못하고 있다는 것을 맹목적으로 말하기보다는 답변에서 "올바른"방법을 제공하는 것입니다. – paxdiablo

답변

4

찾고있는 것 주위의 메모리 패턴을 인식 할 수있는 방법이 있습니다. 크래커는이를 사용하여 "주위를 돌아 다니는"소프트웨어로 패치 할 메모리 위치를 찾아 낼 수 있습니다 (주소 공간을 무작위로 제공하는 운영 체제처럼).

예를 들어, 고정 된 문자열이 항상 관심 영역을 벗어난 X 바이트라는 것을 알고 있다면 전체 주소 공간을 검색하여 찾을 수 있습니다. 그런 다음 관심 영역을 계산할 수 있습니다.

그러나 생각보다 항상 신뢰할만한 것은 아닙니다.

대신 악의적 인 행동으로부터 소프트웨어를 보호하는 기능과의 전쟁에 관여하지 않는 목적을 달성하기위한 또 다른 방법을 생각할 것입니다. 같은 질문의

생각한다

왜 정확하게 할 당신 필요에서 모든 주소 공간에 액세스 할 수 있습니까?

프로그램 자체가 상태 정보를보다 유용한 방식으로 제공합니까?

프로그램이 귀하의 것 인 경우 해당 정보를 제공하도록 수정할 수 있습니까?

프로그램이 제대로 작동하는지 알아야하는 경우에만 프로그램에 "핑"(예 : 웹 페이지, HTML 요청 보내기, 유효한 응답 받기) 할 수 있습니까?

마지막 수단으로 OS에 주소 공간 무작위 화없이 프로그램을로드하도록 설득 한 다음 (다소 모호한) 방법을 계속 사용할 수 있습니까?

내가 네 컴퓨터에서 프로그램이 사용하고 난 그들 모두에 그들은을 업데이트 할 때마다 주소 (그 중 8) "를 다시 찾기"해야 :


는 것을 당신의 코멘트를 감안할 때 프로그램.

나는이 프로세스를 자동화하기 만하면됩니다. 이것은 어떤 크래킹 소프트웨어가하는 것입니다. 파일이나 메모리 내 코드 및 데이터를 스캔하여 관심 영역을 찾는 데 사용할 수있는 마커를 찾습니다.

수동으로 수행 할 수있는 경우이를 수행 할 수있는 프로그램을 작성할 수 있어야합니다. 프로세스 주소 공간을 읽음으로써 관심 분야를 찾아내는 프로그램을 찾았습니다. 찾은 후에는 거기에서 필요한 정보를 읽으십시오. 실제 위치가 아닌 각 릴리스마다 변경 방법을 찾는다면 각 소프트웨어 릴리스마다 로케이터 루틴을 업데이트해야하지만, 불행하게도 선택한 방법에 대해 지불하는 가격이 필요합니다.

당신이 읽으려고하는 프로그램이 일부 사람들만큼 안전 할 것 같지 않습니다. - 프로그램이 으로 실행되어 크래커들을 혼란스럽게하는 사람들이 있습니다.

+0

프로그램이 제 것이 아니며 API 또는 다른 인터페이스 수단이 없습니다. 회사는 중국인이므로 연락을 취하고 인터페이스를 요청하는 방법을 모릅니다. 서버로 전송 될 때 PHP를 사용하여 데이터를 그래프로 표시하므로 프로그램이 실행 중인지 여부 만 알면 충분하지 않습니다.어쨌든, 나는 그 과정을 단순화하기위한 수단을 찾고 있었다. 나는 4 대의 컴퓨터에서이 프로그램을 사용하며 프로그램을 업데이트 할 때마다 그들 모두에 주소 (8 개)를 "다시 찾아야"합니다. - 고마워요 – Blake

+3

글쎄, 각 컴퓨터의 주소를 "다시 찾는"경우, 그 작업을 자동화하기 만하면됩니다. 수동 방법을 사용하여 관심 분야를 확실하게 찾을 수 있다면이를 수행 할 프로그램을 작성할 수 있어야합니다. – paxdiablo

0

당신이 요구하는 것은 설계 상 불가능합니다. ASLR은 이러한 종류의 스누핑을 방지하기 위해 특별히 설계되었습니다.

원격 프로세스에서 어떤 종류의 정보를 얻고 있습니까?

+0

. 무작위 화가 결정될 수없는 경우를 방지하기 위해 설계되었습니다. 코드 삽입 공격의 일부로 'http : // pax.grsecurity.net/docs/vmmirror.txt'를보십시오. 여기에서 공개적으로 제공된 ASLR 예제는 Pax가 ASLR을 수행하는 방법을 설명하는 수단으로 그러한 스누핑을 보여줍니다. – MSalters

+0

@MSalters : 대상 프로세스 외부에 완전히 있어야 원하는 메모리 위치를 판별하는 것이 약간 어렵습니다. 물론 무작위 화베이스 (즉, 현재 프로세스를 소유하고있는 경우)가 있으면 ASLR은 자신의 메모리를 보지 못하도록 설계되지 않았습니다! –

0

죄송합니다. 프로세스의 메모리 레이아웃이 안정적으로 일치하지는 않습니다.

여러 가지 방법으로 목표를 달성 할 수있다 : "무슨 일이 당신의 상태이다"

  • 당신이에 연결하고 요청할 수있는 클라이언트/서버 프로토콜 추가 (이것은 또한 더 많은 정보를 요구하는 것에 능숙합니다).
  • 프로세스가 주기적으로 파일을 터치하게하면 "모니터"가 해당 파일의 수정 시간을 확인하여 프로세스가 종료되었는지 확인할 수 있습니다.
+0

그는 ReadProcessMemory를 수행하는 프로세스에 대한 핸들을 이미 가지고 있습니다. ReadProcessMemory는 프로세스가 충돌했는지 알 수있는 110 % 신뢰할 수있는 방법입니다. 프로세스 ID 별 추적은 필요하지 않습니다. –

+0

@Billy : 알아두면 좋겠지 만, 저는이 기능에 익숙하지 않습니다. Windows에서는 개발하지 마십시오. 나는 당신이 그 핸들을 가지고 있다고 가정하고, 단지 "살아있다"를 확인하는 것은 OP가 원하는 것에 충분하지 않습니다. – Stephen