티스토리 뷰

1. strcpy 어셈블리 구현


 

[strcpy 순서도]


 

[strcpy 어셈블리 소스]


ECX에 원본 문자열의 크기 값이 대입되어 REP MOVS 명령어가 ECX 크기만큼 반복 실행된다.

strcpy함수와 같은 위 어셈블리 코드를 실행하면 Null로 초기화 되어 있던 destStr 배열안에 srcStr 문자열을 복사하여 넣을 수 있다. 배열 크기가 넉넉하기 때문에 문제점을 찾을 수 없지만 원본 크기가 사본 배열크기보다 클 경우 buffer overflow 취약점이 생길 수 있다. 사본 배열의 공간크기를 검증하지 않고 수행되기 때문에 크기에 관계없이 반복하여 메모리에 값을 넣어버린다.


 


2.1 strcpy 동적 디버깅 분석 1


 

[strcpy 디버깅]


그림과 같이 ECX 0x0000000C (12) 값이 들어 있으므로 12번 반복하는 것을 알 수 있다.

원본 문자열인 srcStr 배열의 값은  ESI 값에 넣어주었고, REP MOVS 명령어가 ECX 값이 0이 될 때까지 반복하면서 1 byte 씩 문자를 복사하는 것을 확인할 수 있다


2.2 strcpy 동적 디버깅 분석 2


 

[strcpy 디버깅]


ECX값이 0이 되었고 문자열 복사가 완료된 것을 확인 할 수 있다.원본 문자열 개수와 동일하게  12번 반복하여 destStr 배열 공간에 원본과 같은 문자열 값이 복사되었다.



Comments
최근에 올라온 글
최근에 달린 댓글
TAG
more
Total
Today
Yesterday