CodeEngn Basic07 풀이
Wargame | CTF/Reversing

CodeEngn Basic07 풀이

Basic07 번째 문제입니다. C드라이브의 이름으로 시리얼을 생성하는 프로그램인것같습니다.  

실행시켜보겠습니다.

시리얼을 입력받고 체크하는 단순한 프로그램입니다. 일단패킹 여부를 확인해보겠습니다. 음 패킹은 되어있지않은것같네요.

올리디버거로 가보겠습니다.

어셈블리어로 작성이 되었는지 코드가 매우 간결합니다. 

4562-ABEX 에서 4567 한자리각각 1씩 더하는작업을 두번해준뒤 L2C-5781 뒤에 덧붙여준것이 시리얼이군요.

시리얼은 쉽게 풀었고 코드엔진의 문제를 해결해 보겠습니다.

GetVolumeInformation 함수안을 살펴볼까요 일단 인수는 8개나 받는 함수입니다. 성공하면 0이아닌값을 반환하고 실패하면 0을 반환합니다.

드라이브 이름에 관한 질문이므로 GetVolumeInformation의 2번째 인수인 VolumeNameBuffer 에 접근하는 부분을 보면되겠습니다.

요 부분을 유심히보면 GetVolumeInformation 함수가 실행된후, strcat 함수의 인수로 드라이버의 이름을 저장하는 버퍼의 주소가담긴 스택을 참조하고있습니다. 004023F3 번지는 프로그램 제작자가 하드코딩해둔 문자열입니다.

즉 드라이버의 이름과 제작자가 지정해둔 문자열을 이어붙이는거네요 ! 

시리얼제작 알고리즘대로 시리얼 넘버를 유추해보면.. 드라이버 이름을 받아온후 이어붙여서 CodeEngn4562-ABEX가 되고, 드라이버이름의 버퍼에 한바이트씩 접근해서 1씩더하는 작업을 두번해줍니다 그럼 EqfgEngn4562-ABEX가 됩니다. 그리고 마지막으로 L2C-5781뒤에 이어붙여주면 시리얼이됩니다. 

최종적으로 L2C-5781EqfgEngn4562-ABEX가 시리얼 넘버가 되겠군요. 

실제로 드라이버이름을 CodeEngn으로 변경후 시리얼을 입력해보았습니다.


풀이완료!

'Wargame | CTF > Reversing' 카테고리의 다른 글

CodeEngn Basic09 풀이  (0) 2017.09.03
CodeEngn Basic08 풀이  (0) 2017.08.30
CodeEngn Basic06 풀이  (0) 2017.08.21
CodeEngn Basic05 풀이  (0) 2017.08.16
CodeEngn Basic04 풀이  (0) 2017.08.11