먼저 프로그램을 올리디버거로 열어보았을 때 createfile함수를 통해서 crackme3.key라는 파일명을 가진 파일을 가져오는 것을 볼 수 있다.
그래서 파일을 만들고 재실행 시켜보았다.
그랬더니 바로 밑에서 또 readfile함수를 호출하는데 호출후 비교를 한다.
4021a0에 있는 값은 함수를 호출하기 전 푸시했던 파라미터 값 파일의 바이트 수를 의미한다.
즉 파일의 길이는 16진수로 12여야 한다.
abcdefghijklmnopqr이렇게 18자리를 집어넣고 실행을 해보니 어떤 함수가 호출된 후 뒤의 4자리 빼고는 앞자리가 전부 바뀌었다.
또한 opqr전까지 CodeEngn이 들어갈 자리에 들어가 있는 모습을 볼 수 있다.
함수를 보니 bl은 41부터 시작이고 esi에는 cracme3.key파일에 입력한 값이 들어가 있음을 볼 수 있었다.
그리고 반복문은 bl이 4f가 될때까지 총 14번 반복된다.
그러면서 41부터 1씩 증가 하면서 내가 입력한 값과 xor연산이 되며 저장되는 것을 볼 수 있다.
그래서 내가 입력한 값과 41이 xor연산해서 C가 되도록 해서 CodeEngn이 되게 한후 n다음에 NULL이 되도록하고 나머지 5자리는 아무거나 채워 넣으면 될 것 이다.
이제 CodeEngn이 되도록 출력만 하면 되는데 al값이 1이 아니여서 메시지박스가 뜨지 않는다.
Al이 1이 되도록 하려고 위를 분석해보니
이부분에서 eax와 4020f9에 있는 값이 같다면 al을 1로 만들어 준다.
Eax는 아스키코드로 opqr이므로 crackme3.key파일의 마지막4자리임을 알 수 있다.
Crackme3.key파일의 마지막 네자리를 little-endian이므로 ?? ?? ?? ??로 바꾸어 주면 된다.
'문제 > CodeEngn_Basic' 카테고리의 다른 글
CodeEngn Basic 19 (0) | 2017.01.10 |
---|---|
CodeEngn Basic 18 (0) | 2017.01.10 |
CodeEngn Basic 17 (0) | 2017.01.10 |
CodeEngn Basic 16 (0) | 2017.01.10 |
CodeEngn Basic 15 (0) | 2017.01.10 |