문제는 64bit elf 파일이며, stripted가 걸려 있는 파일 입니다.
실행시 아무런 반응이 없어서 strace로 실행을 시켜 보았습니다.
ptrace(PTRACE_TRACEME, 0, 0, 0) 에서 에러가 남을 확인 할 수 있습니다.
찾아보니까 주어진 프로세스에 대한 UDI가 현재 사용자의 UID와 매칭되지 않으면 다음과 같은 에러가 뜨는 것 입니다.
단순히 UID만을 검사 하는것이면은 프로그램에서 '없어도' 될것이라 판단이 되며 코드패치로 삭제시켜 보았습니다.
objdump로 함수 주소를 찾아도되고, IDA64에서 찾아도 무방 합니다.
찾아서 이렇게 NOP코드로 변환 시켜주게 되면 저 함수는 실행되지 않고 그냥 지나치게 되어 버립니다.
UID 검사 루틴을 제거해주니, 비정상적인 종료를 하지않고 프로그램이 제대로 돌아가게 되었습니다.
이 다음부터는 제가 푼것이 아니라
블로그 : http://f00l.de/blog/plaid-ctf-2013-three_eyed_fish/
writeup을 보고 풀었습니다
결론적으로 모스부호로 된 암호 였습니다.
strace의 모든 내용을 fish.txt에 담고, 내용을 살펴보면
다음과 같이 모스 부호를 뽑아 낼 수 있습니다.
ioctl으로 led를 구현 한것 같은데, 솔찍히 잘 모르겠네요..
자세한 설명 입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | #!/usr/bin/perl $on = "ioctl(3, KDSETLED, 0x4)" ; $off = "ioctl(3, KDSETLED, 0)" ; $sleep = "nanosleep({0, 250000000}" ; open (LOG, "fish.txt" ); $state = "OFF" ; $timer = 0; while ( $line = <LOG>) { if ( substr ( $line , 0, length ( $on )) eq $on ) { if ( $state eq "OFF" ) { if ( $timer == 3) { print " " ; } } $timer = 0; $state = "ON" ; } if ( substr ( $line , 0, length ( $off )) eq $off ) { if ( $state eq "ON" ) { if ( $timer == 1) { print "." ; $timer = 0; } if ( $timer == 3) { print "-" ; $timer = 0; } } $state = "OFF" ; } if ( substr ( $line , 0, length ( $sleep )) eq $sleep ) { $timer ++; } } print "\n" ; close (LOG); |
모스 부호를 뽑아 내는 프로그램은 다음과 같습니다.
Key is : AND0U0DIDNT0EVEN0NEED0AN0ARDUINO
'CAT-Security > 미분류' 카테고리의 다른 글
[Python] BeautifulSoup 모음 (0) | 2014.06.01 |
---|---|
[윈도우 후킹] Message hooking - 1 (2) | 2014.05.19 |
[CSAW CTF 2012] Reversing_400 (0) | 2014.05.15 |
[Codegate2014] dodoCrackme_200 (0) | 2014.05.13 |
[Reversing.kr] Direct3D_FPS (6) | 2014.05.08 |