뭔가 개인 블로그인데 간단한 취미소개도 없어서 써본다.

 

LCK 시청

롤 칼바람 나락

가끔 그림 그리기

홀로라이브 키리누키 보기

 

크게 정리하면 이정도인듯

삶에도 scheduling이라는게 필요하다. 매일 매 순간을 급하면서 중요한 일을 하면 방향을 잃을 수 있다.

노력은 벡터라는 말에 동의하는 입장에서, 뱡향을 잃으면 압축적으로 원하는 곳에 도달하는 것이 어려워진다.

 

방향을 제대로 잡기 위해 주기적으로 급하지 않지만 중요한 일을 분별하고 routine에 포함하여 수행하는 시간이 필요하다. 그리고 이것을 가능하게 하는 것이 흔히들 말하는 work-life balance라고 생각한다.

 

 

다만 일적인 부분 외에 취미를 가지고 있는 입장에서, 인생에 취미를 끼워넣고 계속 살 수 있을지는 의문이다. 과연 이게 성인에게 주어지는 공부 연애 취직 결혼 내집마련 육아 등등의 임무를 수행하며 가능한걸까

 

 

하는 잡생각.

'기타' 카테고리의 다른 글

취직에 있어서 지나온 과거의 점은 어떻게 이을 수 있을까  (0) 2022.07.20
Info postscript  (1) 2022.04.24
Info  (0) 2022.01.13
대학원 원서 냈다  (0) 2020.05.25
HiKey960 보드에 AOSP + OP-TEE 올리기 시도 중  (0) 2020.04.09

이쪽을 공부하다 보면 흔히 오타쿠 문화라고 불리는 서브컬쳐와 관련된 요소들이 종종 보인다.

이 분야가 묘하게 힙스터스러우면서도 코드가 맞는 모양이다.

그래서 생각나는대로 간단한 설명과 함께 연관성을 조사하고 짚어보기로 했다.

 

Computer Security 관련 팁은 아니고 순전히 흥미본위의 글이다.

 

1. Mirai botnet (2016)

 

Mirai botnet 관련 이미지

 

Mirai는 무작위 IP검색을 통해 보안 설정이 허술한 IoT 기기를 감염시켜 좀비화하고, 이들을 봇넷(botnet)으로 만들어 DDoS 공격을 위해 사용하는 worm malware이다.

흔히 "미라이 봇넷"으로 알려져 있으며 DNS서버를 공격하여 이를 이용하는 여러 사이트가 마비된 꽤나 유명한 사건이 있었다. 미라이 봇넷 이후로 여러 변종이 생겼는데, 어떤 malware는 암호화폐 채굴을 위한 봇넷을 만들기도 한다.

 

 

애니메이션 미래일기

 

미래일기의 가사이 유노

 

여기서 mirai는 malware 작성자가 보았던 애니메이션 "미래일기"의 이름을 따서 정했다고 한다.[각주:1] 흔히들 얀데레 짤로 알려진 캐릭터가 이 애니메이션의 등장인물이다.

 

 

2. Armitage (2010~)

 

Armitage 로고

 

Armitage는 GUI를 이용하여 컴퓨터의 취약성 테스트나 remote system에 침입 테스트를 수행할 수 있는 오픈 소스 기반 도구이다.

실질적인 취약성 테스트 기능에 해당하는 Metasploit과 연동하여 frontend GUI를 제공하는 Java 기반 어플리케이션이며, 다른 도구에 비해 시각적으로 알기 쉽게 모의 exploit을 수행할 수 있는 점이 장점. 보안을 공부해본 사람이라면 한번쯤 다뤄보는 Kali Linux의 패키지로 관리되고 있어 꽤나 익숙한 도구일 것이다.

 

관련 자료를 조사하며 보니 Armitage는 Metasploit의 하위 프로젝트로 존재하다가 2016년에 떨어져 나왔으며, 공식 웹사이트가 지원 중지되고 지금은 Kali Linux의 패키지에서 소스 코드가 관리되고 있었다.[각주:2]

 

Cobalt Strike 관련 이미지

 

정황상 Armitage의 최초 개발자인 Raphael Mudge가 2011년 상위집합 상업용 도구인 Cobalt Strike를 제작하였는데, Armitage와 마찬가지로 Metasploit에 종속적인 프로젝트로 존재하다가 Cobalt Strike 3.0 이후로는 Metasploit과의 종속성을 없애고 회사 소프트웨어로 편입한 것으로 보인다.[각주:3] 이 과정에서 Armitage의 관리를 포기한 것으로 추정되며[각주:4] 그래서인지 Kali Linux의 Armitage 패키지 버전은 2016년에 멈춰 있다.[각주:5]

 

 

