[컴][파이썬] PyDbg 설치하기, pydasm.pyd 만들기


PyDbg 인스톨하기
http://wikisecure.net/security/pydbg-an-installation-guide


DLL load error
cytypes 를 설치하고, PaiMei 를 설치하고 나서도 pyDbg 는 제대로 동작하지 않는다. 아래 blog 에서 이것과 관련한 해결책을 잘 제시 해 주고 있다.
http://bluestarblogkr.blogspot.kr/2012/07/pydbgpydasm-with-python-27x-or-more.html
ImportError : DLL load failed : …
라는 에러가 나온다. 자세히 보면 import pydasm 하다가 error 가 발생했다.


libdasm download
이것을 해결하려면 libdasm 을 다운 받아서 pydasm 을 만들어야 한다.
귀찮게도 compile 을 해야 한다. visual c++ 을 설치하면 좀 더 간편할 것 같지만 개인적으로 visual c+= 설치하는데 시간이 오래 걸린다는 고정관념이 있어서 MinGW 를 이용하기로 했다.
아래 경로에서 다운받을 수 있다.
http://sourceforge.net/projects/mingw/files/latest/download?source=files


MinGW 설치 및 pydasm.pyd 만들기(libdasm 컴파일)
MinGW 에서 c/c++ compiler 를 설치하자.

py 파일에서 그냥 gcc 를 호출하기 때문에 gcc 를 못찾는 경우가 있다. 이럴 경우 MinGW\bin 을 PATH 에 넣어주자.
set PATH=%PATH%;c:\MinGW\bin
그리고 나서
python setup.py build -c mingw32
를 하면 –mno-cygwin 관련 error 가 발생한다. 이 경우에 아래 파일을 수정하자.
c:\Python27\Lib\distutils\cygwinccompiler.py
-mno-cygwin 을 찾아서 아래와 같은 코드를 찾고, –mno-cygwin 을 지우자.
self.set_executables(compiler='gcc -mno-cygwin -O -Wall',
                             compiler_so='gcc -mno-cygwin -mdll -O -Wall',
                             compiler_cxx='g++ -mno-cygwin -O -Wall',
                             linker_exe='gcc -mno-cygwin',
                             linker_so='%s -mno-cygwin %s %s'
                                        % (self.linker_dll, shared_option,
                                           entry_point))


정상적으로 compile 이 되면 아래와 같은 화면을 볼 수 있다.


e:\b\libdasm-1.5\pydasm>setup.py build -c mingw32
running build
running build_ext
building 'pydasm' extension
c:\MinGW\bin\gcc.exe -mdll -O -Wall -IC:\Python27\include -IC:\Python27\include -IC:\Python27\PC -c ../libdasm.c -o build\temp.win32-2.7\Release\..\libdasm.o
c:\MinGW\bin\gcc.exe -mdll -O -Wall -IC:\Python27\include -IC:\Python27\include -IC:\Python27\PC -c pydasm.c -o build\temp.win32-2.7\Release\pydasm.o
writing build\temp.win32-2.7\Release\..\pydasm.def
creating build\lib.win32-2.7
c:\MinGW\bin\gcc.exe -shared -s build\temp.win32-2.7\Release\..\libdasm.o build\temp.win32-2.7\Release\pydasm.o build\temp.win32-2.7\Release\..\pydasm.def -LC:\Python27\libs -LC:\Python27\PCbuild -lpython27 -lmsvcr90 -o build\lib.win32-2.7\pydasm.pyd

아래 폴더에서 결과물 pydasm.pyd 를 찾을 수 있다.
..\libdasm-1.5\pydasm\build\lib.win32-2.7\pydasm.pyd


Visual Studio 로 pydasm.pyd 만들기

visual studio ver. : Microsoft Visual Studio 11.0
OS ver : Windows7 64-bit
ref. 1 에서 처럼 VS 9.0 을 기초로 되어 있어서,
c:\Python27\Lib\distutils\msvc9compiler.py
를 수정해 줄 필요가 있다. 이것은 일단 임시로 수정하는 것이니, 이 설정을 계속 유지하는 지 여부는 알아서 판단하기 바란다.
find_vcvarsall
부분만 수정해 주면 되는데, 수정해서 경로만 잘 잡도록 도와주면 된다. 여기서는 아래 부분을 수정했다.

