본문 바로가기

보안

리버싱 repne ,scas을 사용한 문자열 컨트롤

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