[해킹 대회 문제] wargame.kr - EASY_CrackMe 문제풀이(Write Up)
wargame.kr - EASY_CrackMe 문제풀이(Write Up)
문제 분류: 리버싱(Reversing)
이번 시간에 풀어 볼 문제는 대표적인 워게임(Wargame) 사이트인 wargame.kr에서 제공하는 간단한 리버싱(Reversing) 문제입니다. 문제 이름은 EASY_CrackMe입니다.
▶ 문제풀이 사이트 주소: http://wargame.kr
Wargame.kr - 2.1
https://www.facebook.com/wargame.kr
wargame.kr
바로 문제풀이 사이트에서 [EASY_CrackMe] 문제를 선택해서 풀어보겠습니다.

[Start] 버튼을 눌러서 프로그램 파일을 확인합시다.

파일을 다운로드 하여 실행을 해보겠습니다.

실행을 하면, 단순히 무언가를 입력하여 제출하는 창이 나옵니다.

일단 아무 텍스트나 입력한뒤에 [check] 버튼을 누르면, 다음과 같이 틀렸다는 내용이 등장합니다. 확인 결과 문자열은 nono.. 인 것으로 판단됩니다.

이제 IDA Pro 32bit을 실행하여 해당 CrackMe1st.exe 파일을 분석해보도록 하겠습니다.

처음 IDA Pro로 프로그램을 불러오면, 위와 같이 프로그램의 크기가 작지 않기 때문에 로딩에 있어서 약간의 시간이 소요됩니다. 일단 가장 먼저 [Quick View(Ctrl + F1)]을 실행하여 [Names View]를 확인합니다.

이후에 찾고자 하는 문자열인 "nono"를 검색하여 더블 클릭 합니다.

그러면 다음과 같이 텍스트 부분이 나옵니다.

이제 마우스 우클릭을 한 뒤에 [List cross references to...] 버튼을 눌러서 이를 참조하는 코드를 확인합니다.

그러면 다음과 같이 함수 내용이 나옵니다.

이제 함수가 등장했으므로, [F5]를 눌러서 Hex-Ray를 동작시킵니다.

그러면 다음과 같이 Hex-Ray로 내용을 살펴 볼 수 있습니다. 보시면 "G00d!"라고 출력되는 부분이, 바로 정답 처리를 부분이라고 판단할 수 있습니다. 또한 서버와 통신하는 부분이 들어가 있습니다. 즉, 정답을 서버로 제출하게 되고 서버가 실질적인 Flag 값을 주는 것으로 파악할 수 있습니다.

소스코드를 확인해 보시면 다음과 같이 분석할 수 있습니다.
- v1[30]: 사용자가 입력한 문자열
- v4: 문자열의 길이
- wcsstr(A, B): A 문자열에 B 문자열이 포함되어 있는지 확인합니다.
- wtoi(A): A 문자열을 정수 형태로 변경합니다.
따라서 소스코드의 내용을 다음과 같이 정리할 수 있습니다.
문자열의 길이가 정확히 13글자이면서, 문자열에 _my_b와 birth가 포함됩니다. 그와 동시에 문자열이 1114로 시작해야 합니다. 왜냐하면 wtoi() 함수는 앞에서부터 출발하여 숫자가 아닌 문자를 만났을 때, 거기서부터는 수로 변경하지 않기 때문입니다.
이러한 조건을 만족하는 문자열은 1114_my_birth입니다.

따라서 해당 정답을 제출하면, Flag 값을 받을 수 있습니다.

혹은 서버의 API 주소에 바로 정답 데이터를 보내도 Flag를 얻을 수 있었습니다.

