본문 바로가기

2. Reversing (리버싱)/1) Write UP

[2020.04.07] Reversing.kr | CSHOP 문제

 

http://reversing.kr의 CSHOP 문제를 풀어보도록 하자.

문제를 클릭하면 CSHOP.zip 파일이 다운받아진다.

 

zip파일을 풀고 CSHOP.exe 파일을 실행시키면 다음과 같이 회색 화면이 뜬다.

Exeinfo PE 툴을 사용하여 패킹 여부와 프로그램을 제작한 언어를 확인한다.

 

c#으로 만들어진 .net 프로그램이다.

닷넷(.NET) 프로그램?

닷넷 프레임워크(.NET Framework)는 마이크로소프트사에서 제공하는 윈도우 프로그램 개발 및 실행환경입니다.

네트워크 작업, 인터페이스등의 많은 작업을 캡슐화하여 코딩의 효율성을 증대시켰습니다.

.NET의 특징은 CLS(닷넷 프레임워크의 언어가 반드시 지켜야하는 언어 스펙)을 따르는 언어라면 어떠한 언어라도 닷넷 프레임워크에서 실행가능하며 CLR이라는 가상기계 위에서 작동하기 때문에 플랫폼에 독립적이며 궁극적으로 프로그래머가 코딩(특히 윈도우 프로그램)을 하는데 더 편한 환경을 제공해줍니다.

출처 : https://coding-factory.tistory.com/132

 

dotPeek을 이용해 FrmMain을 살펴보면 _Click함수에 특정 문자열이 저장되어 있다.

문자열을 입력해봤더니 정답은 아니었다.

 

바로 위에 Form1_Load 함수가 있는데 문자열은 비어있었다.

Form1_Load 함수는 어떤 버튼을 클릭하면 그 이후에 from을 실행하는 기능을 하지 않을까 유추할 수 있다.

InitializeComponent() 함수를 보면 새로운 Label 객체를 개속 새로 선언한다.

C#에서 Label은 static 문자열을 화면에 표시하는 역할을 하는 객체이다.

 

Point만 보면 위치가 (43, 123) (90, 123) 등으로 y 좌표는 같고 x 좌표만 다르다.

그리고 사이즈가 0인 버튼이 존재한다

이 버튼을 누르면 _Click 이벤트가 발생하고,

load_form에 있는 문자열(공백)이 특정 문자로 배치되며

각각의 라벨은 각 위치에 로케이션 된다.

.net 디컴파일러인 dnSpy 툴로 버튼의 사이즈를 수정할 것이다.

button size를 표현한 코드를 우클릭 후 [Edit IL Instructions]를 클릭한다.

size를 100 x 100으로 바꾼 후, 파일을 저장한다.

파일을 실행시키면 버튼이 보인다.

버튼을 클릭하면 key값이 보인다.

+ 이 문제는 버튼을 클릭하면 키 값이 보이도록 하는 프로그램이다.

이 문제의 원래 의도는 버튼 사이즈를 바꿔 버튼을 클릭해 키 값을 보는 것인데,

문제 의도와는 다르게 엔터나 스페이스바를 눌러도 버튼이 보인다...ㅋㅋㅋ