이게 코드고
디버거로 열어봤어요
대충 이런원리로 돌아가는건가요?
일단 ret까지 쉘코드랑 nop로 채운다음에 bffffa20을 ret에 넣게할건데요
이 다음이 헷갈려요 main함수가 종료될때 ret를 읽어서 쉘코드를 작동시키는건가요?
이게 코드고
디버거로 열어봤어요
대충 이런원리로 돌아가는건가요?
일단 ret까지 쉘코드랑 nop로 채운다음에 bffffa20을 ret에 넣게할건데요
이 다음이 헷갈려요 main함수가 종료될때 ret를 읽어서 쉘코드를 작동시키는건가요?
이해가 되다말았어요 쉘코드랑 ret심는거까진 이해하겠는데 ret을 어떻게 작동시키는지 모르겠어요
근데 왜 gdb로 디버깅해요? 비쥬얼 스튜디오로 안하고??
내가 기억하기로는 저거 ret 명령어 작동될때 스택포인터에서 가져오는 다음 명령어의 주소값을 인위적으로 쉘코드 시작부분으로 바꿔치기해서(한번더 푸시하는거였나) 리턴되면 쉘코드명령어로 점프되게 하는거였음
프로그램이 실행될때는 현제 실행되던 주소를 ret에 저장하고 새로운 프로그램을 시작함. 너말대로 main함수가 종료되면 ret주소를 보고 원래 하던 작업으로 돌아가지 , 오버플로우공격으로 ret주소를 변경하여 너가 실행하고자 하는 놈의 주소로 바꿔치기하면된다
근데 나도 궁굼한게 주소바꿔치기하고 그런건 어려운건 아닌데 해킹범이 어떻게 메모리에 해킹프로그램(Shell code)를 강제로 올리냐는 거지;