티스토리 뷰

이제 실제 Lena 문제풀이를 통하여 분석 실습을 진행하기 전에 파일을 실행해보겠습니다.

 

 

 

그림과 같은 메시지박스가 출력 됩니다. 이제 Ollydbg를 실행시켜 파일을 분석하겠습니다.
 

 

 

캡쳐와 같이 따라오다 보면 CreateFileA라는 함수가 보입니다. 다음 함수는 파일을 열거나 만들 때 사용 하는 함수인데, 파라미터에서 보면 OPEN_EXISTING 모드로 진행되는 것을 확인 할 수 있습니다. 따라서 keyfile.dat의 존재 할 때 열어보는 것을 알 수 있게 됩니다. 그렇다면 keyfile.dat 파일을 생성해보겠습니다.


 

 

파일을 생성하였습니다.

 

 

파일을 생성 한 후 CMP구문까지 진행하면 Register정보 창에 EAX를 보면 달라진 값을 확인 할 수 있습니다. CMP EAX, -1 구문을 설명하면 CMP란 비교 한 후 같으면 JMP를 실행하는 구문인데 다음은 EAX가 -1과 같은지 비교한 후 다음 구문에 있는 JNZ 함수의 따라 같지 않으면 40109A로 이동하게 됩니다. 우리가 원하는 결과가 그곳에 있는지 확인하기 위해 40109A로 가보겠습니다.

 

 

ReadFile함수의 아래를 보면 TEST EAX, EAX로 연산 비교 하는데, 이 행동으로 EAX는 1이 됩니다.
따라서 JNZ함수에 따라 4010B4로 JMP 한 뒤 4010B4에서 EBX와 ESI를 XOR 연산으로 초기화 하게 됩니다. 다음 CMP 구문에서 402173과 10을 비교한 뒤 값이 10보다 작으면 4010F7로 이동하므로 4010F7을 확인해보겠습니다.

 

 

 

다음 구문을 보니 우리가 찾는 값이 아니므로 다시 돌아가 분석을 해보아야겠습니다. CMP 구문에서 402173과 10을 비교 하는데 ReadFile함수의 파라미터에서 402173을 확인 할 수 있으며, 따라서 keyfile.dat의 byte와 10을 비교 한다고 추측 할 수 있습니다. 여기서 10은 16진수 이기 때문에 16이고 이에 따라 JL구문에서 keyfile의 글자수가 16보다 작으면 JMP 하기 때문에 keyfile.dat에 0000000000000000을 입력하여 16보다 크게 만들어 주어야 합니다..
 

 

다음 CMP에서 402173의 값이 10이라는 결과를 확인 할 수 있습니다. 따라서 JL구문을 지나 진행해보겠습니다. 다음은 MOV, CMP, JE 함수까지 확인해보면 AL로 어떤 값을 가져오고 AL과 0을 비교하여 같으면 4010D3으로 JMP하게 된 구문입니다. 그 다음은 47과 비교해 같지 않으면 4010D0으로 JMP 합니다.

그런데 확인 해보면 AL에 30의 값이 들어간 것을 알 수 있습니다. 따라서 0과 같으면 4010D3, 47과 같으면 INC ESI로 진행 된다는 것을 알 수 있습니다. INC를 잠깐 설명하면 피연산자에 1을 더하는 함수로 더 아래쪽에 보면 ESI와 8을 비교해 작으면 잘못된 값, 같거나 크면 401205로 점프 한다는 것을 알 수 있게 됩니다. 따라서, ESI의 값을 8보다 크게 만들기 위하여 AL이 47의 값과 같아야 한다는 결론을 얻게 됩니다.

여기서 우린 0을 집어 넣었을 때 0이 30이란 값을 얻을 수 있었습니다. 따라서 47은 G라는 것을 알 수 있게 되는 것입니다. 결론적으로 keyfile에 16자리 중 8자리 이상이 G값이 들어가야 한다 라는 결론을 도출 할 수 있다.
 

 

실제로 값을 GGGGGGGGGG000000로 바꾸고 진행하는 과정입니다. ESI와 EBX의 값이 4인것을 확인 할 수 있습니다. 쭉 진행하여 보겠습니다.

 

 

 

캡처를 보면 ESI는 keyfile이 G를 10번 가졌으므로 16진수 값 A이고 EBX는 16번 진행되 16진수 값이 10이 됩니다. 그때 CMP AL, 0 과 JE구문이 작동해 4010D3으로 진행되고, 따라서 CMP  구문과 JL은 성립되지 않아 JMP 401205로 JMP하게 됩니다.

 

 

401205로 이동해 오니 우리가 원하는 MessageBoxA함수와 파라미터를 확인 할 수 있었습니다. 이제 실행하여 보겠습니다.

 


원하는 메시지박스가 출력됩니다.

 

이번에는 이렇게 마무리 하도록 하겠습니다. 다음 번엔 좀 더 준비를 더해서 올리도록 해보겠습니다~!

'Analysis > Reversing' 카테고리의 다른 글

PE Header 구조 정리글 두번째  (0) 2018.05.08
PE Header 구조 정리글 첫번째  (0) 2018.05.08
olly dbg 단축키  (0) 2018.05.03
입문자를 위한 ollydbg 기초 실습  (0) 2018.05.01
정적 분석과 동적 분석이란?  (0) 2018.05.01
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함