One's Knowledge

CodeEngn basic 20번 문제 풀이 본문

리버싱/CodeEngn 문제풀이

CodeEngn basic 20번 문제 풀이

coveter 2025. 6. 27. 12:48

CodeEngn basic 20번

이 프로그램은 Key파일을 필요로 하는 프로그램이다. 'Cracked by: CodeEngn!' 문구가 출력 되도록 하려면 crackme3.key 파일안의 데이터는 무엇이 되어야 하는가 Ex) 41424344454647 (정답이 여러개 있는 문제로 인증시 맞지 않다고 나올 경우 Contact로 연락주시면 확인 해드리겠습니다)

패킹되어있지는 않다.

뭐 아무것도 없다.

문제를 보면 프로그램이 key파일을 읽어서 값이 맞으면 출력이 되는 것으로 예상된다.

코드를 보니 각종 api를 쓰는 것을 볼 수 있다.

한번 전체적인 구성도를 만들어 보았다.

 

요약하면 CRACKME3.KEY라는 파일을 찾고 그 파일의 바이트가 0x12인지 확인 후

각종 연산을 통해 DS:[4020F9]과 비교하여 값이 맞으면 성공화면이 나온다.

여기서 이제 buffer의 값이 어떻게 연산되었고, [4020F9]의 값이 무엇인지 알면 해결된다.

연산은 bl의 값이 0x41을 기준으로 buffer의 첫번째랑 하나씩 xor연산하는것을 볼수 있다.

연산하고 나서는 bl값도 1올려준다.

파이썬코드로 보면 다음과 같다.

나온값이 buffer랑 같은지 보자

똑같다.

이제 CodeEngn이라는 값이 저 결과값으로 나와야한다. CodeEngn!이 아니고 CodeEngn인 이유는 나중에 !는 알아서 붙는다.

여기서 추가된다. 그렇기에 CodeEngn이 나오면 된다.

찾았다. 

이 값이 맞는지 다시 확인해보자.

test에 18자리를 넣은이유는 key파일이 18자리여야해서 넣었고,

CodeEngn하고 더 연산하지 않고 반복문을 빠져나와야해서 0x49를 result[8]에 넣었다.

bl이 1씩 증가하기에 result[8]에서 빠져나오려면 0x49를 넣어야한다. 그래야 al이 0이되고 빠져나올수 있다.

CodeEngn이 잘 나오기에 저렇게 key파일을 바꿔주면 된다.

참고로 DS_4020F9는 나중에 buffer 마지막 4자리랑 비교한다. 

나머지는 00을 넣고 key파일의 마지막 4자리는 일단 아무거나 넣고 CodeEngn연산이 끝나고

DS:[4020F9]의 값을 확인하면 되겠다.

DS:[4020F9] 값은 7B 55 34 12이다. 저걸 key파일 마지막에 다시 넣자

자 이제 실행해보자.

성공!

답은 : 022D2721002820264900000000007B553412 이다.