Phalcon Debug는 트랜잭션이 표면적인 뷰만으로는 이해하기 너무 복잡할 때 트랜잭션 분석을 훨씬 쉽게 만들어줍니다. 높은 수준의 트랜잭션 추적에서 멈추는 대신, 사용자가 실행 흐름으로 직접 들어가 검증된 코드를 검사하고 내부 로직을 상세히 추적할 수 있도록 합니다. 이는 익스플로잇 분석, 근본 원인 조사, 팀 협업에 특히 유용합니다.
이 가이드에서는 Euler 프로토콜 익스플로잇 트랜잭션을 예시로 사용합니다. 목표는 Phalcon Debug가 사용자가 의심스러운 트랜잭션 단계에서 무슨 일이 발생했는지, 왜 중요한지에 대한 명확한 설명으로 나아가는 데 어떻게 도움이 되는지 보여주는 것입니다.
트랜잭션은 여기서 직접 열 수 있습니다: Phalcon 트랜잭션 페이지
디버그 모드 진입 방법
Phalcon에서 디버그 모드로 진입하는 방법은 두 가지입니다.
첫 번째는 Invocation Flow 뷰의 특정 행에서 진입하는 방법이고, 두 번째는 트랜잭션 페이지 우측 상단의 Debug 버튼을 통한 방법입니다. 두 방법 모두 동일한 디버깅 환경으로 연결되지만, 이미 의심스러운 단계를 발견하고 정확히 그 지점에서 분석을 시작하고 싶을 때는 Invocation Flow에서 시작하는 것이 더 유용한 경우가 많습니다.
Euler 익스플로잇 예시에서, 트랜잭션에는 Aave에서 플래시 론을 빌리고 DAI를 Euler에 예치하는 등 많은 단계가 포함되어 있습니다. 특히 의심스러운 단계는 donateToReserves() 호출인데, 공격자가 프로토콜에 매우 큰 금액을 기부하는 부분입니다. 이는 더 깊은 검토가 필요한 유형의 행동이며, Phalcon Debug를 통해 사용자는 바로 그 지점에서 분석을 시작할 수 있습니다.

디버그 뷰 레이아웃
디버그 모드에 진입하면 Phalcon은 단계별 트랜잭션 분석을 위한 작업 공간을 표시합니다. 레이아웃은 다섯 개의 핵심 패널로 구성됩니다.
Call Trace Panel은 외부 호출 및 이벤트의 추적을 보여줍니다. Source Code Panel은 현재 컨트랙트의 소스 코드를 표시하고 관련 라인을 강조합니다. Debug Console은 호출 수준의 단계 제어를 제공합니다. Debug Trace Panel은 내부 및 외부 호출을 모두 포함한 현재 컨트랙트 호출 스택을 보여줍니다. Parameters & Return Values Panel은 현재 호출의 입력값과 출력값을 표시합니다.
이 레이아웃은 사용자가 트랜잭션의 한 부분을 이해하기 위해 여러 도구를 오갈 필요가 없기 때문에 유용합니다. 추적을 읽고, 코드를 검사하고, 한 곳에서 실행 로직을 따라갈 수 있습니다.
때로는 소스 코드 패널에 코드가 표시되지 않을 수 있습니다. 이는 보통 현재 호출이 검증되지 않은 컨트랙트를 가리킬 때 발생합니다. 이 Euler 사례에서 공격자 컨트랙트는 검증되지 않아 소스 코드를 사용할 수 없습니다. 하지만 eDai 컨트랙트는 검증되어 있으므로, 사용자는 Step In을 통해 검증된 로직 내에서 분석을 계속할 수 있습니다.

검증된 eDai 컨트랙트로 진입한 후, 사용자는 donateToReserves()의 구현 내부로 더 깊이 들어가 의심스러운 트랜잭션 단계 뒤에 있는 정확한 코드 경로를 검사할 수 있습니다.