'해킹 방어 대회(CTF)' 카테고리의 다른 글
| [해킹 대회 문제] wargame.kr - DLL with notepad 문제풀이(Write Up) (0) | 2019.07.09 |
|---|---|
| [해킹 대회 문제] wargame.kr - keypad CrackMe 문제풀이(Write Up) (0) | 2019.07.09 |
| [해킹 대회 문제] pwnable.kr - flag 문제풀이(Write Up) (0) | 2019.07.06 |
| [해킹 대회 문제] pwnable.kr - lotto 문제풀이(Write Up) (2) | 2018.07.14 |
| [해킹 대회 문제] pwnable.kr - coin1 문제풀이(Write Up) (0) | 2018.07.14 |
컴퓨터공학과 석사 대학원생의 일기
제가 관심있는 분야는 개발과 보안입니다. 그 중에서 개발은 Web, Game, Data Analysis, Machine Learning 분야를 좋아합니다. 보안은 AI Security, Mobile Security, Ransomware, Social Engineering 분야를 좋아합니다. 사실 컴퓨터 분야면 전부 좋아합니다. 슬프게도 좋아하는 분야는 많지만, 잘 하는 분야는 없습니다.
아무튼 그래서 석사 진학을 결정했습니다. 석박 통합은 자신이 없어서, Only 석사로 지원하여 합격했습니다. 합격 과정에 대한 내용은 다음 포스트에서 확인하실 수 있습니다.
https://ndb796.tistory.com/305
2019 포항공대(POSTECH) 가을학기 컴퓨터공학과 석사 과정 합격 후기
2019년 포항공대(POSTECH) 가을학기 컴퓨터공학과 석사 과정에 합격 했습니다. 사전에 컨택은 하지 않았고, 대학원 진학 결정도 성급히 한 편이어서 이와 같이 합격까지 순탄하게 이루어질 줄은 몰랐습니다. 영어..
ndb796.tistory.com
결과적으로 2019년 가을학기로 입학하게 되었습니다. 현재 연구실의 주요 분야는 Security입니다. 사실 분야 자체는 굉장히 다양한데요, 어떤 Category를 딥하게 파볼까... 고민되기도 하고 설레기도 하네요.
< 석사 일기 시작 >
[2019-05-27]
현재는 포항에 내려가서 수학을 하기 전에 랩 선배님께 읽을 논문들을 소개해달라고 하여, 논문 목록을 받아 공부하는 중입니다.
[2019-07-02]
최대한 빨리 연구에 참여하고자, 포항에 내려와 공부하게 되었습니다. 연구실에 출근해서 컴퓨터를 받고, 운영체제를 설치한 뒤에 Git, 문서 프로그램, IDA Pro, FTP 접속 프로그램, Slack, VSC를 설치했습니다. 저희 랩은 Slack를 주 메신저로 사용하고, 각종 문서들은 별도의 서버에서 보관하고 있습니다. Latex는 처음 사용해 보았는데, 쉽지 않은 것 같습니다.
그리고 먼저 내려 온 만큼, 교수님께서 월급도 주시기로 하셨습니다. 기숙사 또한 학교 측에서 사전입사를 제공해주고 있습니다. 고시원에서 살던 저에게는 너무나도 좋은 환경입니다. 공부 열심히 하겠습니다!
[2019-07-03]
유랑 생활을 하다가, 개인적인 자리가 생긴 것이 익숙하지 않습니다. 물론 이틀간 정리를 한 끝에 기숙사와 연구실 자리 정리가 어느 정도 완료된 상태입니다. 슬리퍼, 선풍기, 스탠드 등을 구매하여 연구실 자리에 배치했습니다.
저희 랩장 선배 팔뚝이 엄청나게 굵습니다. 전형적인 Power Lifter의 Physical을 타고 났습니다. 랩장 선배님과는 가능하면 Physically Adversarial한 상황이 발생하지 않아야만 합니다.
밤에는 연구실 회식을 했습니다. 우리 연구실 남자 선배들은 전부 노래를 잘 합니다. (여자 선배님께서 노래를 못 한다는 말은 아닙니다.) 특히 성대 접지와 Mix Voice의 원리를 체득화 하고 계십니다. 제가 분위기를 띄웠어야 했는데... 발라드만 불러서 죄송했습니다.
[2019-07-04]
저는 저희 연구실에서 나이가 가장 어립니다. 연구실 선배님께서 '우리 연구실은 네가 압도적 막내구나?'라고 했습니다. 물론 제 피지컬은 이미 나이에 걸맞지 않는 Aging이 발생했으나 생물학적으론 제가 어린게 맞습니다. 선배들은 저보다 나이가 많지만 다들 동안입니다. 선배들한테 배울 점이 정말 많습니다. 사실 대학원에 대해 안 좋은 이야기도 많이 들어서 걱정했는데, 여기에서는 정말 재미있게 공부할 수 있을 것 같습니다. 선배들은 다양한 High-Tier Security Conference의 존재와, 좋은 논문들은 어떤 논문인지에 대해서 간략하게 설명해주셨습니다.
그리고 저는 제가 얼마나 몰랐는지, 무엇을 몰랐는지 서서히 깨닫고 있습니다. 지금까지 아무것도 모르면서 인터넷 공간에 Perturbation을 흩뿌리던 제가 부끄럽게 느껴집니다.
그리고 선배님들은 자차를 가지고 계신데(승용차 혹은 오토바이), 매 번 밥을 먹으러 나갈 때마다 운전을 해서 저를 태워주십니다. 사실 차를 운전하는 건 엄청나게 귀찮은 일입니다. 그럼에도 불구하고 저를 태워주시는 것에 감사합니다. 저는 그래서 태워 주실 때마다 감사하다는 말은 잊지 않고 꼭 하고 있습니다. 저는 노예가 되어도 상관없습니다.
[2019-07-05]
우리 연구실의 출퇴근 시간은 자유입니다. 하지만 대부분은 누가 시키지 않아도 10시 가량에 출근해서 저녁을 먹고도 남아서 연구를 진행합니다. 저도 그렇습니다. 어차피 집에 가봤자 컴퓨터 하는데, 이왕 연구실에서 컴퓨터 하는게 나으니까? 그런 것 같습니다. ㅋㅋㅋ
그리고 오늘은 교수님께서 짜장면을 사주셨습니다. 짜장면 집까지는 걸어서 갔는데, 교수님 걸음걸이가 저보다 2배는 빠릅니다. 그래서 자연스럽게 허기가 져서 짜장면을 허겁지겁 먹었습니다. 생각보다 학교 주변엔 맛있는 음식점이 많습니다. 어쩌면 그릇 째로 아그작 아그작 먹을 수 있지 않을까요?
저희 연구실은 신입생이 들어오면, 연구실 적응을 위하여 영어 세미나를 시킨다고 합니다. 지금 저는 Conference 발표 영어 듣기도 겨우 따라가고 있는 수준인데(그마저도 제대로 이해 못 함) 영어 발표를 잘 할 수 있을까요? 저도 잘 할 수 있습니다. 다들 하는 건데, 저도 해야죠!
[2019-07-06]
지금까지 제대로 논문을 정독한 적이 없었는데, Paper하나 읽고 Exploit Demo까지 해보는 것은 생각보다 더 많은 시간을 필요로 하는 것 같습니다. 지금까지 다양한 분야의 논문 15개 가량을 속독했지만, 제대로 읽고 구현까지 해 본 것은 없는 수준입니다. 저 같은 폐급이 또 있을까요?
영어 또한 정말 못 하는 편이지만 그래도 읽을 수록 속도가 느는 것 같아서 기분이 좋습니다.
공학 논문에서 하나의 문장을 이해하지 못하겠다면, 그 문장을 이해하기 위해서 또 많은 것들을 DFS로 찾아 공부해야 하는 것 같습니다. 레퍼런스의 레퍼런스의 레퍼런스... 끝나지 않는 재귀지옥... 아무튼 처음에 읽었을 때는 제대로 이해하지 못하고 넘어갔던 부분이, 나중에 다시 읽었을때 본 저자의 의미를 조금이나마 이해하게 되는 것 같습니다.
[2019-07-09]
선배들과 개인적으로 보내는 시간이 많아져서, 연구실에 대한 이야기를 더 많이 들을 수 있었습니다. 내가 생각했던 것 보다 더 공부하기 좋은 연구실이라는 생각이 들었고, 더 열심히 해야겠다는 생각이 들었습니다. 저도 좋은 Conference에 논문을 Submit하여 발표하게 될 날이 올까요?
[2019-07-20]
박사 선배님이 논문 Summary 과제를 여러 개 내주셨습니다. 저는 Academic Writing이 매우 부족한 편이기 때문에 많은 지적을 받고, 배울 수 있었습니다. (Top-Bottom 방식의 글 쓰기, 능동태 위주로 쓰기, 축약형 쓰지 말기, But/And/So와 같은 접속사 쓰지 말기, 글의 Flow 잘 살펴 보기. Evaluation/Implementation은 Author의 관점에서 서술하기 등) 아주 많은 것들을 배울 수 있었습니다. 신입생 교육 기간에서 다룰 모든 논문에 대하여 Summary를 해보라고 하셔서, 아마 당분간은 영어 공부를 많이 하게 될 것 같습니다.
[2019-08-09]
오늘을 마지막으로 신입생 교육 기간이 끝났습니다. 저희 연구실에서는 대학원생 신입생이 입학하면, 4주 간 선배들이 최근에 공부하고 있는 논문을 읽은 뒤에 해당 논문의 내용을 세미나로 발표해야 합니다. 일주일에 하나의 논문을 읽은 뒤에 내용을 정리하여 PPT로 만들고, 영어로 발표해야 하기 때문에 쉽지 않았습니다. 제가 최근에 주제로 잡고 발표한 논문은 Adversarial Example 관련 논문 2개, Fuzzing 관련 논문 1개, Blockchain 관련 논문 1개입니다. 일단 다양한 연구 주제에 대한 기본적인 내용을 이해할 수 있어서 좋았고, PPT 구성 및 논문 내용 발표에 있어서 많은 피드백을 얻을 수 있어서 좋았습니다.
[2019-08-14]
실험을 위한 연구용 PC 세팅 작업이 끝났습니다. 그래픽 카드 2장과 파워가 있는 상황에서 CPU, 메인보드, RAM 등을 구매하여 연구용 PC 조립을 했습니다. PC 조립이 끝난 이후에는 Ubuntu 18.04 OS를 설치하고, NVIDIA 그래픽 드라이버를 설치한 뒤에 Cuda 설정까지 마쳤습니다. 다만 제가 Headless한 GPU 서버를 지원하지 않는 메인보드를 구매해버려서, 그래픽 카드의 부착과 부팅 설정 등에서 매우 많은 우여곡절이 있었습니다. 그래서 매뉴얼을 쥐잡듯이 살펴 보며 Error Code를 확인하고, 각종 포럼을 뒤져 가며 문제를 해결해야 했습니다. GPU PC의 전반적인 구성에 대해 많은 내용을 공부할 수 있었습니다.
'기타' 카테고리의 다른 글
| 소규모 1인 유튜브 크리에이터의 세금 납부 방법은? (0) | 2019.07.13 |
|---|---|
| 하드웨어 정보를 알려주는 프로그램 (HWiNFO, HWMONITOR) (0) | 2019.07.13 |
| 인터넷으로 사업자 폐지 하는 방법 (홈택스 이용) (0) | 2019.06.24 |
| PHP에서 Facebook Login Access Token으로 이메일(Email) 정보 받아오기 [소스코드] (1) | 2019.06.03 |
| 구글 인 앱 결제(IAP) 서버 검증은 어떻게 하는가? [정리 요약] (1) | 2019.06.03 |
[해킹 대회 문제] pwnable.kr - flag 문제풀이(Write Up)
pwnable.kr - flag 문제풀이(Write Up)
문제 분류: 리버싱(Reversing)
이번 시간에 풀어 볼 문제는 pwnable.kr의 flag입니다. 이 문제는 가장 기본적인 리버싱(Reversing) 도구를 활용하는 문제입니다.
▶ 문제풀이 사이트 주소: http://pwnable.kr/play.php

