오늘은 웹 환경에서 자주 사용하지 않는 이진 문자열을 파싱하고 구조를 역공학하여 뷰어로 보여주는 사례를 소개해 드리겠습니다.
일반적으로 웹 환경에서 데이타베이스에 이진 파일을 CLOB또는 BLOB으로 넣거나 대용량 파일을 업로드, 다운로드 할때 보통 base64 포멧으로 많이 사용하고 있습니다.
웹 환경에서 base64를 사용하는 장점은 Binary 정보를 텍스트 기반으로 다룰 수 있기 때문이다. JSON과 같은 문자열 기반 데이터 안에 이미지 파일등을 웹에서 필요로 할때 base64로 인코딩하면 UTF-8과 호환 가능한 문자열을 얻을 수 있습니다. 기존 ASCII 코드는 시스템간 데이터를 전달하기에 안전하지 않으며, Binary 정보는 웹 송수신에서 바이러스로 오인받을 수 있으므로 최근 base64 포멧은 널리 사용되는 방법입니다.
하지만 base64 포멧의 디코딩으로 내부 코드에 대한 보안 및 인코딩/디코딩의 처리 리소스의 낭비를 고려해서 Binary의 이진 정보를 직접 문자열로 변환하여 활용하는 사례가 있습니다.
오늘 소개해 드리는 사례는 3D Mesh정보를 이진 문자열로 변환된 것을 역으로 Mesh 정보로 변환하고 HTML에서 표시하는 내용입니다.
먼저 이진 문자열을 사용하는 첫번째 이유는 보안일 것입니다.
이진 문자열을 분석하기 위해서는 제일 중요한 것이 제작자의 의도를 간파해야 합니다. 보안을 의식해서 구조를 꼬아놓는 개발자는 없습니다. 최대한 직관적이면서 빠른 구조를 채택하는 것이 개발자의 심리입니다. 여기에 분야별 지식이 있어야 합니다.
예를 들어 Mesh의 구조가 어떻게 되었는지 알아야 이진 문자열의 역공학 구조를 분석할 수 있게 됩니다.

위의 코드는 이진 문자열 아스키 파일의 Parser를 C언어로 작성하고 웹어셈블리로 컴파일해서 html 문장에서 3D 형상을 랜더링한 테스트 한 모습 입니다.
개발하고 문서화하지 않아서 벌써 기억이 가믈 가물 하네요. (자세한 소개는 계속 보완하겠습니다)




덧글