본문 바로가기

리버싱기초

(3)
리버싱 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레지스터와 함께 자..
[코드엔진] basic 5 풀이 5번 문제 ​ 일단 실행. ​ 일단 입력. ​ ​ 당연하게 디버거로 올려봅시다. ​ ????? 아까본 문자열이 없다?? 혹시 패킹되어있는지 확인해봅시다. ​ 짜잔 UPX로 패킹되어있다. 풀어봅시다. ​ 언패킹 ​ 언패킹하여 풀어낸 모습. ​ 이제 디버거에 올려서 메시지로 보았던 문자열을 찾아서 이동해보자. 어우야.. 찾은 문자열에서 조금더 위로 올라가면 분기하는 부분들이나오는데 천천히 진행해본결과 문자열을 받아가는 함수 , 문자열을 입력했는지 확인하는 함수 , 1번시리얼과 2번시리얼을 비교하는 함수들이나오길래 ​ 시리얼을 위에칸만 입력하는게아니라 아래도 입력을 해야하는걸 알았다. ​ 결과적으로 직접입력한 시리얼값 aaaa1111와 Registered User 을 비교하는데 안에 자세히 들어가면 4개씩 비..
[코드엔진] basic 4 풀이 4번 문제 역시 일단 실행. 정상 일정 시간마다 정상이라는 문자열이 출력된다. ​ 디버거에 올리고 실행시켜보자. ​ ​ 오 오. ​ 디버거를 천천히 실행시켜 저 문자가 나오는부분을 찾아봤다. 이 함수 안에서 나오고있다 F7을 이용해서 들어 가본다 . ​ ​ ​ sleep 라는 함수때문에 일정간격으로 문자가 나오고있던거같다. ​ 그다음 함수 Isdebuggerpresent 이름 부터 디버거라는 말이 들어가는 저함수가 정답이다. ​ 끝