2012-06-27 2 views
1

특정 소프트웨어에 대한 익스플로잇을 개발하려고하는데, 두 가지 개별 동작 (하나는 잘못된 변수 할당으로 인해 프로세스가 충돌 함)로 응답 할 수 있다고합니다. EIP를 제어하고 돌아갑니다. 잘못된 주소. 이 두 가지 다른 행동의 이유는 ASLR 때문이며 일부 정보 유출 만 있기 때문에 무차별 강제로 수행해야합니다. EIP가 수정되었을 때만 프로그램을 중단하고 싶습니다. 그러나 프로세스가 끊임없이 충돌하고 respawning이기 때문에, 나는 EIP가 수정되었을 때만 멈추도록 프로그램을 알릴 방법이 없습니다. GDB에서 프로세스는 항상 충돌합니다. 이 어려움을 어떻게 극복 할 수 있습니까? (IT 보안에 게시하는 것에 대한 생각은 있지만 GDB와 더 관련이 있기 때문에 여기서는 더 좋을 것이라고 결정했습니다.)GDB 특정 크래쉬 디버그

+0

당신은 security.se를 묻는 시도 할 수 있습니다,하지만 나는 약간의 질문을 정리할 것입니다. 이 사람들은 검은 색 모자에 친절하게 가지 않습니다. – rook

답변

0

메모리 손상이 발생하기 전에 set a breakpoint을해야합니다. 충돌이 발생하면 gdb가 중단되고 사용자는 이미 호출 스택이 있다고 생각하는지 알려주는 show stack 명령을 사용할 수 있습니다. 그러나 EIP가 손상된 경우 함수의 스택 프레임이 부분적으로 손상되어 show stack이됩니다. 부분적으로 손상되었습니다 (얼마나 많은 스택을 분쇄 했는가에 달려 있습니다!). 그러나이 프로세스는 메모리 손상이 발생한 위치를 좁히는 데 도움이 될 수 있으며 호출 스택에서 항상 중단 점을 설정하고 프로그램을 단계별로 실행할 수 있습니다.

GDB에도 reverse debugging이 있는데, 이는 충돌 후 뒤로 물러 설 수 있기 때문에 더 쉬운 방법 일 것입니다. 그러나이 기능은 상당히 새로운 기능입니다. 일반적으로 해커는 위에서 설명한 기술을 사용해야했습니다.