호그와트

godbolt로 어셈블리어 이해하기

영웅*^%&$ 2022. 2. 7. 19:16
728x90

최근에 리버싱이나 어셈블리어 등을 아예 처음 접하는 사람들을 몇 분 만나서

하나씩 하나씩 다시 가르쳐주거나 이해시켜주어야 되는 일이 있었습니다

특히 정말 나이가 어린 분께 하나씩 가르쳐주는 건 어려운 일이었습니다

그러다보니 제가 리버싱과 어셈블리어를 처음 접했을 때를 떠올리게 되었습니다

리버싱 혹은 어셈블리어 등을 공부할 때 자주 듣는 말이 있습니다

“계속 접해보다보면, 계속 분석하다보면 잘하게 될거야”

너무나 맞는 말이라고 생각합니다 본인의 실력이 아직 얼마나 부족한 지 아는 저 역시도 계속해서 분석하고 슬로싱킹하면서 실력을 쌓아나갈 수 밖에 없다는 것을 너무 잘 압니다

지금도 분석하다보면 배우는 게 너무 많고 새로운 게 너무 많습니다.

그런데 사실 초보분들이 가지는 문제점은 그 분석을 시작하자마자 느끼는 벽이라고 생각합니다. 생전 처음으로 나열되어있는 엄청난 양의 어셈블리어와 메모리를 처음 보았을 때 초보분들이 느끼는 절망 사실 저도 너무나 잘 알고 있습니다. 리버싱 전문서적을 읽으면서 몇 번이나 그 책을 던져버렸는지 모릅니다. 그리고 실제로 어셈블리어를 보자마자 혹은 리버싱 전공 지식을 보자마자 포기하는 사람이 얼마나 많은지 잘 알고 있습니다. 저랑 가깝게 지내던 두 분도 리버싱 맨 처음 입문하자마자 학교 수업 듣고 포기했습니다 안타깝죠.

그래서 도움이 될지는 모르지만, 그나마 유용한 정보를 하나 던져두고 가려고 합니다. 도움이 되시는 분도 있을 수 있고 도움이 전혀 안 되는 분들도 있을 수 있지만 적어도 저에게는 굉장히 많은 도움이 되었고 그리고 혹여나 단 한 분이시더라도 그 분께 도움이 될 수 있다면 이 글은 그 역할을 다 한 것이라고 믿습니다. (한강을 건널 때 뒤에 오시는 분이 조금이나마 안전하게 걸을 수 있도록 하는 디딤돌이 되었으면 합니다)

제가 어셈블리어를 전혀 이해할 수 없었을 때 저는 책을 사서 읽어보겠다고 생각하고 책을 샀습니다. 근데 문제는 책을 사서 읽는데도 전혀 이해를 할 수가 없다는 것이었습니다. 제가 느끼는 감정은 딱 하나 '검은 건 글씨요 하얀 건 종이’였습니다. ‘왐마 큰 일 났다’ 생각한 저는 리버싱과 어셈블리어는 나랑 안 맞나 보다 ok good bye를 선언하며 프로그래밍에 더 정진했습니다.

그러다가 나중에서야 https://godbolt.org/ 라는 걸 알게 되었습니다.

저 나름의 간절함이 있었던 거 같아요 구글링 하고 구글링 해서 결국엔 찾았습니다. 그리고 제가 집에 가지고 있었던 c언어 입문서에 있는 내용(입문서라서 친숙하고 쉬운 내용이었습니다)을 하나 하나씩 https://godbolt.org/에 쳐보기 시작했습니다. 아 c언어가 이런 내용이고 이런 알고리즘일 때

어셈블리어가 대충 이렇게 되는 구나. 아 이런 패턴일 때 이런 결과가 나오는 구나. 인자값부터 시작해서 함수까지 어떻게 call하고 return하는지 하나씩 하나씩 비교하고 이해했고 흡수했습니다.

그러던 어느 날 알게되었습니다.

제가 맨 처음에 도무지 이해할 수 없었던 리버싱 전공서적이

하나씩 하나씩 이해되기 시작했다는 걸 말이죠…

맨 처음 봤을 때 전혀 이해할 수 없어서 진도조차 나갈 수 없던 그 책이 말 그대로 보이고 읽어지기 시작했습니다. 이해할 수 있었고 흡수하고 배울 수 있었습니다. 미리 말씀드리지만, 이 내용은 만병통치약도 아니고 모두에게 다 도움이 될 수 있는 내용은 아닐 겁니다.

그리고 https://godbolt.org/가 완벽한지 아닌지 그런 건 솔직히 저는 잘 모르겠습니다. 다만, 시작은 될 수 있지 않을까… 맨 처음 리버싱 혹은 어셈블리어를 접할 때 초보자 분들의 막막함을 조금이나마 덜어줄 수 있지 않을까 하는 생각에 이 글을 적었습니다.

이건 끝이나 완성이 아니라 오직 시작일 뿐입니다. 이렇게 향상된 실력을 직접 프로그래밍하거나 리버싱 하시면서 비로소 더 깊은 실력 증진이 있고 더 즐거운 카타르시스가 오지 않을까 조심스럽게 추측할 뿐입니다.

728x90

'호그와트' 카테고리의 다른 글

dreamhack return address Overwrite  (0) 2022.02.09
dreamhack Oob  (0) 2022.02.09
한계 돌파하기 리버싱과 시스템 해킹  (0) 2022.02.07
dreamschool (dreamhack)  (0) 2022.02.02
드림핵 rev-basic-7  (0) 2022.01.28