2011-11-13 7 views
0

최근에이 책을 구입했습니다 : 해킹 : The Art of Exploitation (2nd Edition) 그리고 최근에 저를 괴롭 히고 있습니다. 어쨌든, 예제 중 하나, firstprog.c으로 :Wacker from Hacking : 착취 기술

#include <stdio.h> 
int main() { 
int i; 
for(i=0; i < 10; i++) { 
// Loop 10 times. 
printf("Hello, world!\n"); // put the string to the output. } 
return 0; // Tell OS the program exited without errors. } 

그것은 당신이 (분명히 : 3)의 gcc로 컴파일 한 다음이 내가 단지 사용 gobjdump 위해 (objdump를 사용하여 OS를 위해 objdump를 찾을 수 없습니다 X) grep에 출력을 main :로 파이프 : 정규식과 처음 20 라인을 보여줍니다. 그런 다음 gdb로 디버그하고 main에서 중단하십시오. 여기 내 주요 문제 : 모든 메모리 주소가 다릅니다! 예를 들어, 책의 전자 메일 주소는 0x804837a입니다. 하지만 컴퓨터가 찢어지면 : 0x100000ee8 저는 64 비트 OS를 사용하고 있기 때문에 그런 생각이 들었습니다. 그러나 32 비트 버전의 다윈으로 부팅했을 때 나는 같은 결과를 얻었습니다. 이 문제가 무엇인지 아는 사람이라면 크게 감사하겠습니다. 정말 어리석은 무엇인가 나에게 휴식을 준다면 나는 방금 14 살이되었다.

답변

2

당신이 얻는 주소는 거의 항상 책에 보여지는 주소와 다를 것이다. 젠장, 주소는 같은 시스템에서 다른 실행 사이에서 변경 될 가능성이 있습니다.

4

리버스 엔지니어링을 공부하고 있다고 확신하기 때문에 ASLR이 무엇인지 찾아야합니다. 프로그램의 오프셋이 책의 오프셋과 다른 이유는 입니다.입니다. 기본적으로 프로그램이 메모리에 어디에 배치 될지 무작위로 결정하여 주소를 셸 코드에 하드 코드하는 악의적 인 프로그램을 만들 수 없습니다. 이로 인해 악용 사례가 훨씬 더 많이 생성됩니다.

+0

와우! 그것은 꽤 달콤합니다, 나는 그것에 대해 결코 알지 못했습니다, 감사합니다! – jaykru

+0

gdb에는 ASLR을 사용하지 않도록 설정할 수있는 옵션이 있습니다.하지만 여전히 동일한 주소를 가지고 있지는 않습니까? – jaykru

+0

gdb를 사용하여 ASLR을 비활성화 할 수 있다고 생각하지 않습니다. http://stackoverflow.com/questions/6325537/disabling-aslr-in-mac-os-x-snow-leopard를 참조하십시오. ASLR이 비활성화 된 경우 책에서 사용 된 OS 버전이 너와 다르다. – JosephH