- debugging_interface_signal.sal 파일이 제공됨
🔍 파일분석
로직 애널라이저에서 파일을 열면 아래와 같이 나온다.
확대하거나 축소할 수 있다. 우측의 1F 아이콘이 표시된 Analyzer 탭을 클릭한 다음 Async Serial을 클릭한다.
기본설정이 나오는데 아래와 같이 저장한다.
그래프를 보면 16진수 값의 브런치에 많은 프레이밍 오류가 있다는 것을 알 수 있다. 비동기 직렬 통신에 대한 정보를 기반으로 전송되는 각 데이터가 ASCII이고 시작 및 중지 비트가 있음을 알 수 있다. 따라서 우측상단에 햄버거 메뉴에서 ASCII로 변환한 다음 값을 확인해보자.
훨씬 더 읽기 쉬어진 것을 확인할 수 있다.
이제 프레이밍 오류를 해결할 차례이다. UART 등과 같은 신호는 병렬형태로 들어온 데이터를 직렬형태로 전환하여 데이터를 전달하는 하드웨어이다. 우리에게는 시리얼 통신으로 더 잘 알려져있다. 일단 UART 관련 프로그램인 putty, Xshell 등을 구하기 쉬워서 접근이 간편하다는게 특징이다. 또한 USB-To_Serial 같은 장비들도 구하기 쉽다는게 특장이다. 해커의 입장에서는 커널, OS의 각종 메시지나 디버그 메시지, 오류 메시지를 얻을 수 있다. 또한 부트로더를 획득하여 펌웨어를 획득하고 우리가 보지 못했던 다른 펌웨어를 볼 수 있다. 최종적으로는 Command Shell을 획득하여 동적 분석을 가능하게 할 수 있다. 필요한 장비는 다음과 같다.
- USB To Serial
- 점퍼 케이블
- 멀티 테스터
- Logic Analyzer
읽고 있는 비트가 너무 빠르거나 느린 경우 프레이밍 오류가 발생한다. 너무 빨리 읽거나 너무 느리게 읽으면 다른 값을 제공한다.
왼쪽은 정상간격으로 그래프를 읽은 것이고 오른쪽은 2배 빠르게 읽은 것이다. 오른쪽은 표시된 간격보다 더 많은 값을 읽게 된다. 정상적으로 읽었을 때는 01010의 바이너리 값이 나오지만 오른쪽의 경우 0011001100의 결과를 제공한다.
아까의 설정에서 8bit만 읽도록 설정했으므로 비트 전송률이 너무 낮은 것을 알 수 있지만 아래 그림에서 보이듯이 확실히 8 bit 이상을 읽고 있고 8 bit만 읽는 것으로 처리된다. 정확히는 31비트를 8비트로 읽고 있다. 이것이 애널라이저가 프레이밍 오류가 있다고 경고하는 이유이다.
짧은 간격의 그래프에서 마우스 커서를 가리키면 각 가장 짧은 간격이 32.02마이크로 초임을 알 수 있다.
실제 비트 전송률을 계산하려면 다음을 수행해야 한다.
Bit rate (bit/s) = 1 second / (32.02 x 10^(-6)) seconds = 31,230.480949406621 = 31,230
- 읽을 비트 수에는 소수점이 없으므로 소수점 이하 자릿수만 자른다.
- 플래그를 얻지 못하면 필요한 경우 31.231로 반올림한다.
설정으로 돌아가서 비트 전송률을 수정한다.
저장하면 프레이밍 오류가 사라지고 오른쪽 패널에 적절한 단어가 표시되는 것을 확인할 수 있다.
🚩 Flag 획득
- HTB{d38u991n9_1n732f4c35_c4n_83_f0und_1n_41m057_3v32y_3m83dd3d_d3v1c3!!52}
References