CTF 문제를 푸는 도중 재미난 문자열컨트롤을 발견하였다.
단순한 시리얼값을 찾아내는 문제였는데
시리얼값을 'ABCDEFG' 로 입력한후 비교하는 루팅을 찾는과정중에
이러한
repne scasb 명령을 보았다. 캡쳐에서는 안보이지만 바로위에
xor ecx,FFFF FFFF 과
xor eax, eax 가 있다.
즉 ecx를 FFFFFFFF로 , eax 를 0 으로 세팅해두는 부분인것.
실행하기전에 레지스터를 확인해보니
앞에서 말했던거처럼 ECX에 FFFF FFFF 이 세팅되어있고
EAX에는 0
EDI에는 내가 시리얼로 입력해둔 'ABCDEFG' 가있는 모습인데.
repne의 명령어 즉 rep 계열의 명령어는 문자열컨트롤에 자주쓰이는
어셈블리 명령어 중 하나이다.
주로 ecx레지스터와 함께 자주사용되는 편이다.
또한 repne는 scas와 자주사용되는 모습을 볼수있는데
scas명령어로 eax와 edi값을 반복해서 비교한다.
이렇게 해서 연산된 값을 봐보자.
이렇게 ecx의 값이 변하게되는데 위의값은
처음의 값 FFFF FFFF 과 비교했을때 8 을 의미한다.
즉 문자열의 길이가 8이라는것.
그리고 바로 아래에서
not ecx 를 통해 FFFF FFF7 을 8 로 변환하는 작업을한다.
dec ecx를 통해 널값을 제거하려하는게 보인다.
이처럼 위와같은 형태의 코드패턴이 보인다면
특정한 문자열의 길이를 구하는것이라고 생각해도 될것이다.
'보안' 카테고리의 다른 글
[웹해킹] DB해킹을 위한 명령어 들 (0) | 2019.05.20 |
---|---|
웹해킹 기초 공격 과 대응 방법 (0) | 2019.05.20 |
웹 프로토콜 분석 과 웹 기본 용어들 (0) | 2019.05.20 |
IDA 사용법 (0) | 2019.05.20 |
RVA to RWA 쉽게 계산하기 (1) | 2019.05.20 |