'2019/12'에 해당되는 글 2건

  1. 2019.12.14 :: PyKdump extension - pycrashext
  2. 2019.12.13 :: The effective crash-utility for vmcore analysis (PyKdump)
Skills/mY Technutz 2019. 12. 14. 16:16

원래 pyKdump 관련해서는 작성한지 몇일 됐었는데, 귀찮아서 한번에 쓰는 중이다.

pyKdump 자체도 상당히 강력하고 도움이 되는 Extension 이지만,

실제 내가 자주 쓰는 명령은 dis 명령으로써, 리버스 분석 명령인데,

이를 더욱 더 쉽게 도와주는 pyKdumpExtension 이 있어 소개하고자 한다.

바로 레드햇에서 근무하시는 커널박사님이신 권성주님PyCrashext 이다.

https://github.com/sungju/pycrashext

설치는 간단하므로 역시 해당 위키페이지를 살펴보고 설치하면 된다.

정말 멋지지 않은가! 

본문 글에 반영된 색들은 실제로 해당 기능을 사용시 보여주는 색을 그대로 표현한것이다.

사실 본문에 설명한역시 능력자님께서 손수 만들어 주셨다는 점이다.

다만 소스코드 보여주는 역할등은 일부 시스템(파이선 영향인듯) 에서는

완벽하게 돌아가지 않는것 같다.

일단 edis 에 대해서 파이선 버젼을 떠나 어느 시스템에서든 정상적으로 수행할 수 있도록

아래와 같이 간단한 패치를 했다.
( 성주샘에게 메일도 보냈으나 반영될지는 모르겠다.. 안되도 그냥 이렇게 수정해 쓰자 ㅋㅋ)

Report 는 반영되었고, 아래와 같이 변경되었다.

---

diff --git a/edis.py b/edis.py
index 0178d09..36d6e3b 100644
--- a/edis.py
+++ b/edis.py
@@ -872,7 +872,7 @@ def edis():
     except:
         encode_url = ""

 

-    if encode_url != "":
+    if encode_url != None and encode_url != "":
         op.add_option("-n", "--noaction",
                       action="store_true",
                       dest="noaction",
@@ -908,7 +908,11 @@ def edis():
         show_callgraph(args[0], 0, o)
         sys.exit(0)

 

-    disasm(args[0], o, args, os.environ["PYKDUMPPATH"])
+    if len(args) != 0:
+        disasm(args[0], o, args, os.environ["PYKDUMPPATH"])
+    else:
+        print("ERROR> edis needs an address or a symbol\n",
+              "\ti.e) edis 0xffffffff81c76fca or edis hugetlb_init")

 

 if ( __name__ == '__main__’):

-----

일단 이것은 edis 뒤에 주소가 인자로 주어지지 않았을 경우 파이선 에러가 출력되는 것을

막고 주소를 넣어달라고 안내하는 것이며,

encode_url 이 Null 일 경우 noaction 옵션이 추가되고 해당 액션이 수행되어야 하는데,

제대로 체크가 되지 않아 보다 직관적으로 none 을 확인하도록 수정해 준 약소한 부분이다.

현재 코드트리가 제대로 출력되지 않는 문제는 아직 손보고 있다.

어찌됐든, 상당히 유용하고 도움이 엄청 되는 확장플러그인이므로,

가능하다면 앞으로 나도 pyKdumppyCrashext 의 향상에 이바지를 하고 싶다.

이제 정말..... 난 먹고살길이 막막해 진것 같다.

오늘을 마지막으로 더이상의 커널 덤프 분석 공유 글은 중단하려고 한다.

그동안 나름대로 잘 읽어봐준 분들께 감사의 인사를 드리고,

다른 더 좋은 주제로 글을 쓸 수 있도록 노력하겠다.

posted by mirr

댓글을 달아 주세요

Skills/mY Technutz 2019. 12. 13. 17:44

요즘 다시 혼자서 근무하다보니, 업무량이 훅 늘어나고

분석에 대해서는 반복적인 부분이 많이 발생하는데 그에 대한 시간은 여전히 동일하게 들어서

간편화 하는 방법이 없을까 해서 간단히 python 으로 crash utility 에 대한 extension 을 직접 만들고 있었는데,

하늘아래 새로운 것은 없듯이 역시나 이미 만들어져 있었다는 것을 발견하였다.

그것은 바로 mPyKdump 라는 crash extension 이다.

https://sourceforge.net/p/pykdump/wiki/Home/

일단 커널 코어덤프 분석을 위한 도구인 crash 툴은 C/Python 형태의 외부 스크립트를

내부에서 불러와 사용할 수 있다.

대부분 c 로 컴파일되어 모듈형태로 crash 툴이 실행된 후 로드하는 형태로 사용되는데

mPyKdump 는 파이선 기준으로 작성되어 내용을 수정하더라도 특별히 컴파일이 필요없이

바로바로 적용이 가능하다는 장점이 있었다.

해당 모듈을 이용하여 얼마나 간편하게 기존 삽질을 줄일 수 있는지 확인해보자.

(Host정보 삭제함)


여기까지 PyKdump 모듈의 기능에 대해서 살펴보았다.

이제 커널정보들도 상당히 공개되고 알려져 먹고살기 참 힘든 세상이 되었다.

추가 팁 : 자동으로 mPyKdump 모듈을 로드시키고 싶을 경우,

.crashrc 파일을 만들어 아래와 같이 넣어주면 실행시 자동 로드한다.

.crashrc 는 크래쉬 툴 명령명과 동일하게 만들어 주면 된다.
(.crash64rc 와 같이.)

# cat ~/.crash64rc
extend /usr/local/lib64/mpykdump64.so


posted by mirr

댓글을 달아 주세요