디버그 콘솔 사용 방법
디버그 콘솔은 사용자가 트랜잭션 실행을 상세히 이동할 수 있도록 설계되었습니다. Call Trace Panel은 외부 호출과 이벤트만 표시하고 내부 함수 호출은 표시하지 않기 때문에 이는 중요합니다. 디버그 콘솔이 그 간격을 채워줍니다.
Phalcon은 이 패널에서 여러 탐색 제어 기능을 제공합니다. Next와 Previous는 각각 두 가지 버전이 있습니다. 빨간색 버튼은 전체 호출 추적을 이동하고, 파란색 버튼은 현재 함수 내에서 이동합니다. Step In은 피호출 함수로 진입하고, Step Out은 현재 함수의 호출 지점으로 돌아갑니다.
이 제어 기능을 통해 사용자는 컨트랙트 로직을 한 줄씩 이동하며 상태 변화가 어떻게 발생했는지 이해할 수 있습니다. Euler 사례에서 이를 통해 donateToReserves() 뒤에 있는 더 깊은 문제를 밝힐 수 있습니다. 분석 결과, 공격자가 1억 eDAI를 기부하여 eDAI와 dDAI의 관계를 변화시키고 해당 포지션을 청산 가능하게 만든 것으로 나타났습니다. 근본 원인은 donateToReserves()가 청산 가능 여부에 대한 유동성 검사를 누락하여 공격자가 청산을 실행하고 가치를 추출할 수 있었다는 것입니다.
바로 이 지점에서 Phalcon Debug는 단순한 뷰어를 넘어섭니다. 컨트랙트 실행 내부에서 근본 원인을 찾기 위한 실용적인 트랜잭션 분석 도구가 됩니다.


디버그 뷰 공유
또 다른 유용한 기능은 디버그 뷰를 URL로 직접 공유할 수 있다는 것입니다. 공유 링크에는 선택된 추적 행이 포함되어 있어, 다른 사용자가 열면 즉시 동일한 디버그 뷰를 볼 수 있습니다.
이는 보안 팀에게 특히 유용합니다. 긴 설명을 작성하거나 팀원에게 동일한 뷰를 수동으로 재현하도록 요청하는 대신, 한 분석가가 정확한 컨텍스트를 공유할 수 있습니다. 이는 인시던트 분석이나 내부 검토 중 협업을 훨씬 빠르게 만들어줍니다.
일반적인 워크플로우는 다음과 같습니다. 먼저, Invocation Flow에서 의심스러운 단계를 찾습니다. 다음으로, 디버그 모드를 사용하여 코드, 내부 호출, 파라미터를 검사합니다. 마지막으로, 팀원들이 동일한 컨텍스트를 검토하고 논의를 계속할 수 있도록 정확한 디버그 뷰를 공유합니다.
기타 유용한 기능
Phalcon Debug에는 분석 효율성을 향상시키는 몇 가지 추가 기능이 포함되어 있습니다.
Call Trace View는 파라미터 스위치를 켜면 전체 파라미터를 표시할 수 있습니다. 이를 통해 사용자는 각 단계를 일일이 열지 않고도 더 풍부한 컨텍스트를 검사할 수 있습니다.
외부 호출의 경우, 사용자는 Rawdata를 클릭하여 원시 호출 파라미터를 검사할 수도 있습니다. 이는 디코딩된 데이터만으로는 충분하지 않거나 콜데이터가 실제로 어떻게 구성되었는지 확인하고 싶을 때 유용합니다.
이러한 세부 사항은 작아 보일 수 있지만 실제 분석 중에 많은 시간을 절약해줍니다. 익스플로잇 조사, 감사 작업, 컨트랙트 검토에서 작은 워크플로우 개선이 큰 차이를 만드는 경우가 많습니다.


하나의 트랜잭션을 넘어 더 넓은 공격 경로에서 자산이 어떻게 이동했는지 추적하고자 하는 팀에게는 MetaSleuth가 자연스러운 다음 단계입니다. 트랜잭션 수준의 근본 원인이 명확해진 후, 조사자가 주소와 엔티티 전반에 걸쳐 자금을 추적하는 데 도움을 줍니다.
Phalcon Debug는 트랜잭션이 표면적인 읽기만으로는 너무 복잡하지만 명확한 설명이 필요할 때 가장 유용합니다. 사용자가 의심스러운 추적 항목에서 실제 코드 경로, 내부 로직, 근본 원인으로 나아가는 데 도움을 줍니다. 이는 보안 연구뿐만 아니라 인시던트 검토, 익스플로잇 분석, 스마트 컨트랙트 평가에도 가치 있게 만들어줍니다. 배포 전 코드를 강화하고자 하는 팀에게는 이 같은 사고방식이 자연스럽게 스마트 컨트랙트 감사 및 인프라 감사와 연결되는데, 이곳에서는 복잡한 동작이 실제 위험이 되기 전에 검토됩니다.