위 URL에 명시되어 있는 곳으로 접속하면, 하나의 파일이 다운로드 됩니다. 파일은 flag이며, 이 프로그램을 분석하면 되는 문제입니다.

분석을 위해 IDA Pro 32bit 버전을 실행합니다.

다음과 같이 프로그램을 열 수 있습니다.

다만, 프로그램이 32bit 프로그램이 아니라 64bit라고 하네요.

따라서 IDA Pro 64bit 버전을 실행해서 다시 엽니다.

이제 분석된 소스코드를 확인합니다. [Graph View]로 보면 정상적으로 코드를 분석하기 어렵습니다.

따라서 스페이스 바(Space Bar)를 눌러서 [Text View]로 접속합니다.

다만, 어셈블리어가 정상적으로 출력되지 않는 것을 알 수 있습니다. 이럴 때는 일단 프로그램에 포함되어 있는 Strings에 대한 정보를 확인하면 됩니다. 따라서 [Quick View(Ctrl + 1)]을 확인하여, [Strings(Shift + F12)]를 열면 됩니다.

그러면 다음과 같이 UPX에 대한 내용을 확인할 수 있습니다. 바로 이 UPX 때문에 우리의 프로그램이 정상적으로 분석되지 않고 있다는 것으로 이해할 수 있습니다.

