reversing.kr Easy_ELF

2016. 9. 7. 05:292018년 이전글/reversing.kr

이번엔 리버싱이답

퍄퍄퍄



문제를 다운로드 받아서

실행시켜보았다><




역공학을 해보쟙 챱챱챱

처음 부분이다.



nullsub_1에 들어가봤다

쓸모없다.

버리자.

그리고 sub_8048580에 들어가보자.

우워 뭔가 나오실듯 처럼 생겼다.

근데.....


무슨 함순데 딱히 쓸모있어 보이진않는다.

(그냥 내 생각이다.)

넘기자.


그리고 그 다음 함수인 sub_804851B를 보자.

 


뭔가 나올꺼처럼 생겼다.

먼저 처음 파일을 실행시켰을때 문구를 출력하는 부분이 보인다.

그리고 eax의 값이 1이면 왼쪽으로 가고 1이 아니면 오른쪽으로 가는 것으로 보이는데

딱.

봐도 오른쪽으로가는 값 즉, eax값이 1이 되지않으면 답이 아니다.

라고 주장하는 것처럼 보인다.


eax가 1이 되도록 하는 값을 찾아보자.


자, 그럼 다음함수 sub_8048434를 보자.



그냥 flag를 입력받는 함수인듯 하다.

flag는 byte_804A020에 저장되는 듯하다.



다음 함수인 sub_8048451을 보자.


뭔가 제어구조가 많아 보인다. 


구조를 더 잘 파악하려고 헥스레이해봣다.


if문으로 이루어진 구조인걸 잘 알수있다.



 

함수 구조를 자세히 보다보면 밑에 

eax값이 1이 되도록 출력하는 부분이 있다.

이부분을 타고들어가보자.

우선, 4번째 글자랑 0xDD랑 비교한다.

또, 첫번째 글자랑 0x78랑 비교한다.

일단 킵해두자.





그리고 세번째 글자와 0x7c를 비교하고

여섯번째 글자는 없어야한다.

그리고 5번째 글자가 0x58이랑 비교된다.

즉, 다섯 번째 값이 X여야한다.

또 위로 올라가면 네번째 값이 0xffffff88과 xor된다.

그러면 앞서 보았던 0xDD와 0xffffff88를 xor시키면 원하는 값이 나올 것이다.

0x55 즉, U이다.

그리고 세번째 값도 마찬가지로 0x32와 0x7c를 xor시켜주자

0x4E 즉, N이다,

그리고 첫번째 글자도 마찬가지로 0x34와 0x78을 xor시켜주자.

0x4c 즉, L이다.


마지막으로 두번째 글자는 0x31이어야 하므로 

1이다.


여기서 구한 플래그가 맞을 경우 왼쪽으로 넘어가는데


오!!!!!!Correct가 뜰것이다.

그리고 직접해보자.



오!!!!