level 1과 같은 파일로 분석하지만 "Keyfile.dat"을 생성해서 근본적으로 해결하는 방법으로 진행할 것이다.
먼저 존재하는 "Keyfile.dat"를 삭제하고 임의로 "Keyfile.dat"를 생성하고 "abcd"를 입력했다.
처음 "Keyfile.dat"에 "abcd" 4개의 문자를 입력했기 때문에 값이 4가 나온다.
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"이어야 한다.