경희대학교 PsCheck_win.exe 리버싱
코로나19의 여파로 1학기 모든 강의를 비대면 수업으로 진행하였지만, 경희대학교 본부 측에서 시험은 무조건 대면으로 하라는 원칙을 고수하고 있어서 기말고사를 위해서 학교에 왔다. 당연히 컴퓨터공학과였기 때문에 프로그래밍 수업을 듣는다. 프로그래밍 수업을 담당하시는 교수님께서는 합리적이신 분이라 수업도 편하게 들었고 시험도 제일 만족스럽게 보았다.
시험장에서는 강의실 안에서 노트북으로 시험지에 적혀있는 명세 리스트를 구현하는 방식으로 진행되었다. 그런데 강의실에서 학생들이 노트북으로 무엇을 하는지 일일이 알 수 없기 때문에 컨닝의 위험이 있다. 따라서 컨닝의 소지가 있을만한 통신 프로그램들을 확인하는 프로그램을 백그라운드에서 돌리고 시험을 보았는데, 시험 전에 심심해서 이 프로그램을 분석해본 일지를 블로그에 작성해본다.
1. 그냥 무작정 아이다로 까봤다.
리버싱에 대해서는 아는 것이 별로 없어서 그냥 아이다를 사용해서 프로그램을 보았다. 역시 아무것도 모르겠다는 생각이 뇌리에 스쳤고, 매번하던 대로 Strings를 보았다.
Python 에서나 볼 법한 __main__, __file__ 등이 눈에 띄었고 Py* 로 시작하는 문자열이 많았다. Python을 exe로 변환시켜주는 py2exe 를 알고 있었기 때문에 Python 코드를 PE로 변환시킨 프로그램임을 유추할 수 있었다.
2. Python Binary를 Readable code로 바꾸기
Python Binary를 디컴파일 할 수 있는 방법이 있어서 Python Exe Unpacker를 사용해보기로 했다.
[*] 참고자료 : https://blog.f-secure.com/how-to-decompile-any-python-binary/
Unpacked Binary 에서 사용자 코드일 가능성이 높은 파일 이름을 중심적으로 strings 명령어를 써가며 readable string을 뽑아냈다. 그랬더니 아래와 같은 HTTP 서버의 주소를 발견했다.
그래서 접속해보니 다음과 같은 디렉터리 리스팅 페이지를 마주하였다.
확인해보니 pscheck_reports.csv 에는 사용자의 행위로그가 csv 형식으로 저장되어 있었다. main.py는 해당 서버를 구동시키는 소스였다. 해당 웹 서버는 Python의 SimpleHTTPSever를 사용한다. 서버에서는 사용자의 입력을 HTTP Request로 받아들여 pscheck_reports.csv 파일에 저장한다.
3. Unpacked Python Files 분석 && 프로세스 종료 스크립트 작성
2번 과정에서 Unpacked 된 파일을 살펴보니 main.pyc 가 존재했다. pyc 파일은 Python에서 import에 사용하는 cache 느낌이라고 보면 된다. 이를 분석하기 위해 uncompyle6 라는 툴을 사용했다. 해당 도구를 사용하면 *.pyc 파일을 좀더 쉽게 분석할 수 있다. main.py 에서는 채팅 및 통신 프로세스를 리스트화하여 저장되어 있어 이를 검사하는 방식이었고, 검사 결과를 위의 서버에 보내는 루틴을 갖고 있었다. 그래서 시험 전에 main.py 에서 검사하는 프로세스를 모두 kill 하기 위해 Python으로 간단한 스크립트를 작성해보았다.
4. 시험 결과
프로세스 킬러도 무사히 작동하였고, 성적도 당연히 A+이었다 ! 아쉽게 만점을 못받았지만 3등하긴 했다. ^_________^
'리얼월드 (Real world)' 카테고리의 다른 글
경희Talk 취약점 분석기 (0) | 2020.08.11 |
---|---|
경희대학교 수강신청 매크로 제작기 (0) | 2020.08.10 |
네이버 오디오클립(AudioClip) SQL Injection 취약점 (1) | 2020.06.11 |
네이버 카페 분석 (0) | 2020.05.29 |
네이버 카페 Stored XSS 취약점 (0) | 2020.04.13 |