PRODRAMMER

프로그램 출처 : http://codeengn.com/


위 사이트 Challenges -> Start에서 해당 레벨의 파일을 다운받습니다.


Chrome은 위험 사이트로 인지해서 다운사이트를 막아버리더군요..

저는 Explorer로 다운받았습니다.



파일을 다운받습니다. 


다운받는 곳에 가면 수행과제가 적혀있습니다.






Korean : 

 Key를 구한 후 입력하게 되면 성공메시지를 볼 수 있다 

 이때 성공메시지 대신 Key 값이 MessageBox에 출력 되도록 하려면 파일을 HexEdit로 오픈 한 다음 

0x???? ~ 0x???? 영역에 Key 값을 overwrite 하면 된다. 


문제 : Key값과 + 주소영역을 찾으시오 

Ex) 7777777???????? 



English : 

 You will see a success message after finding the key. 

 If you would want the Key itself to replace the success message in the MessageBox, 

 open up a Hex Editor and overwrite the key value in the offset range 0x???? ~ 0x????. 


 Q : find the key value and the offset range and write the solution in this format : key???????? 

 (first ???? for the start and the next 4 ?s for the end). 





우선 프로그램을 실행시켜 보면


아무 값이나 넣고 Check를 눌러도 반응이 없네요


올리디버거로 분석해죠



시작 부분 바로 아래에 위와 같은 코드가 있습니다.

(저는 Search for → All referenced text strings에서 키값으로 추정되는 부분을 찾았더니 저 부분이더군요)


GetDlgItemInt 함수로 우리가 입력하는 값을 정수형으로 받아오는걸 확인할 수 있습니다.



그리고 조금 아래에 가보시면 루프를 돌면서 키 값으로 추정(?)되는 문자열을 가지고 열심히 작업하는


00401073주소의 함수를 확인할 수 있습니다.


함수 내부는


이렇게 생겼는데요.

재미있는 부분은

이 루프문을 들어오기 전에 입력한 값을 GetDlgItemInt 함수로 불러와 EAX 레지스트리에 저장한 상태입니다.

그리고 EAX의 값을 루프문으로 변환(?)작업을 거치는데... 루프 후에 나오는 값이 루프 전과 똑같습니다.

즉 29를 입력했으면 루프 전에도 EAX = 29, 루프 후에도 EAX = 29 입니다.



반복문 후에 EAX값과 7A2896BF를 비교하고 일치하면 통과 메시지박스를 호출합니다.

그러면 키 값을 구하실 수 있으시죠?
키 값은 ???????????입니다ㅎㅎㅎ




나머지 문제를 풀어보겠습니다.

메시지 박스에 키값을 출력하려면 Hex editor로 어느 부분을 수정해야하는지 묻네요.

↓저는 HxD를 사용합니다.↓


HxD로 12.exe를 열고 통과했을 때 나오는 문자열을 검색해보세요.


문자열을 답으로 수정한 후에 구간을 구하시면 됩니다.


답에서 요구하는 구간은 null값을 포함한 구간입니다.

0D38 ~ 0D4x




앞서 구한 키 값과 구간을 제출하시면 통과입니다.



'WarGame > CodeEngn.com' 카테고리의 다른 글

[CodeEngn Basic] Level.14  (0) 2016.08.08
[CodeEngn Basic] Level.13  (0) 2016.08.06
[CodeEngn Basic] Level.08  (0) 2016.08.05
[CodeEngn Basic] Level.07 (abex' 5th crackme)  (0) 2016.08.05
[CodeEngn Basic] Level.06 (Ra0r Crackme #1)  (0) 2016.08.05