관리 메뉴

HeeJ's

[02] LENA reversing tutorial 본문

<CTF>/<LENA tutorials>

[02] LENA reversing tutorial

meow00 2021. 11. 7. 00:46

2번 reverseMe.exe를 실행시켰는데, 바로 Congratz가 뜨기에 당황했지만,

 

잘 보면 폴더에 Keyfile이 존재한다. 이 파일을 만드는게 2번 문제의 목적이라고 한다.

keyfile을 지워주고 다시 실행시켜보았다.

 

그러자 라이센스가 만료되었다고 새 라이센스를 구입하라는 창이 떴다.

 

올리디버거로 열어보았다.

 

[F8]로 실행 시키다가 보니, CreateFileA라는 함수가 나왔다.

CreateFileA 함수는 '파일 또는 I/O 장치를 만들거나 여는 것'을 수행한다.

여기서 "Keyfile.dat" 파일을 불러오는 것 같다.

 

계속하여 실행해주더니 Keyfile이 없어서인지 오류 메세지가 출력되고, 프로세스가 종료되었다.

 

그렇다면 Keyfile.dat를 생성하고, 이에 라이센스가 들어가 있다면 문제를 해결할 수 있을 것이다.

 

reverseMe.exe가 들어있는 폴더 안에 메모장을 생성하고, 이름을 Keyfile.dat로 설정해주었다.

 

그리고 우선 아무 값이나 넣어주고 저장시켜주었다.

 

[Ctrl] + [F2]를 통해 ollydbg를 다시 실행시켜주었다.

Keyfile.dat이 생성되었기 때문에 CreateFileA 함수에서 다른 곳으로 JMP가 진행될 것이다.

 

역시 다음 함수인 ReadFile로 넘어올 수 있었다.

 

ReadFile을 실행시켜주다보니 아까 CreateFileA 함수에서 EAX에 들어있던 값이 hFile에 들어가는 것을 확인할 수 있다.

 

ReadFile의 Buffer에 들어가는 값을 확인하기 위해 Hex dump 창에서 [Go to] - [Expression] 을 통해

0040211A를 검색해주었다.

 

그러자 아까 Keyfile.dat를 생성하여 넣어준 임의의 값이 들어있는 것을 확인할 수 있다.

 

또한 ReadFile 함수의 pBytesRead 변수는 몇 바이트를 읽었는지 저장해주는 변수이다.

위의 변수의 값이 저장되어 있는 주소(00402173)도 찾아가서 확인해보았다.

 

Little Endian 방식으로 읽으면 00 00 00 04 Byte가 저장되어 있는걸 확인할 수 있다.

 

Keyfile.dat 라는 파일이 존재하기 때문에 ReadFile이 정상적으로 작동하여 JNZ 명령어가 실행되었다.

 

그 다음, 두 번의 XOR 연산으로 EBX와 ESI를 00000000로 초기화해주었다.

그 다음 명령어 부분을 보면, 00402173 주소와 '10'이라는 값을 비교하고 있다.

아까 00402173은 pBytesRead가 있던 곳으로, 4자리를 넣어주었기 때문에 '4'라는 숫자가 들어있었다.

 

계속 실행하다보면, Keyfile이 유효하지 않는다는 메세지가 뜬 것을 확인할 수 있다.

 

그렇다면 Keyfile.dat의 값을 10(16)Byte로 변경한다면 위의 CMP는 성공할 수 있을 것이다.

 

즉, Keyfile.dat의 값을 16byte로 변경해주었다.

 

그리고 다시 실행시켜주자, JL이 실행되지 않았다.

그러면 이어서 명령어를 살펴보자

 

MOV 명령어이다.

MOV A B 라고 한다면, B를 A에 넣어준다.

즉, EBX + 40211A의 값을 AL에 넣는다는 것이다.

EBX는 아까 XOR 명령어를 통해 초기화해주었으므로, 

20411A에 해당하는 덤프로 이동해주었다.

아까 Keyfile.dat에 임의로 넣어준 값이 들어있는 것을 확인할 수 있었다.

 

그리고 이 MOV 명령어를 실행시켜 보았다.

 

AL에는 아스키코드로 '1'을 뜻하는 31이 들어가게 된다.

 

다음 명령어에서, AL과 0을 비교하기 때문에 JE가 실행되지 않는 것을 확인할 수 있다.

 

그 다음, Keyfile의 데이터를 하나씩 불러와 AL에 옮기고, 아스키코드 47과 비교하는 부분이다.

47은 아스키코드로 'G'를 뜻한다.

 

이를 8번을 반복하게 된다.

 

그렇기 때문에 Keyfile의 앞의 8글자를 G로 바꾸어주고 다시 실행시켜보았다.

성공

'<CTF> > <LENA tutorials>' 카테고리의 다른 글

[08] LENA reversing tutorial  (0) 2021.11.23
[03] LENA reversing tutorial  (0) 2021.11.10
[01] LENA reversing tutorial  (0) 2021.10.05