본문 바로가기

리버싱/Lena Tutorial

level 2

level 1과 같은 파일로 분석하지만 "Keyfile.dat"을 생성해서 근본적으로 해결하는 방법으로 진행할 것이다.

 

먼저 존재하는 "Keyfile.dat"를 삭제하고 임의로 "Keyfile.dat"를 생성하고 "abcd"를 입력했다.

 

leve1에서는 "Keyfile.dat" 파일이 없어서 CreateFileA 함수가 FFFFFFFF를 리턴하지만 여기서는 "Keyfile.dat" 파일을 생성했기 때문에 CreateFileA 함수가 44를 리턴한다.
JNZ조건문을 수행해서 에러메시지 부분을 건너뛰어서 ReadFile 함수로 분기된다.
level 1에서는 hFile이 FFFFFFFF이었으나 여기는 44인 것을 알 수 있다. CreateFileA에서 나온 데이터를 읽어들인다는 것을 hFile을 보고 알 수 있다.
 1. ReadFile함수는 1을 리턴하기 때문에 JNZ의 조건이 충족되어 4010B4번지 주소 값으로 분기된다.   2. 분기 후 "XOR EBX,EBX",  "XOR ESI,ESI" 명령어로 인해 EBX와 ESI가 0으로 초기화                      3. 402173번지가 가지는 값과 16진수인 10을 비교한다.                                                        
402173번지는 ReadFile 함수의 "pBytesRead" 파라미터의 주소와 같은데, 이는 파일로부터 읽어 온 바이트의 크기이다. 
402173번지의 값은 4

처음 "Keyfile.dat"에 "abcd" 4개의 문자를 입력했기 때문에 값이 4가 나온다.

비교를 하게되면 S[Sign Flag]가 켜지는데 그렇게 되면 JL조건문으로 인해 4010F7 주소값으로 분기되어 오류메시지가 뜬다. 그래서 글자수는 16이상이어야 한다. 
"Keyfile.dat"에 내용을 추가해서 글자수를 17으로 만들었다. 그리고 402173번지로 가면 16진수로 11이 있음을 알 수 있다.
1. 앞에서 EBX를 0으로 초기화 시켜서 가장 위에 있는 명령어는 "MOV AL,[40211A]"로 해석할 수 있다.                        2. 입력된 값 중 가장 먼저 입력된 'a'를 가져온다.               

 

40211A번지는 ReadFile함수에서 파일로부터 읽어들인 데이터를 저장하는 버퍼주소임을 알 수 있다.

 

위 사진을 보면 40211A번지부터 시작해서 "Keyfile.dat"에 입력된 값이 저장되어 있는 것을 볼 수 있고, 40211A에는 'a'가 저장되어 있다는 것을 알 수 있다. 아스키 값으로는 61

 

1. "CMP AL,0" 명령어는 61과 0을 비교한다고 해석할 수 있다(여기서 0은 NULL)

2. "CMP AL, 47" 명령에서 47은 "G"라는 것을 아스키코드표를 보면 알 수 있고, 만약 AL값이 "G"이면 JNZ조건문에서 JMP를 하지 않고 "INC ESI"로 넘어간다.

3. "CMP ESI,8" 명령어가 있다는 것을 확인할 수 있고 이 명령어로 "INC ESI" 명령어를 8번 수행해야 아래의 JL문을 통과할 수 있다는 것을 확인할 수 있다 -> 5번째줄의 JNZ문에서 분기되지 않아야하므로 AL값은 반드시 "G"이어야한다.

4. "INC EBX" 명령어를 통해 EBX가 1씩 증가하면서 dump에 있는 값들을 하나씩 가져온다. EBX가 0일 때 40211A번지에 있는 61을 EBX가 1일 때는 62를 검색(하나씩 순차적으로 검색하기 위함)

 

KEY조건

1. Keyfile.dat 파일이 반드시 있어야한다.

2. 파일 안에 16바이트 이상의 키 길이가 필요하다.

3. 그 중 8바이트 이상의 문자가 "G"이어야 한다.

 

KEY조건에 맞게 내용을 수정
성공메시지가 뜬다

'리버싱 > Lena Tutorial' 카테고리의 다른 글

level 8  (0) 2019.08.16
level 5  (0) 2019.05.23
level 4  (0) 2019.05.21
level 3  (0) 2019.05.20
level 1  (0) 2019.05.16