def find_vcvarsall(version):
    """Find the vcvarsall.bat file

    At first it tries to find the productdir of VS 2008 in the registry. If
    that fails it falls back to the VS90COMNTOOLS env var.
    """

    vsbase = VS_BASE % version

    try:
        productdir = Reg.get_value(r"%s\Setup\VC" % vsbase,
                                   "productdir")
    except KeyError:
        productdir = None

    # trying Express edition
    if productdir is None:
        vsbase = VSEXPRESS_BASE % version
        try:
            productdir = Reg.get_value(r"%s\Setup\VC" % vsbase,
                                       "productdir")
        except KeyError:
            productdir = None
            log.debug("Unable to find productdir in registry")

    if not productdir or not os.path.isdir(productdir):
        toolskey = "VS%0.f0COMNTOOLS" % version
        toolsdir = os.environ.get(toolskey, None)
        

        if toolsdir and os.path.isdir(toolsdir):
            productdir = os.path.join(toolsdir, os.pardir, os.pardir, "VC")
            productdir = os.path.abspath(productdir)
            if not os.path.isdir(productdir):
                log.debug("%s is not a valid directory" % productdir)
                return None
        else:
            log.debug("Env var %s is not set or invalid" % toolskey)
            # comment : modification for visual studio v. 11
            productdir = "c:/Program Files (x86)/Microsoft Visual Studio 11.0/VC"

이렇게 한 후
setup.py build
를 하면 warning 은 많이 뜨지만, 무사히 컴파일이 끝나게 된다.

그런데 참고로, python x64 에서는 이 issue 와 같은 error 가 난다. 여튼 여러가지 문제로 이녀석은 32bit 에서 사용해야 할 듯 하다.



PyDbg 설치

이제 pydasm 이 완성되었으니,  PyDbg 를 설치를 하자. 따로 copy 해도 될 듯 하지만, 일단 다른 사람들이 한 것처럼 PaiMei 전부를 설치 해 보도록 하자.

아래에서 paimei 를 다운받아서 압축을 풀자. 참고로 pydbg 가 따로 나눠져 있다. 그러므로 pydbg 를 따로 download 하고 paimei\pydbg 안에 넣어주고 install 을 하자.
https://code.google.com/p/paimei/
그리고 나서
setupt.py install
을 하면 알아서 잘 설치가 된다. 그러면 이때 pydbg 는 아래 폴더에 설치된다.
c:\Python27\Lib\site-packages\pydbg
이 pydbg 폴더 안에 보면
c:\Python27\Lib\site-packages\pydbg\pydasm.pyd
라는 파일이 있는데, 기본적으로 이 파일이 제대로 동작하지 않았다. 적어도 windows 7 에서는…

그래서 위에서 pydasm.pyd 를 만들어 준 것이다.  방금 만든 pydasm.pyd 를
c:\Python27\Lib\site-packages\pydbg
에 넣으면 끝이다.

이제 IDLE 에서 import pydbg 를 해 보면 잘 되는 것을 알 수 있다.



Reference

  1. http://stackoverflow.com/questions/6551724/how-do-i-point-easy-install-to-vcvarsall-bat



댓글 3개:

  1. C:\Users\Hooray\Downloads\libdasm-1.5\libdasm-1.5\pydasm>setup.py install
    running install
    running build
    running build_ext
    building 'pydasm' extension
    error: Unable to find vcvarsall.bat

    이런오류만계속뜹니다..ㅜㅜ

    답글삭제
  2. ^^;;;
    바로 setup.py install 이 안되기 때문에,

    MinGW 설치 및 pydasm.pyd 만들기(libdasm 컴파일)

    부분을 하시고 하셔야 합니다.

    http://bluestarblogkr.blogspot.kr/2012/07/pydbgpydasm-with-python-27x-or-more.html

    에 보시면 똑같은 상황을 보실 수 있으실 겁니다.
    그럼 좋은 하루 되세요

    답글삭제
  3. http://stackoverflow.com/questions/6551724/how-do-i-point-easy-install-to-vcvarsall-bat

    위 link 가 답변이 될 듯 합니다. MinGW 를 까는 것이 손 쉬울듯이 보입니다.

    답글삭제