Caesar Cipher Text En/Decoder

Input



Output

Policy

  • Shift applied for only English alphabet.
  • Other characters are remained unchanged.
  • 영문자들만 쉬프트가 적용된다.
  • 그 외 문자들은 변경되지 않는다.

'해킹 & 보안' 카테고리의 다른 글

워게임 사이트 root-me.org  (0) 2019.11.27
checksec.sh Linux ver  (0) 2019.07.25
[HackCTF] Web - Home 풀이  (0) 2019.07.16
[HackCTF] Web - Guess me 풀이  (0) 2019.07.16
[HackCTF] Web - Hidden 풀이  (0) 2019.07.16

이제 거의 막바지에 다다랐다.

 

지속적으로 스트리밍을 하도록 하려면 m3u8파일이 계속해서 바뀌게 되는데, 이거를 위해서 manifest 파일도 계층구조를 좀 가져야 했다.

 

playlist라는 manifest가 기본적으로 있고 이녀석은 chunkData라는 녀석을 보라고 한다.

 

그리고 chunkData는 스트리밍이 됨에 따라서 ts파일이 계속 슬라이딩 윈도우 마냥 진행되면, HLS 클라이언트는

 

이를 알고 알아서 지속으로 chunkData를 업데이트 하면서 ts파일들을 버퍼링해서 재생을 시킨다.

 

 

요녀석을 구현하기 위해서 했던 짓들을 커밋 이력을 보면서 다시 복습을 했는데, 이걸 잘 몰라서 삽질을 한번 했던 것 같다.

 

m3u8라는 Nodejs 모듈에서 m3u8 파싱 기능을 제공한다. 이를 이용해서 직접 m3u8 파일을 한땀한땀 변경하면서 작업을 했던 것 같은데, 아마 ffmpeg에서 이것 또한 잘 해주는 그런 기능이 있었던 것 같다.

 

 

그리고 나서 테스트를 했다가, 클라이언트 단에서 재생이 자꾸 끊기는 현상이 있었는데,

 

이유를 당최 몰라서 해메다가 hls-client javascript 코드를 한번 까보면서 알게 되었다.

 

기승전 코드까보기..ㅠㅠ

 

코드중에 logger와 같은 객체가 있었는데 안에 모두 빈 함수가 있었었다.

 

그 함수들을 console.log와 같은 함수로 바꿔치기를 한 뒤 실행을 해 보니, 브라우저에서 콘솔로 warning들이 떳었다.

 

 

 

그 원인은 즉슨, 클라이언트에서 몇초마다 새로운 음악파일을 서버로 보내고, 서버에서는 각각을 ffmpeg으로 가공을 했다.

 

그런데 다시 hls client에서는 다른 파일에 대한  ffmpeg-ts가 들어오니, 음악의 흐름이 끊긴줄 알게 된 것이다.

 

 

그래서 이러한 현상을 해결하기위해서 ffmpeg에서 가공할 때 omit_endlist 라는 옵션(오래되서 가물가물하긴 한데 아마 맞을 것이다)을 추가해서 이러한 현상을 해결했던 것 같다.

 

 

어쨋든 이런식으로 해결을 하다보니 지금 상태의 코드가 되었다.

 

음질이라던지 내부적으로 부족한점이 매우 많지만, 그래도 어쨋든 대충이라도 동작은 하기는 했다.

 

중간에 삽질도 많았지만 여러모로 배우기도 했다.

 

더 이상 까먹기 전에 블로그에 정리를 했으니, 이 내용은 이만 당분간 묻어두도록 하겠다.

 

 

최종 코드 스냅샷이다.

 

https://github.com/Einstrasse/hls-service/tree/d92a3f6abb378cf0947c3ba928f9d8b57d3a8118

 

Einstrasse/hls-service

Nodejs base hls server. Contribute to Einstrasse/hls-service development by creating an account on GitHub.

github.com

 

이제 클라이언트에서 녹음한 파일이 서버로 전송이 되었으니, 이를 잘 가공해서 스트리밍 할 수 있도록 해 보아야 한다.

 

음성 파일을 ts 파일(Transport stream)으로 나누고, 그 리스트들을 가지고 있는 m3u8 manifest 파일을 생성해야 한다.

 

 

일단 음성 파일을 MPEG-TS 파일로 변경하는 것은 내 개인 능력으로는 터무니 없이 불가능하다는 생각이 드는 것은 자명하다(?)

 

따라서 무조건 ffmpeg 코덱을 이용해서 변환을 해야 하는데, m3u8파일은 포맷에 맞춰서 직접 만들어야 할 줄 알았다.

 

왜냐면 text파일 형식에 간단해보였기에... 하지만 ffmpeg에서 m3u8 파일 역시 생성해주는 옵션들이 있었다.

 

 

Nodejs 모듈 중에서 fluent-ffmpeg이라는 모듈이 있었다.

https://github.com/fluent-ffmpeg/node-fluent-ffmpeg

 

fluent-ffmpeg/node-fluent-ffmpeg

A fluent API to FFMPEG (http://www.ffmpeg.org). Contribute to fluent-ffmpeg/node-fluent-ffmpeg development by creating an account on GitHub.

github.com

 

맨 처음 요녀석을 보고 그냥 ffmpeg을 nodejs로 포팅한 대단한 녀석이라고 생각했다.

 

ffmpeg은 딱봐도 계산량이 많아서 C나 C++등으로 작성된 네이티브 바이너리일 것이고, Nodejs는 Javascript 런타임인데, Javascript로 코덱을 만든다라 대단하다 생각했는데

 

사실 fluent-ffmpeg 이녀석은 실제 ffmpeg 바이너리를 가지고 있을 때, ffmpeg의 수많은 인자들을 javascript API로 바꾸어주는 녀석정도 밖에 안되는 녀석이었다. ffmpeg 실행 커맨드라인 래퍼(wrapper) 정도 인 녀석이다.

 

그래도뭐 chile_process.exec("ffmpeg -args"); 요런식으로 하는 것 보다는 좀 나으니, 사용해보도록 했다.

 

여기 까지 작성해본 코드 스냅샷이다.

 

https://github.com/Einstrasse/hls-service/tree/2d41cf29fa853142e891d4cbedb638e9b66b3ba7

 

Einstrasse/hls-service

Nodejs base hls server. Contribute to Einstrasse/hls-service development by creating an account on GitHub.

github.com

 

그리고 클라이언트에서 음성 파일들을 보내는데, 이전에는 길게 녹음해서 한번 큰 덩어리를 보내는 식이었는데,

 

라이브 스트리밍이라는 컨샙을 맞추기 위해서, 짧은 시간 동안 녹음한 내용을 주기적으로 서버로 보내도록 코드를 변경해 보았다.

 

여기까지 변경한 코드 스냅샷 부분이다.

 

https://github.com/Einstrasse/hls-service/tree/d55e4a6cb72f7d59917b4d62905b43db31f29039

 

Einstrasse/hls-service

Nodejs base hls server. Contribute to Einstrasse/hls-service development by creating an account on GitHub.

github.com

 

+ Recent posts