Post

(Trend Micro CTF 2017) Reversing

100 - solve

File Signature가 PK라서, .zip으로 바꾸고 압축을 풀었더니 biscuit이 나왔다. biscuit의 File Signature가 Rar!이므로 .rar로 바꾸고 압축을 풀었더니 biscuit1과 biscuit2가 나왔다. biscuit1은 실행파일 biscuit2의 File Signature는 다시 PK. 그래서 또 .zip으로 바꾸고 압축을 풀려고 했더니 비밀번호가 필요하다. 비밀번호는 biscuit1에서 얻을 수 있는 듯.

biscuit1

바이너리를 하나 씩 따라가다 뭔가 그냥 나올 것 같아서 끝까지 한 번 가봤는데 그냥 macaron string이 만들어진다… 시간낭비… 이게 biscuit2의 암호다.

bitcuit4

Please create flag…..hint:….Flag = TMCTF{biscuit3_ biscuit5}

biscuit3

File Signature는 ÿØÿà..JFIF이므로 JPEG 파일 구조인 것 같음. .jpg로 변환하면 비스킷 사진이 나온다. 근데 hxd로 열어보면 맨 마지막에 biscuit.txtcreamPK 가 적혀있음. 아마 flag에 cream이 들어가는 것 같다.

biscuit5

실행파일. 리버싱해야함. 이것도 굳이 분석할 필요 없이 맨 마지막 리턴하기 직전에 문자열이 그냥 보인다. choux ( 슈 ) 답은 슈크림. TMCTF{choux_cream}

200

Using Clock:64, Invert:0, Bits Found:625 ASK/Manchester - Clock: 64 - Decoded bitstream: 1110111110111000 …

맨체스터 코딩 결과를 bit로 나타낸거라면 111이 나올 수가 없다. 각 clock마다 무조건 반전되니까 11까지는 가능해도.

즉 위 데이터는 맨체스터 코딩된 데이터를 디코드한 결과(Decoded bitstream)인 것 같으니까,

맨체스터 코딩된 625 bit를 64클럭으로 맨체스터 디코드했더니 여기 있는 512 bit가 나왔다. 이걸 보고 원래 625 bit를 구하라는 문제??

1 clock 마다 pulse를 인식해서 그걸 bit로 변환하는 거니까 512 bit가 나왔다는건 512 clock 동안 인식했다는 거고, 512 clock 동안 625 bit가 지나갔는데, 그 중 인식한건 512 bit뿐이라는 얘기가 된다.

64 bit마다 동일한 내용이 반복되니까 앞 64 bit만 봐도 되겠는데. - X아님. clock이 각 bit의 경계에 딱 맞는다는 보장이 없음. 그랬으면 625가 나왔어야함.

625는 5^4이고 512는 2^9라 공약수가 없기 때문에 일부분의 규칙을 찾아 일반화 하기는 어렵고 처음부터 끝까지 비교해야 한다.

512 clock 동안 625 bit가 지나갔으므로 1 bit가 지나가는 데 0.8192 clock 만큼의 시간이 소요된다.

맨체스터 코딩은 1 bit에 2 signal이므로 ( 1은 Low-High, 0은 High-Low )

1 signal에 0.4096 clock이 소요된다.

고 봐야하나??

아니면, decode는 그냥 1일 때 1, 0일때 0으로 인식하나?

이런 문제는 직접 manchester code를 decode하거나 encode하는 문제가 아니다. 그렇게 풀 수는 있겠지만 시간 제한을 고려하면 너무 오래걸린다.

직접 푸는게 아니고, 검색을 통해 정보를 획득해서 푸는 문제다.

ASK/Manchester clock 64로 검색해보면 Proxmark라는 프로그램의 output 형식이 문제 텍스트의 형식과 일치한다는 것을 알 수 있다. 즉 문제 텍스트는 Proxmark 펌웨어에서 나온 어떤 데이터다. Proxmark를 검색해보니 RFID 칩셋인 것 같다. RFID bitstream 어쩌고 분석은http://rodyne.com/?p=641여기서.

This post is licensed under CC BY 4.0 by the author.