[CODEGATE 2014] 코드게이트 2014 dodoCrackme Writeup



 □ description

==========================================

http://58.229.183.26/files/crackme_d079a0af0b01789c01d5755c885da4f6

==========================================


 □ number of solvers : 206

 □ breakthrough by

    1 : Hardc0de (02/22 09:14)

    2 : spamandhexlite (02/22 09:19)

    3 : bamb00 (02/22 09:23)


 


대회 문제중 풀이자가 2번째로 많았던 (포렌식 문제 다음) 문제이다.




64bit 환경의 리눅스 바이너리 이다.


IDA 로 열어본다.



Imports 가 매우 깔끔하다.

함수 호출없이 작성된 바이너리라고 생각된다.



시스템콜을 사용하는 것을 알 수있다.

64비트 시스템콜 목록(http://blog.rchapman.org/post/36801038863/linux-system-call-table-for-x86-64)




사용자로 부터 입력을 받을때는 read 함수를 사용할 것이다.

따라서 read system call 에 브레이크 포인트를 걸고 분석하면 된다.




read 함수는 RAX(EAX) 가 0일때 호출된다.



1바이트만 read 하도록 되어 있다.

저 부분에 break point 를 걸면 입력받을때 멈출 것이다.


이미 define 되어있는 문자열을 inc, dec 를 통해 키 값을 생성한다.

키가 틀렸다고 뜨는 두번째 write 함수에 break point 를 걸고 run(F9) 을 한다.

스택을 살펴보면 키 값이 생성 되어 있다.



KEY : H4PPY_C0DEGaTE_2014_CU_1N_KORE4

저작자 표시
신고

 

티스토리 툴바