Armitage III 타이틀 이미지

 

나오미 아미테이지

 

그렇다면 Armitage가 서브컬쳐랑 무슨 상관인가 싶은데, 일단 로고 디자인이 1995년 제작된 동명의 애니메이션 "Armitage III" (아미테이지 더 서드)의 여주인공 나오미 아미테이지와 유사해 보인다. 조사하며 알았는데 국내에는 잘 알려지지 않았지만 영미권에서는 당시 꽤나 유명했었다고 한다. 개발자가 이 작품에서 영감을 받은 듯.

 

Total Xaker 40호 표지

 

또한 Total Xaker라는 러시아의 보안 관련 매거진 (지금은 폐간된 것으로 보인다) 40호[각주:6]에 Armitage가 소개된 당시, 표지가 나오미 아미테이지의 피규어 버전인 것으로 보아 직접적인 관련이 있다고 생각했다.

아래 Total Xaker 40호의 pdf파일을 첨부해둔다.

pdfcookie.com_total-xaker-40.pdf
13.86MB

 

 

3. TOMOYO Linux (2009~, Linux mainline)

 

TOMOYO Linux 로고

 

TOMOYO Linux는 MAC(Mandatory Access Control)를 구현하는 리눅스 커널 모듈 형태의 LSM(Linux Security Module)중 하나이다. 리눅스는 기본적으로 소유자나 소유 그룹에 기반한 파일 접근 권한인 DAC(Discretionary Access Control)를 채택하고 있는데, TOMOYO Linux를 통해 추가로 MAC를 도입하여 파일 to 파일의 접근 권한 규칙을 규정하고 이에 따른 access control을 만들 수 있다. SELinux와 같은 기존 LSM보다 MAC를 사용하기 쉽다는 점이 장점.

최초 작성자는 한다 테츠오(半田哲夫)이며 2012년까지 일본의 NTT DATA사의 지원을 받았다고 한다. 지금까지도 버전관리 되고있는 모듈.[각주:7]

로고에서는 리눅스를 의미하는 펭귄이 보안관 차림으로 있는 모습으로 리눅스 보안 모듈임을 나타내고 있다.

 

여기서 TOMOYO는 카드캡터 사쿠라(한국명 카드캡터 체리)의 등장인물 다이도우지 토모요에서 따온 것으로 추정된다. 아마도 보안 모듈이 일종의 감시카메라와 비슷한 역할을 한다는 것에서 착안한 것이 아닐까 싶다. 정작 작중에서는 사쿠라의 모습을 찍어두려는 사생팬같은 모습이었지만..

 

 

카드캡터 사쿠라의 등장인물 다이도우지 토모요

 

TOMOYO Linux 로고 캐릭터

 

로고의 펭귄 캐릭터가 캠코더를 들고 있는 모습[각주:8]과 개발자의 TOMOYO Linux 사례연구 pdf[각주:9]의 수많은 카드캡터 사쿠라 캐릭터 그림들을 보면 확실하다고 할 수 있겠다.

 

 

 

이 외에 추가로 발견하는대로 조금씩 갱신할 예정.

 

I like learning

Major

  • Computer Science & Engineering

Technical interest

  • Embedded / IoT system security
  • LLVM
  • Unity game engine
  • Digital painting

Experience

  • C/C++, C#, Java, Python
  • Linux
  • Unity game engine
  • Photoshop
  • etc.

Mail

  • dvyurij(\at)gmail.com

Sitemap

'기타' 카테고리의 다른 글

Info postscript  (1) 2022.04.24
워라밸의 의의란  (0) 2022.04.03
대학원 원서 냈다  (0) 2020.05.25
HiKey960 보드에 AOSP + OP-TEE 올리기 시도 중  (0) 2020.04.09
일러스트 학원을 다니며 드는 생각  (0) 2019.04.09

2020 ~ 2021기간 즈음

못올리는걸 합쳐도 생각보다 많이 못그렸다.

 

사용 보드 정보

Vendor: Nuvoton

Device: M2351KIAAE

 

사용 툴: uVision Keil

 

Stack pointer도 일단은 register이기 때문에 직접 조작하려면 assembly가 필요하다. 따라서 __asm__ __volatile__ 키워드를 통해 arm inline assembly를 사용한다.

 

1. Inline assembly의 literal string에 직접 써서 옮기기

예를 들어 0x20만큼 옮긴다고 하면,

 

__asm__ __volatile__("SUB sp, sp, #0x20");

// ... main firmware routine

