BOF ( Buffer Over Flow )
동적할당 -> 문자열 저장 -> 버퍼 -> 동적할당 해제
임시로 데이터를 저장할 공간 버퍼
CDECL
스택구조
| p의 주소 | sfp | ret | 1 | 2 |
*(&p+2) += 4;
해석
&p+2 == ret
*ret = 4(16)
/*
ret의 값에는 주소가 들어가 있기 때문에
ret + 1은 실제로 +4한 주소값이 된다.
그렇기 때문에 주소값 +4를 한 경우 주소에 16을 더한 결과가 된다.
*/
int *p
p += 정수 뒤에 자동으로 sizeof(int)가 붙는다.
p +- 정수 * sizeof(int)
결과
STDCALL
스택구조
| p의 주소 | sfp | ret | 1 | 2 |
내부에서 arg를 정리하기 때문에 +13을 해주어야 한다.
여기서 +13은 뛰어넘을 코드의 byte 이다.
FASTCALL
스택구조
| p | n1 | n2 | sfp | ret |
p의 스택주소에서 16byte 만큼이동해야 ret 주소가 나오므로
*(&p+4) +=13;을 해주면 crack만 출력된다.
여기서 +13은 뛰어넘을 코드의 byte 이다.
결과
'정보보안 > Reversing' 카테고리의 다른 글
BufferOverFlow(memcpy),shellcode 작성 (323) | 2020.08.05 |
---|---|
Keygenning4newbies 알고리즘 분석, 프로래밍 (325) | 2020.08.05 |
Keygenning4newbies CrackMe Keygen 프로그래밍 (319) | 2020.08.05 |
CrackMe 4번 문제 암호화 알고리즘 분석 (371) | 2020.08.05 |
함수호출규약, Win API (320) | 2020.08.05 |