Wargame/CodeEngn

code engn basic 7번

JeonYoungSin 2018. 1. 28. 17:39

code engn basic 7번 문제다.

 파일부터 실행해보았다.

흠.. 키값을 구해야돼나? 일단 파일부터 열어보자.

흠.. 처음보는 함수가 많다. 일단 IstrcatA, IstrcmpIA 함수 같은 경우는 익숙한 함수라 아무 생각없이

이거 위주로 분석해봤더니 키 값은 너무 쉽게 구할 수 가 있다. 뭐지?했는데 문제자체가 이걸 요구하는게

아니었던게 생각났다. 기억력이 금붕언가..? 그래서 함수를 좀 찾아보기로 했다.


흠.. 드라이브 이름과 관련있는 함수가 딱보니 GetVolumeInformationA 일 것 같다. 찾아보니 현재 파일이 위치한 드라이브 이름을 VolumenameBuffer(0040225C)에 반환해 준단다. 그 후 따라가보니 IstrcatA에서 위의 0040225C를 첫번째 변수로 넣어준다. IstrcatA에서 참조하는거보니 공백이다.  CetVolumInformationA 함수에서 RootPathName에 Null값을 넣어주면 C:가 반환된다 했는데 내 환경에서는 그냥 공백값이 반환되었다.

저 함수가 실행되고 나면  공백에 4562-ABEX가 추가되 0040225C에 4562-ABEX가 저장된다.  

그 후 보면 DL에 2값을 넣고 45225C,45225D,45225E,45225F에 1씩 추가를 한다. 이 때 45225C에 4562-ABEX가 저장되어 있으니 순서대로 4 , 5 , 6 , 2 값에 1씩 추가가 될 것이다. 저걸 DL이 1씩 감소하면서 점프문을 만나 반복되 총 2번 적용되게 된다. 그렇다면 6 7 8 4 이 값이 되게 된다. 실제로도 값이 변경되 적용이 되어있다.

이게 문제에서 원하는 정답인 것 같다.  코드엔진에서는 C드라이브 이름을 CodeEngn 이라고 했으니 그럼 C , o , d , e 에 아스키 코드값 2씩 올리면 끝!


아휴..웹쪽 문제만 주구장창 풀다보니 포스팅이 밀린게 너무많아서 할 엄두가 안난다... 괜히 엄한 리버싱만 포스팅.. 귀찮아도 슬슬 해야될 것 같다.