__asm__ __volatile__("ADD sp, sp, #0x20");

 

2. Input operand를 사용하여 임의의 offset만큼 옮기기

예를 들어 STACK_OFFSET_MEM에 임의의 offset을 저장했다고 하면,

SUB sp, sp, Rm의 형태는 사용할 수 없으므로 연산 가능한 레지스터에 값을 옮기고 연산하여 다시 stack pointer에 집어넣는 방식을 취한다. Lo register (r0 ~ r7)은 실행 과정에서 자주 사용되므로 잘 안쓰는 레지스터에 값을 백업해두고 복원하였다.

 

__asm__ __volatile__(" \
MOV r11, r3; \
MOV r10, r4; \
MOV r4, sp; \
ADDS r3, r4, %0; \
MOV sp, r3; \
MOV r3, r11; \
MOV r4, r10 \
" \
: \
: "r"(STACK_OFFSET_MEM) \
);

// ... main firmware routine

// (SUBS STACK_OFFSET_MEM)

 

여기서 임의의 값은 M2351KIAAE보드의 TRNG 함수를 사용해서 가져왔다.

thumb모드의 제약과 input operand 문법이 생소해서 고생했다..

 

Inline assembly 참고 링크

https://developer.arm.com/documentation/dui0489/i/arm-and-thumb-instructions/sub

 

http://www.ethernut.de/en/documents/arm-inline-asm.html

 

http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html

 

https://developer.arm.com/documentation/100748/0617/Using-Assembly-and-Intrinsics-in-C-or-C---Code/Writing-inline-assembly-code?lang=en

 

Arm embedded program flow 참고 링크

http://www.vlsiip.com/c/embedded_c/ec_0002.html

 

http://recipes.egloos.com/5044366

 

https://openmicrolab.com/arm-cortex-m0-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98/

 

__scatterload의 역할 참고 링크

https://community.arm.com/support-forums/f/compilers-and-libraries-forum/7240/__scatterload-function-in-arm-c-library/22072

 

 

'프로그래밍 기타' 카테고리의 다른 글

자료형에서의 overflow와 underflow에 대하여  (0) 2021.03.05

가상 데스크톱 관련 단축키를 알지 못하는 분들은 요약보다 본문을 다 읽기를 권장한다.

<요약>

1. Ctrl + Alt + Del로 작업 관리자 창을 연다.
2. 윈도우 + Tab으로 작업 보기를 연다.
3. 작업 관리자 창을 새 데스크톱으로 드래그 앤 드롭한다.
4. 새로운 데스크톱을 클릭하여 이동한다.
5. 작업 관리자 창에서 게임 프로세스를 선택하고 작업 끝내기를 누른다.
6. Ctrl + 윈도우 + F4로 복제한 데스크톱을 닫는다.

 

아무래도 좋은 서론


필자는 평소 리그 오브 레전드, 통칭 롤이라는 게임을 즐겨 한다.

 

게임 실행 중 작업 관리자로 확인해본 프로세스


이 게임은 기본적으로 위의 이미지에서 확인할 수 있듯

"League of Legends (TM) Client(32비트)" - 실제 게임 프로세스에 해당
"League of Legends(32비트)" - 흔히 클라이언트라고 불리는 인게임 이전의 채팅, 큐, 상점 등을 담당하는 프로세스

로 나뉜다. (프로세스 네이밍과 흔히 불리는 명칭이 다른 것이 흥미롭다)

하지만 간혹가다 League of Legends (TM) Client(32비트), 즉 실제 게임 프로세스를 제대로 실행하지 못하고 프리징이 걸리는 경우가 있다.
컴퓨터를 조금이라도 다뤄본 사람은 이 경우 보통 작업 관리자를 이용한 프로세스 강제종료를 생각하게 된다.
하지만 이 프로세스를 전체 화면 모드로 사용하고 있는 경우, 프리징이 걸린 게임 화면이 언제나 가장 윗 레이어에서 입력을 받아 작업 관리자 창에 접근하지 못하는 현상이 발생한다. Alt + Tab으로 창을 이동해봐도 언제나 상위에 프리징 걸린 클라이언트가 자리하고 있다.

지금까지는 필자도 이 경우 프로세스를 종료할 방법이 없어 강제 재부팅을 했지만 재부팅 없이 프로세스를 처리할 방법이 떠올라 간단히 공유하고자 한다.

본론

먼저 Windows 10 에서만 가능한 방법임을 밝혀둔다.

Windows 10에는 "가상 데스크톱(Virtual Desktops)" 이라는 기능이 존재한다.
간단히 설명하자면 화면을 새로 만들어 마치 여러 대의 모니터로 사용하듯 여러 화면을 사용할 수 있는 기능이다.

