어제 길다고 넘어간 sub_20C를 결국 분석해야겠다는 결론에 이르렀다. 

그리고 문자열을 입력하다가 (3)에서 적은내용이 잘못되었다는 것을 알았는데
r29:r28 이 가리키는 곳에 문자열은 (어떤문자, 입력한 문자열) 로 내가 입력한 문자가 아니었다.



위의 그래프를 보면 노란색으로 칠한 부분에서 함수호출이 각각 9번,10번이 발생하고 있다.
저 함수에서 생성된 값이 10바이트 10바이트 인 것과 연관이 있어보인다.

sub_20C를 호출 후 변화가 생기는 데이터는
(r29+0x1):(r28+0x1) 과 (r29+0x1):(r28+0xA) 인데


입력 문자열 : 4321dcbb

sub_20C 진입전 (r29+0x1):(r28+0x1) = 9A 7D 72 57 D5 78 49 E6 F2 02
sub_20C 진입전 (r29+0x1):(r28+0xA) = A6 93 C4 DD 1D 71 DE C4 A0 02

sub_20C진입후 (r28+0x1)):(r28+0x1) = 9A 7D 72 57 D5 78 49 E6 F2 02 (변동없음)
sub_20C 진입후 (r29+0x1):(r28+0xA) = A7 27 89 BB 3A E2 B7 89 A3 02 (전부변함)  


입력 문자열 : reverse1

sub_20C 진입전 (r29+0x1):(r28+0x1) = 9A 7D 72 57 D5 78 49 E6 F2 02
sub_20C 진입전 (r29+0x1):(r28+0xA) = A6 93 C4 DD 1D 71 DE C4 A0 02  


sub_20C 진입후 (r29+0x1):(r28+0x1) = 9A 7D 72 57 D5 78 49 E6 F2 02 (변동없음)
sub_20C 진입후 (r29+0x1):(r28+0xA) = DF ED 6C 99 46 CE A7 87 F0 03 (전부변함)  



(r29+0x1):(r28+0x1) 은 문자열에 관계없이 변화가 없고
(r29+0x1):(r28+0xA) 은 문자열에 따라 변화가 다름을 확인할 수 있었다.

하지만 연산내부를 살펴보니 역연산으로 복원이 불가능한 연산들이 몇 가지 있어서

동일한 10byte로 덮어씌운뒤 쉘에 진입하니 readme 의 내용이 변하였다. 하지만 이전에 있던 내용이 바뀐게 아니라 가리키는 장소가 변한 것으로 보인다.

그럼 여기서 영향을 주는게 저 10byte 인지 아니면 입력한 문자열 그 자체인지를 확인하였다.

입력 문자열 : bungbung 이고 10byte 를 9A 7D 72 57 D5 78 49 E6 F2 02 로 맞췄을 때


입력 문자열 : bungbung 이고 10byte 를 수정하지 않았을 때


다르다! 올ㅋ 혹시나 하는 마음에 다시해보았다.

... 똑같다..

그렇다면 어쨌든 readme 의 데이터는 고정된 위치를 가리키는게 아니라 문자열에 따라 어딘가를 가리키는 것이 아닌가 라는 생각이 들었다.
10byte는 사실상 중요하지않고 입력하는 8개 문자가 중요한것으로 보인다.

어쨌든 cat 명령을 수행 할 때 어떻게 동작되는지 확인하려고 하는데 우연히 data memory 에서 오른쪽 버튼으로 클릭하니 아래와 같은게 보였다.

그렇다. 메모리영역에 접근할 때 브레이크포인트를 거는것이 가능했다!
이걸 왜 어제는 못 봤는지 모르겠지만 있어서 다행이다. 이로써 한결 분석하기 편해졌다.

cat을 입력할 때 점프하는 곳은 0x1B5 였다. 


좀 더 진행하니 sub_661 로 진입한다는 것을 알았다.


ㅎ... 또 멋지고 아름다운 그래프 오버뷰가 나를 맞이해줬다.

sub_20c 를 역연산 하는게 맞을지도 모르겠다..

sub_661 함수 에서 0x6b5 를 대상으로 뭔가를 열심히 읽고있다. 보니 입력한 패스워드문자열이 복사된 곳이다.


여기서 문자를 출력하고 있는데 이것으로는 readme의 내용을 알 수 없을거 같다.
따라서 sub_20c를 다시 분석해야 할꺼 같다.

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

AVR reverse engineering (5) CustomShell  (0) 2018.08.06
reversing.kr CRC1  (0) 2018.02.07
AVR reverse engineering (3) 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