Try Attack/python[basic]

python 코드 분석 방법

D4tai1 2019. 1. 25.

1. 파이썬 코드 분석 방법

▶ 뭔가 거창?하게 적은 느낌이지만 정작 요령을 적어보려고 한다.

▶ 내가 다른 사람이 작성한 파이썬 소스를 분석하다보니 한계도 보이고 막히는 것도 많다.


(1) 언어에 따른 분석 방법

▶ 유지보수를 위해 C언어와 같은 절차지향언어의 소스를 분석하는 경우도 있고, 자바나 파이썬과 같은 모듈기반의 객체지향언어의 소스를 분석하는 경우도 있을 것이다.

▶ 혹은 유지보수가 아니라도 관심있는 부분의 소스를 분석할 수도 있다.

▶ 어떤 분석방법이 더 있는지는 모르겠지만 순차적인 라인분석과 동작에 따른 기능분석으로 나누어 보려고 한다.


(2) 라인분석

▶ 나의 경우는 소스를 분석할 때 import하는 부분부터 라인분석식으로 진행하였다.

▶ 그래야 좀 더 세밀하고 정밀하게 분석이 가능할 줄 알았다.

▶ 결과를 먼저 말하면 못하지는 않았다.

▶ 다만 많은 시간이 걸리고 지루하고 분석이 끝나가는데도 이해가 가지 않는 부분도 존재했다.

▶ 위에서 이해가 가지 않는다는 말은 그 함수나 모듈을 이용해서 특정한 기능을 하도록 새로운 소스를 작성할 수 없다는 것을 말하는 것이다. 

▶ 라인분석의 경우 모듈을 전부 알고 있을 경우에 세부적으로 분석할 때 용이할 것으로 보여진다.

▶ 만약 그렇지 않는다면 중간에 힘들어서 나와 같이 쓰러질락말락 하거나 Give_up 할 지도 모른다...


 [1] 그렇다면 어떻게 분석해야 조금 덜 지루하고 능률적인 분석이 가능할까?

  ▶ 이것이 이 글을 쓰게된 계기이다..


(3) 기능분석

 [1] 함수 및 메소드와 같은 동작을 분석하는 방법이다.


 [2] 클래스의 개요를 알거나 함수의 정의... 즉 컨셉을 알면 좋다.

  ▶ 선언하고 어떠한 입력을 받고 출력을 하는지??


 [3] 그 다음 안에서 어떠한 일을 하는지 분석한다.

  ▶ 파이썬의 경우 라이브러리를 확인하는 것을 말한다.  

  ▶ 무엇을 하는 라이브러리인지 오버뷰 정도..

  ▶ 알고리즘을 파악하는 것도 좋다.

 [4] 요리를 할 때 재료 하나하나를 보면 무엇을 만들지 결과를 유추하기 어렵지만 레시피를 보면 무엇을 하려고 하는지 정도는 알 수 있는 것과 비슷하다고 해야하나..?


(4) 라인분석 + 기능분석

 [1] 위 두가지 방법을 합친 것을 말한다.

 [2] 라인단위로 분석하면서 특정 클래스의 객체를 만들거나 메소드를 사용하거나 혹은 함수내부에 들어가는 경우 step into로 진행한다.

  ▶ 따라서 들어왔을 경우 기능분석과 같이 이 곳에서 무엇을 하는지 전체적인 흐름을 알고 진행하는 것이 좋다는 의미이다.

 

(5) 특별한 경우

▶ 내가 분석하고 있는 코드의 경우 라이브러리가 최근에 공개된 것도 있고, 한국어로 지원되지 않는 모듈도 있다.

▶ 또한 개발자가 직접 만든 라이브러리도 있으며 이는 구글링으로 찾거나 물어볼 수 있는 부분이 아니라는 말이다.

▶ subprocess 모듈을 이용한 리눅스 명령어를 사용하는 부분도 있고, 여기서 사용된 리눅스의 정규표현식이 낯설기도 하다.

▶ 파이썬으로 특정 프로그램을 제어하기 위해 특정 프로그램의 명령어도 알아야한다.

▶ 결과 또한 파이썬 소스를 만드는 것이며 이렇게 생성된 파이썬 소스가 정상적으로 돌아가는지도 확인을 해야한다.

▶ 10개 이상의 소스파일이 엮여서 돌아가기 때문에 한 곳이라도 에러가 발생할 경우 정상적으로 결과 파이썬 소스가 생성되지 않는다.

▶ 일부 모듈에서는 IP와 port도 입력받아서 원격지에서 실행하는 부분도 있어서 네트워크 환경도 고려해야 한다.

▶ 마지막으로 이렇게 돌아가지 않는 소스를 분석하는 것은 무척이나 괴롭지만...

▶ 나보다 더 어려운 상황에 있는 사람도 있을 것이라 생각한다.

"그림자를 두려워 말라, 그것은 가까이에 빛이 있다는 증거이다." 라는 말이 있으니 힘내길 바랍니다!!



댓글