즉, 가상 데스크톱을 만들어 작업 관리자 창을 그곳으로 이동하고 프로세스를 종료시키는 방법을 이용하면 되는 일인 것이다.

 

공식 홈페이지에서 가져온 가상 데스크톱 단축키


(가상 데스크톱 닫기나 전환 단축키를 알지 못한 채 추가하면 귀찮은 일이 발생하므로 가상 데스크톱 추가 전에 미리 단축키를 숙지하자.)

윈도우 + Ctrl + D를 누르면 가상 데스크톱이 추가된 것을 확인할 수 있다. 이때 윈도우 + Ctrl + 양옆 방향키를 통해 가상 데스크톱간 전환이 가능하다.

이 가상 데스크톱은 "작업 보기"(단축키 윈도우 + Tab) 기능을 통해 서로간에 창을 이동할 수 있다.

작업 보기를 열고, 작업 관리자 창을 새로 만든 데스크톱으로 드래그 앤 드롭한다.
(혹은 새로 만든 데스크톱에서 작업 관리자 창을 연다.)

 

새로 만든 가상 데스크톱으로 옮겨주자

 

그 후에는 롤 프로세스를 찾아 종료하면 된다.


독자분들의 빠른 재접을 응원합니다.




가상 데스크톱 참고 링크 (Azure에서 제공하는 "Windows Virtual Desktop"과는 다른 기능이다.)

- 마이크로소프트 공식 홈페이지 바로 가기 키 안내 페이지
- 마이크로소프트 Cloud Technical Expert의 가이드 글 (영문)

필자는 거추장스러워 표시 해제해 두었는데, 기본적으로 작업 표시줄에 존재하는 필름 모양의 아이콘으로도 "작업 보기" 기능에 접근이 가능한 모양이다.

 

작업 보기 아이콘

 

행렬의 성질에 관한 진위판별이나 증명은 발상이 상당히 까다롭다고 느낀다.

특히 수능공부할때 삽질했던 기억이 있어 PTSD가 저절로 오는 것이다..

 

 

여하튼 나는 A, B, I는 같은 차수를 가진 정사각행렬이고 I - AB가 invertible할때, I - BA가 invertible함을 보이는 과정을 알고 싶었다. 이때 문제에서 B(I - AB) = (I - BA)B를 이용하라는 지시가 있었다.

 

웹에서 찾아보면 다짜고짜 I - BA에 B(I - AB)^(-1)A + I를 곱하는 의문의 논리 비약을 보여주는데

이 풀이과정을 분석하여 문제의 지시에 맞는 적절한 발상을 찾아내어 공유해 보고자 한다.

 

발상의 핵심은, AB = I이면 A와 B는 invertible하다는 것과 (위 제시된 문제와는 다른 정사각행렬 A, B) ... *

한쪽 변에는 I, 다른쪽 변에는 I - BA꼴을 만들어 인수로 묶는 것이다.

 

B(I - AB) = (I - BA)B <- 양변의 우측에 (I - AB)^(-1)을 곱한다.

B = (I - BA)B(I - AB)^(-1) <- 양변의 우측에 A를 곱한다.

BA = (I - BA)B(I - AB)^(-1)A <- 양변에 I - BA를 더한다.

I = (I - BA)B(I - AB)^(-1)A + I - BA <- 우변을  I - BA로 묶는다.

I = (I - BA)(B(I - AB)^(-1)A + I)

 

이러면 우변에 상술한 B(I - AB)^(-1) + I가 나타나게 되고 *에 의해 I - BA는 invertible함이 증명된다.

오버플로우 관련 이미지를 찾는데 뭔 애니메이션이 있더라.. 이미지가 없으면 허전하니까 히로인만 슥 그려봤다.

우선 overflow는 다들 알거라고 생각한다.

예를 들어 4바이트의 크기를 가지는 정수 자료형인 경우 2^31 - 1 에서 1을 더하면 -(2^31)로 바뀌는 뭐 그런 현상들이다.

 

그러나 한글로 구글링을 좀 해보면 -(2^31) - 1이 2^31 - 1로 변하는 현상을 underflow라고 지칭하는 경우를 매우 많이 보게 된다. 즉 음수값이 절대값 max를 넘기면 양수가 되는 현상을 underflow라고 소개하는 포스팅이 많다. (영문으로 검색하면 제대로 된 정의를 찾을 수 있다)

 

 

이에 아래와 같이 밝혀둔다.

 

