본문 바로가기

CAT-Security/미분류

[PlaidCTF 2013] three eyed fish_100






문제는 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