카테고리 없음

ROP 가젯 - 약간 착각할 만 한것

진모씨 2013. 8. 15. 23:24

일단 ROP 가젯을 찾으려면 '정적인 공간'을 쓰는, '실행이 되는 영역'의, '필요한 명령어 바이트'를 찾아야됩니다.


ROP가젯을 찾다보면, 그냥 ida에서 무턱대고 찾는다던지, objdump 해서 찾는다던지 할때 안보이는 가젯이 있을 경우가 있죠.


예를 들어 pop eax는 1바이트입니다.


그리고 어셈블러로 컴파일하면,


0:  58                      pop    eax


0:  cd 58                   int    0x58


오, 좋군요. 이게 뭐죠? int 0x58 아닌가요?


cd 58이죠? 바이트가?


int 0x58을 실행할 수도 있지만..


저기서 1바이트를 더해서 실행할 수도 있죠.


대체로 pop ~ pop ~ ret 명령어의 경우에는 3바이트를 차지하던데요.


0:  5d                      pop    ebp
1:  5a                      pop    edx
2:  c3                      ret


0:  b8 5d 5a c3 00          mov    eax,0xc35a5d


이런 경우도 있죠. 극단적으로 예를 들은 것이지만, 이런 경우가 생길 수 있습니다.


그래서 ROPEME 같은 툴을 사용하는게 좋죠. 아니면 직접 프로그램을 만들어 찾거나.. 물론 실행 가능한 구간이어야겠죠?