1. 정확히는 상한 뿐 아니라 하한을 넘겨서 반대쪽 값이 나오는 경우도 모두 overflow이다. 정수나 unsigned 자료형에서 하한 max값을 넘어서 반대쪽 값이 나오는 현상이라고 해서 underflow가 아니다.

 

2. IEEE 754의 부동소수점 기술표준에 의하면 부동소수점으로 표현할 수 없는 절대값이 매우 작은 값을 표현하려 할 때 -0 혹은 +0으로 표현되는 현상(단, 두 경우 모두 부호 없이 0으로 표기된다)이 underflow이다.

 

3. 그게 그거 아니냐고 생각할 수 있는데, 정수 산술계산중에 캐리가 올라가서 반대쪽 값이 튀어나오는거랑 부동소수점에서 표현할 수 없는 절대값이 아주 작은 값을 0으로 고정해버리는 동작은 절대 같다고 볼 수 없다. 따라서 구분짓는게 옳다.

 

4. 영어로는 arithmetic underflow를 underflow라고 부른다. 하지만 정수나 unsigned 자료형에서 하한 max값을 넘어서 반대쪽 값이 나오는 경우에 underflow라는 명칭을 붙이고 싶은 경우 integer underflow라고 부르기도 하는 것 같다.

 

 

사실 뜻은 통하니까 실제로 잘못 말하는 사람이 있어도 그러려니 하고 넘어가긴 한다. 하지만 용례는 용례고, 정확한 정의는 짚고 넘어가는게 옳으니 대충이나마 설명해서 써둔다. 전공자라면 논리회로 강의 초반에 다뤄지는 내용이니 되새겨보자.

가끔 인터넷방송을 한다. 보통 컴퓨터가 느려지는데, 실시간 encoding의 부하에 의한 현상이므로 encoding만 대신 해줄 수 있는 무언가가 있으면 좋겠다는 생각이 들었다. 그러던 중 집 구석에 박혀서 python 구동기로 사용되고 있는 raspberrypi 4가 눈에 들어왔다. 이친구 분명 4K streaming이 가능한 정도의 스펙을 가지고 있었던것 같은데..

 

이리저리 검색해보니 hdmi 캡쳐 카드와 v4l2-ctl, ffmpeg와 같은 유틸이 있으면 rpi4로 hdmi 신호를 받아 encoding한 후 RTMP 서버로 보낼 수 있는 방법을 누군가가 정리해두었다. hdmi 캡쳐카드야 그리 비싸지 않으니 한번 시도해볼만할것 같다.

 

 

참고 링크

github.com/PrawnMan/HdmiPi-Streaming

 

PrawnMan/HdmiPi-Streaming

Streaming using a cheap HDMI capture card and a raspberry Pi to an RTMP Receiver. - PrawnMan/HdmiPi-Streaming

github.com

streamlabs.kr/2019/11/what-is-a-capture-card/

 

인터넷 방송시 무조건 캡처 카드가 필요한가? - StreamLabs.kr

어떤분이 인터넷 방송을 시작하려고 캡처 카드를 구입했다는 이야기를 하길래 송출용 PC를 따로 쓰시려나 보다 물어보았더니 pc는 한대인데 방송하려면 무조건 캡처 카드가 필요한지 알고 구입

streamlabs.kr

============================================================================

 

시도해 본 결과 램이 부족한건지 sd카드 용량이 부족한건지 알 수 없지만 영상과 소리가 제대로 캡쳐되지 않는 현상이 있었다

라즈베리파이로 하는 방식은 보류하고 다른 PC를 찾아서 인코딩용으로 쓰는 방법을 사용해야겠다

 

그 과정에서 이용한 커맨드 백업

더보기

v4l2-ctl --set-fmt-video=width=1280,height=720 && ffmpeg -f v4l2 -thread_queue_size 384 -input_format mjpeg -framerate 30 -i /dev/video0 -f alsa -thread_queue_size 4096 -i plughw:1,0 -acodec pcm_s16le -ac 1 -ar 96000 -copytb 1 -use_wallclock_as_timestamps 1  -c:a aac  -b:a 128k -ar 44100 -b:v 4M -c:v h264_omx -f flv [rtmp address url]

송출 화면 노이즈를 볼 수 있다

 

아래 방식과 같이 csi를 사용하는 것도 생각할 수 있는데 이건 어떨지 모르겠다

github.com/pikvm/pikvm#diy-getting-started

 

pikvm/pikvm

Open and cheap DIY IP-KVM based on Raspberry Pi. Contribute to pikvm/pikvm development by creating an account on GitHub.

github.com

 

+ Recent posts