Flash Encrypt
A SWF file observed dynamically by embedding it in a page, rather than decompiling the ActionScript.
SWF 파일을 HTML 에 임베드해서 브라우저에서 실행(또는 시도)해보는 ‘동적 관찰 방법’ 을 시도해보겠다.
<object>
<embed src="flashenc.swf" width="100%" height="100%"></embed>
</object>
이건 아주 단순하게 말해서 flashenc.swf 파일을 웹페이지 안에 플래시 객체로 삽입(embed) 하겠다는 뜻이다. 하지만 이건 옛날 풀이 방식이고 지금은 99% 작동하지 않는다. 아마 정적 분석을 사용해서 풀어야 할 듯하다.
여기 Flash Encrypt 전용 분석도구다: https://github.com/jindrapetrik/jpexs-decompiler/releases
일단 F6 로 파일을 런해본다. 위에처럼 여러 프레임을 반복하며 정신 사납게 버튼이 사라졌다 다른 장소에서 나타나기를 반복한다. 아마 그 버튼을 누르면 키플래그가 나오는 형식 같다.
이 이후 세팅이 중요하다. 밑에 보이는 세팅을 따라하면 된다. 그럼 디컴파일이 된 소스코드들을 script 디렉토리에서 볼 수 있다.
일단 여기에 있는 소스 코드의 의미를 이해해보자. spw 는 사용자가 입력한 비밀번호 값 같다. gotoAndPlay(3) 는 프레임 3으로 점프해서 거기 있는 코드/화면을 실행하는 것 같다. 그런 식으로 프레임 3에 가서 또 코드를 보는 식으로 풀면 된다.
즉 코드의 논리는 입력값이 맞으면 성공 프레임으로 이동하고, 틀리면 입력값을 초기화하는 것이다.
[입력]
↓
[버튼 1] spw == 1456 ? → frame 3
[버튼 2] spw == 8 ? → frame 4
[버튼 3] spw == 88 ? → frame 5
...
[최종 frame] → flag 출력
여러 단계를 통과해야 최종 정답이 나온다. 그러니까 코드를 분석해서 흐름을 따라갔을 때 다음 순서인 걸 알았다.
1456 → 25 → 44 → 8 → 88 → 20546 → 플래그
답을 찾으려고 문자열 찾기나 여러 가지 정적 분석 기구를 다 해봤는데 없었다. 공식 풀이를 보니 HTML 임베드 방법을 사용해 푸는 거 같은데, 지금은 불가능했다. Save as exe 로 동적 분석을 시도해보려 했는데, 그것 또한 막힌다.
대신 Flash Emulator 인 ruffle 을 깔아줬다! SWF 파일을 드래그앤드롭하면 동적 분석이 가능하다. 아까 얻은 흐름대로 하나하나 적어주면 끝에 플래그를 얻었다.


