codeengn basic 20번 문제다. 파일부터 실행해보자. 그냥 실행시키면 뭐가 없다. 패킹은 따로 되어있지 않다. 바로 열어보자. 우선 문제에서도 나와있듯이 키 파일을 열고 파일내용을 읽는 CreateFile, ReadFile 함수가 보인다. F8로 하나씩 실행하다보니 ReadFile 실행 후 CMP을 보면 4021A0의 값이 내가 입력한 bytes 크기인 9 파일의 내용을 다음과 같이 18bytes로 바꿔봤다. 동작시켜보니 정상적으로 JNZ SHORT 20.00401037을 통과한다. 그렇다면 이제 그 안을 분석할 차례이다. 우선 의심스러워 보이는 함수 두개를 BP걸고 내부로 들어가봤다. 여기서 이 알고리즘을 이해를 못해서 분석을 해보면 먼저 XOR을 통해 ECX,EAX를 0으로 초기화 한다. 다음과 같이 함수를 통해 암호화된 값들의 총합이 저장된 4020F9의 값과 12345678을 XOR하고 분석해보면 ESP+4 부분이 파일의 입력한 키 값이 담겨있는데 이를 ESI에 입력하고 ESI값에 0E를 ADD 다음으로 넘어가면 EAX값을 위에서 암호화하였던 4020F9값과 비교한다. 이 부분이 중요한데 다음의 SETE AL을 통해 AL값이 1이 나와야 TEST AL,AL구문을 통해 JE내부로 들어가 성공함수인 00401346으로 들어 갈 수 있다. 그렇다면 SETE AL을 통해 AL값이 1이 나오게 하는게 중요하는데 이를 위해선 CMP EAX,4020F9를 통해 ZF가 1이 되어야 하므로 EAX값이 4020F9값과 같아야한다.
실행해보니 다음과 같이 값이 뜬다. 무슨 값인가 했더니 다음 에서 볼 수 있듯이15~18bytes값을 담고있던 EAX의 앞부분이다. 즉 1~14bytes 부분인 암호화 되어 나온 키 값 부분에 마지막에 !가 함께 나온 것을 알 수 있다.
|
'Wargame > CodeEngn' 카테고리의 다른 글
code engn advance 2번 (0) | 2018.02.05 |
---|---|
code engn advance 1번 (0) | 2018.02.04 |
code engn basic 19번 (0) | 2018.02.04 |
code engn basic 18번 (0) | 2018.02.04 |
code engn basic 17번 (0) | 2018.02.04 |