환경구축과 타겟 머신(ATmega128/L) 에 대략적인 정보를 확인하였으니 본격적으로 문제를 접근해보고자 한다.

먼저 IDA 를 이용해 문자열이 뭐가 있는지 확인해보았다.

이름답게 passwd, shadow 등의 명령어와 readme가 있다.

일단 readme를 읽으면 끝나는게 아닐까? 라는 의심을 가지고 문제에 접근하기로했다.

하지만 우선은 Login 과 Password 에서 입력하는 값을 맞추지 않으면 넘어가지 못할것이다.

어디서 입력값을 뱉는가 Atmel Studio와 IDA를 이용해 찾아보니


sub_729를 호출했을 때 login, password 에 대한 입력값을 받고 r24 레지스터에 리턴값을 저장했다.
설마해서 r24를 1로 넣었더니


오우야 안찾아도 쉘로 들어갈 수 있다!

다행히도 명령어에는


ls와 cat을 지원해준다 사용해본결과 ls -al 도 가능하다

readme 는 tmp 에 있었고, 대망의 cat readme를 입력해보았다.

왓 더.. 안된다 절대 저 사진처럼 문자가 두개씩 들어갔기때문은 아니다!
에러 메시지를 보면 알겠지만 (입력한 문자열) : No such file or directory 로 출력되기때문에 문자열은 제대로 들어갔다고 판단했다.

혹시나 하는 마음에 IDA에서 readme 문자열을 클릭해보았다.


... 띄어쓰기가 있었다 readme(공백문자) 였던 것이다!
공백문자를 쓰고 입력해도 아마 파싱하는 과정에서 공백문자가 제거되기 때문인지 찾을수 없다고 나오기 때문에 직접 저 부분을 00 으로 수정한 뒤 다시 해보았다.

위와 같이 개박살난 문자열이 나온다. 해당 메모리  분석이 필요하다.

IDA로 조회 해봤을 때 zZbN????28?qG 로 처음부터 이 값이 들어가 있음을 알 수 있다.
7A 5A 62 4E 0F 1F 12 03  32 38 1D 71 47 13바이트인데 해시값은 아닌거 같다. 

메모리 브레이크 포인트를 걸고 싶은데 어떻게 거는지 모르겠다.

혹시나 해서 위의 13바이트를 토대로 0~255 xor 연산을 수행했으나 문자열처럼 보이는게 없다.

Login : 에서 받은 문자열과 Password : 에서 받은 문자열을 체크하는 루틴에서 Login에서 일치하지 않은 경우 r24에 0을 넣고 리턴한다.
이 때 거치지 않은 루틴에 Password : 에서 받은 문자열을 가지고 장난질을 하는 sub_205 라는 함수가 있는데 내부를 보면

오우야.. 길고 아름답다.

여기서 하나 가정을 세웠다. 비밀번호도 아이디도 틀린상태에서 r24를 바꿨을 때 readme 값이 변하지 않은거라면,
아이디를 맞춘상태에서 r24를 변경하고 진행했을 때 readme의 내용이 영향이 있을까? 라는 것이었다. 그리고 이 영향을 주는 함수가 sub_20C라고 가정하고 확인해보았다.

sub_20C 수행 전

sub_20C  수행 후


...변화가 없다.

sub_8F5를 수행하고 나서는 변화가 있을지 확인해보았다.

...변화가 없다. ㅠㅠ

로그인 검증루틴 끝날때 까지 없다.

'reversing.kr' 카테고리의 다른 글

AVR reverse engineering (5) CustomShell  (0) 2018.08.06
reversing.kr CRC1  (0) 2018.02.07
AVR reverse engineering (4) CustomShell  (0) 2018.02.05
AVR reverse engineering (2) AVR ATmega128  (0) 2018.01.30
AVR reverse engineering(1) - 환경구축  (0) 2018.01.29

+ Recent posts