1. strstr 어셈블리 구현 [strcmp 순서도] [strcmp 어셈블리 소스] 실행 결과 2.1 strstr동적 디버깅 분석 1 [strcmp 디버깅] Hello world! 문자열의 첫 번째 ‘H’ 와 입력 값 ‘A’ 와 비교하면 아스키 코드 숫자로 변환하여 72,65가 된다. 그림과 같이 72가 큰 값으로 L_B로 점프하는 것을 확인하였다. 2.2 strstr동적 디버깅 분석 2 [strcmp 디버깅] 같은 문자열일 때 00까지 확인 후 종료되는 것을 확인할 수 있다. 문자열 길이가 다를 경우 길이가 더 긴 쪽이 큰 값으로 반환된다.
1. strcmp 어셈블리 구현 [strcmp 순서도] [strcmp 어셈블리 소스] 실행 결과 2.1 strcmp 동적 디버깅 분석 1 [strcmp 디버깅] Hello world! 문자열의 첫 번째 ‘H’ 와 입력 값 ‘A’ 와 비교하면 아스키 코드 숫자로 변환하여 72,65가 된다. 그림과 같이 72가 큰 값으로 L_B로 점프하는 것을 확인하였다. 2.2 strcmp 동적 디버깅 분석 2 [strcmp 디버깅] 같은 문자열일 때 00까지 확인 후 종료되는 것을 확인할 수 있다. 문자열 길이가 다를 경우 길이가 더 긴 쪽이 큰 값으로 반환된다.
1. strcpy 어셈블리 구현 [strcpy 순서도] [strcpy 어셈블리 소스] ECX에 원본 문자열의 크기 값이 대입되어 REP MOVS 명령어가 ECX 크기만큼 반복 실행된다. strcpy함수와 같은 위 어셈블리 코드를 실행하면 Null로 초기화 되어 있던 destStr 배열안에 srcStr 문자열을 복사하여 넣을 수 있다. 배열 크기가 넉넉하기 때문에 문제점을 찾을 수 없지만 원본 크기가 사본 배열크기보다 클 경우 buffer overflow 취약점이 생길 수 있다. 사본 배열의 공간크기를 검증하지 않고 수행되기 때문에 크기에 관계없이 반복하여 메모리에 값을 넣어버린다. 2.1 strcpy 동적 디버깅 분석 1 [strcpy 디버깅] 그림과 같이 ECX 에 0x0000000C (12) 값이 들..
1. strcat 어셈블리 구현 [strcat 순서도] [strcat 어셈블리 소스] Strlen 함수를 이용하여 destStr, srcStr 문자열의 길이를 구한다.[destStr 문자열의 시작주소] +[문자열의 길이] = [destrStr 마지막 주소] 를 구한 뒤 끝부분부터 strStr 문자열을 처음 값부터 차례대로 넣어주어 최종적으로 destStr문자열에 더해질 수 있다. ECX값에 srcStr 문자열의 길이 값을 넣어주면 REP MOVS 명령어가 반복될 때마다 ECX는 자동으로 1씩 감소한다. 이 반복이 끝날 경우는 ECX가 0이 될 때까지 반복하기 때문에 정확히 srcStr문자길이만큼 반복하여 destStr문자열에 붙여 넣을 수 있게 된다. 2.1 strcat 동적 디버깅 분석 1 [strca..