python 코드 분석 방법
1. 파이썬 코드 분석 방법
▶ 뭔가 거창?하게 적은 느낌이지만 정작 요령을 적어보려고 한다.
▶ 내가 다른 사람이 작성한 파이썬 소스를 분석하다보니 한계도 보이고 막히는 것도 많다.
(1) 언어에 따른 분석 방법
▶ 유지보수를 위해 C언어와 같은 절차지향언어의 소스를 분석하는 경우도 있고, 자바나 파이썬과 같은 모듈기반의 객체지향언어의 소스를 분석하는 경우도 있을 것이다.
▶ 혹은 유지보수가 아니라도 관심있는 부분의 소스를 분석할 수도 있다.
▶ 어떤 분석방법이 더 있는지는 모르겠지만 순차적인 라인분석과 동작에 따른 기능분석으로 나누어 보려고 한다.
(2) 라인분석
▶ 나의 경우는 소스를 분석할 때 import하는 부분부터 라인분석식으로 진행하였다.
▶ 그래야 좀 더 세밀하고 정밀하게 분석이 가능할 줄 알았다.
▶ 결과를 먼저 말하면 못하지는 않았다.
▶ 다만 많은 시간이 걸리고 지루하고 분석이 끝나가는데도 이해가 가지 않는 부분도 존재했다.
▶ 위에서 이해가 가지 않는다는 말은 그 함수나 모듈을 이용해서 특정한 기능을 하도록 새로운 소스를 작성할 수 없다는 것을 말하는 것이다.
▶ 라인분석의 경우 모듈을 전부 알고 있을 경우에 세부적으로 분석할 때 용이할 것으로 보여진다.
▶ 만약 그렇지 않는다면 중간에 힘들어서 나와 같이 쓰러질락말락 하거나 Give_up 할 지도 모른다...
[1] 그렇다면 어떻게 분석해야 조금 덜 지루하고 능률적인 분석이 가능할까?
▶ 이것이 이 글을 쓰게된 계기이다..
(3) 기능분석
[1] 함수 및 메소드와 같은 동작을 분석하는 방법이다.
[2] 클래스의 개요를 알거나 함수의 정의... 즉 컨셉을 알면 좋다.
▶ 선언하고 어떠한 입력을 받고 출력을 하는지??
[3] 그 다음 안에서 어떠한 일을 하는지 분석한다.
▶ 파이썬의 경우 라이브러리를 확인하는 것을 말한다.
▶ 무엇을 하는 라이브러리인지 오버뷰 정도..
▶ 알고리즘을 파악하는 것도 좋다.
[4] 요리를 할 때 재료 하나하나를 보면 무엇을 만들지 결과를 유추하기 어렵지만 레시피를 보면 무엇을 하려고 하는지 정도는 알 수 있는 것과 비슷하다고 해야하나..?
(4) 라인분석 + 기능분석
[1] 위 두가지 방법을 합친 것을 말한다.
[2] 라인단위로 분석하면서 특정 클래스의 객체를 만들거나 메소드를 사용하거나 혹은 함수내부에 들어가는 경우 step into로 진행한다.
▶ 따라서 들어왔을 경우 기능분석과 같이 이 곳에서 무엇을 하는지 전체적인 흐름을 알고 진행하는 것이 좋다는 의미이다.
(5) 특별한 경우
▶ 내가 분석하고 있는 코드의 경우 라이브러리가 최근에 공개된 것도 있고, 한국어로 지원되지 않는 모듈도 있다.
▶ 또한 개발자가 직접 만든 라이브러리도 있으며 이는 구글링으로 찾거나 물어볼 수 있는 부분이 아니라는 말이다.
▶ subprocess 모듈을 이용한 리눅스 명령어를 사용하는 부분도 있고, 여기서 사용된 리눅스의 정규표현식이 낯설기도 하다.
▶ 파이썬으로 특정 프로그램을 제어하기 위해 특정 프로그램의 명령어도 알아야한다.
▶ 결과 또한 파이썬 소스를 만드는 것이며 이렇게 생성된 파이썬 소스가 정상적으로 돌아가는지도 확인을 해야한다.
▶ 10개 이상의 소스파일이 엮여서 돌아가기 때문에 한 곳이라도 에러가 발생할 경우 정상적으로 결과 파이썬 소스가 생성되지 않는다.
▶ 일부 모듈에서는 IP와 port도 입력받아서 원격지에서 실행하는 부분도 있어서 네트워크 환경도 고려해야 한다.
▶ 마지막으로 이렇게 돌아가지 않는 소스를 분석하는 것은 무척이나 괴롭지만...
▶ 나보다 더 어려운 상황에 있는 사람도 있을 것이라 생각한다.
▶ "그림자를 두려워 말라, 그것은 가까이에 빛이 있다는 증거이다." 라는 말이 있으니 힘내길 바랍니다!!
'Try Attack > python[basic]' 카테고리의 다른 글
python으로 zip파일 크랙하기 (0) | 2019.01.28 |
---|---|
python으로 매크로 제작하기 (0) | 2019.01.26 |
python으로 Linux에서 zip파일 압축 및 해제 (0) | 2019.01.19 |
python으로 채팅구현하기 (0) | 2019.01.19 |
ping 서비스에 대한 공격코드 작성 (0) | 2019.01.19 |
댓글