이는 프로그램이 UPX(Ultimate Packer for eXecutable)를 이용하여 패킹되어 있다는 것을 암시합니다. UPX는 다양한 파일 포맷을 지원하는 실행 파일 압축 프로그램입니다. 실행 파일 압축을 하게 되면, 파일의 크기를 줄일 수 있으며 기본적인 리버싱을 방어할 수 있다는 장점이 있습니다.
또한 이와 같이 패킹(Packing) 처리가 된 프로그램을 다시 언패킹(Unpacking)해서 원래의 소스코드를 제대로 확인할 수 있습니다. 언패킹 도구는 다음의 경로에서 확인할 수 있습니다.
https://github.com/upx/upx/releases/tag/v3.94
upx/upx
UPX - the Ultimate Packer for eXecutables. Contribute to upx/upx development by creating an account on GitHub.
github.com
윈도우 사용자의 경우 upx394w.zip을 다운로드 받아서 압축을 풀어줄 수 있습니다.

이제 압축을 푼 폴더에 flag 프로그램을 위치시킵니다.

이후에 명령 프롬프트(CMD) 상에서 해당 폴더로 이동하여 upx -d [파일 이름] 명령을 이용하여 특정한 파일을 언패킹 할 수 있습니다.

이후에 다시 언패킹 된 flag 파일을 IDA Pro 64bit로 열면 다음과 같이 깨지지 않고 코드가 나옵니다.

이제 [Text View]를 확인하면 Flag 값을 확인할 수 있습니다. 이것은 전체 플래그 값이 아니며, 플래그 값을 얻기 위해서는 직접 분석해보시는 것을 추천드립니다.

'해킹 방어 대회(CTF)' 카테고리의 다른 글
| [해킹 대회 문제] wargame.kr - keypad CrackMe 문제풀이(Write Up) (0) | 2019.07.09 |
|---|---|
| [해킹 대회 문제] wargame.kr - EASY_CrackMe 문제풀이(Write Up) (1) | 2019.07.06 |
| [해킹 대회 문제] pwnable.kr - lotto 문제풀이(Write Up) (2) | 2018.07.14 |
| [해킹 대회 문제] pwnable.kr - coin1 문제풀이(Write Up) (0) | 2018.07.14 |
| 자바(Java)를 이용해 Netcat 없이 문제풀이 서버와 통신하기 (0) | 2018.07.14 |
