문제풀이_CSAW_CTF2012_Reversing_100

Download Report

Transcript 문제풀이_CSAW_CTF2012_Reversing_100

I. CSAW CTF 2012 - Reversing 100
□ 요약
- 윈도우 프로그램에 포함되어 있는 Key 값을 확인하는 문제
대구분
소구분
주최
홈페이지
https://ctf.isis.poly.edu/archives/2012/writeups/
문제유형
Reverse Engineering (Win32)
난이도
문제정보
분석내용
사용도구
참고사이트
하 (Beginners)
PEID, OllyDbg, IDA
1) 문제풀이 (COMPUTER In HAVU)
http://havu.tistory.com/25
http://eindbazen.net/2012/09/csaw-2012-reversing-100/
https://ctf.isis.poly.edu/archives/2012/writeups/
2) Python xor 코딩
http://stackoverflow.com/questions/2612720/how-to-do-bitwise-exclusive-or-of-two-strings-in-python
□ 문제파일
http://www.iblue.kr
http://boanproject.com
II. 초기분석
□ 패킹정보
□ 프로그램 실행
- 패킹되어 있지 않음
- MS Visual c++ 1.0 으로 개발 추정
- 프로그램을 실행하면, Encrypted Key 메시지를 출력하고,
프로그램이 종료된다.
III. 문제분석 - 기본
□ OllyDBG 스트링 분석
- OllyDBG 로 Encrypted Key 스트링 구분을 확인하고 BP를 설정한다.
- [Ultra String Reference]-Find ASCII
□ 암호키 생성 및 팝업 구간 확인
- 입력받은 문자를 암호구간 (004010C8)에서 암호화하고,
- 팝업으로 절차 확인
III. 문제분석 – 로직분석(1)
□ 암호키 생성 및 팝업 구간 확인
※ IDA Hexray 메인 함수 확인 구간
- encrypt(key), strcpy, strcat, MessageBox구간 확인
III. 문제분석 – 로직분석(2)
□ Encrypt 함수 분석
- Key 값에 대한 연산 수행 (특별한 암호 알고리즘 로직 없음)
□ Encrypt 함수 (Hexray 변환)
□ Decrypt 함수 분석
- Key 값에 대한 입력 단위별 부울연산(xor with 0xFF) 수행 함
□ Decrypt 함수 (Hexray 변환)
IV. 문제해결
□ 문제해결방법 (CASE 1)
- Encrypt 함수 진입구간의 EIP(00401000)를 Decrypt 함수 진입구간 EIP(00401030)
으로 조작하여 xor 암호를 해독한다.
step1) BP설정 : 004010C8
step3) Key 값 확인 (welcome_to_csaw!)
step2) 004010C8의 CALL문 조작(CALL 00401000 => CALL 00401030)
※ 참고 : Decrypt 함수 진입 구간 ( 0040110)
IV. 문제해결
□ 문제해결방법 (CASE 2)
- KEY 배열에 정의된 key 문자열을 xor (부울연산, with
0xFF)으로 복호화하여 Key 값을 복원할 수 있다.
Step1) Key배열 정의 내용 확인
Step2) key 복호화 프로그램 코딩 (with Python)