먼저 프로그램을 올리디버거로 열어보았을 때 createfile함수를 통해서 crackme3.key라는 파일명을 가진 파일을 가져오는 것을 볼 수 있다


그래서 파일을 만들고 재실행 시켜보았다.



그랬더니 바로 밑에서 또 readfile함수를 호출하는데 호출후 비교를 한다


4021a0에 있는 값은 함수를 호출하기 전 푸시했던 파라미터 값 파일의 바이트 수를 의미한다


즉 파일의 길이는 16진수로 12여야 한다.



abcdefghijklmnopqr이렇게 18자리를 집어넣고 실행을 해보니 어떤 함수가 호출된 후 뒤의 4자리 빼고는 앞자리가 전부 바뀌었다.


또한 opqr전까지 CodeEngn이 들어갈 자리에 들어가 있는 모습을 볼 수 있다.



함수를 보니 bl41부터 시작이고 esi에는 cracme3.key파일에 입력한 값이 들어가 있음을 볼 수 있었다


그리고 반복문은 bl4f가 될때까지 총 14번 반복된다


그러면서 41부터 1씩 증가 하면서 내가 입력한 값과 xor연산이 되며 저장되는 것을 볼 수 있다


그래서 내가 입력한 값과 41 xor연산해서 C가 되도록 해서 CodeEngn이 되게 한후 n다음에 NULL이 되도록하고 나머지 5자리는 아무거나 채워 넣으면 될 것 이다.



이제 CodeEngn이 되도록 출력만 하면 되는데 al값이 1이 아니여서 메시지박스가 뜨지 않는다.


Al1이 되도록 하려고 위를 분석해보니



이부분에서 eax4020f9에 있는 값이 같다면 al1로 만들어 준다.


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

+ Recent posts