YeoPEVA

코드엔진 basic 7번 문제 공략 본문

#Reversing/CodeEngine

코드엔진 basic 7번 문제 공략

YeoPEVA 2018. 3. 30. 00:20

코드엔진 basic 7번 문제 공략입니다. 

컴퓨터 C 드라이브의 이름이 코드엔진 일 경우 시리얼이 생성될때 코드엔진은 어떤 것으로 변경되는가...


우선 분석 진행해보겠습니다.





먼저, 프로그램 실행시 나오는 창입니다.



시리얼이 맞지 않을 경우


시리얼에 아무것도 적히지 않을 경우의 두 경우를 테스트해보았습니다.


그 결과, 시리얼이 맞을 경우, 정답 창을 띄을 것이며, 틀리거나 빈 경우 위와 같은 에러창을 뿜어낼 것이라 생각하고 진행하게 되었습니다. 



언패킹을 할 필요가 있나 체크해본 결과, 언패킹 할 필요는 없었습니다. 



진행 하던 도중, 하드 드라이브의 정보를 가져오는 것이 보였습니다.


GetVolumeInformation 해당 함수를 통해, 

C 하드 드라이브의 이름을 가져와, 4562-ABEX의 앞에 가져다가 붙이는 것이 확인됬습니다.




위와 같이 data4562-ABEX가 되었음을 확인 가능했습니다.



그 이후, 반복문을 통해, 

반복 2번을 돌리며, 한번 동작하게 될 경우,

앞 4개 문자 값에 

1씩 덧셈을 진행했다는 것이 확인 되었습니다.

[ASCII]



따라가보니.. 



위와 같이, strcat으로 연결되었던, 아까전의 시리얼이 나옵니다.



위에서 반복 구문을 거치고 난 뒤 확인한 결과,

fcvc4562-ABEX로 변경되었군요.

앞 4글자가, ASCII +2 결과로 인해

data -> fcvc로 변경되었습니다. 


그 이후로 strcat 함수가 수행되는 것이 확인 되었습니다.



그 결과, L2C-5781이라는 문자열이 위에서 반복문을 통과한 시리얼의

앞에 최종적으로 붙어, 아까전에 입력했던 시리얼과 비교하는 구문이 등장하게 되었습니다.



그렇다면.. 제 컴퓨터 환경에서는 L2C-5781fcvc4562-ABEX 가 시리얼이군요.



그렇다면 코드엔진일때는 어떨까요?

[CodeEngn]


아시다시피, 아까전 루프문을 통해 총 2번, C 드라이브 이름 앞 4글자에 1을 추가해게 됩니다.

그러니.. 


앞 4글자가, ASCII +2


C -> E

o -> q

d -> f

e  -> g

뒤는 아시다시피, 변경이 없습니다.


EqfgEngn이 답이 되겠군요.


END