'프로그래밍'에 해당되는 글 18건

python ctypes GetFileVersion

Posted by nopsled
2016.11.09 23:39 프로그래밍

몇일 전부터 혼자 삽질해보려고 했는데 국방망이라서 할수도 없고... 열심히 기본적으로 제공해주는 모듈로도 할 수 있을꺼같아서 사지방에서 검색하고 또 검색해서 찾은 아웃풋..


import array

from ctypes import *


def get_file_info(filename, info):

    size = windll.version.GetFileVersionInfoSizeA(filename, None)

    if not size:

        return ''

    res = create_string_buffer(size)

    windll.version.GetFileVersionInfoA(filename, None, size, res)

    r = c_uint()

    l = c_uint()

    windll.version.VerQueryValueA(res, '\\VarFileInfo\\Translation',

                                  byref(r), byref(l))

    if not l.value:

        return ''

    codepages = array.array('H', string_at(r.value, l.value))

    codepage = tuple(codepages[:2].tolist())

    windll.version.VerQueryValueA(res, ('\\StringFileInfo\\%04x%04x\\'

+ info) % codepage,byref(r), byref(l))

    return string_at(r.value, l.value)


print get_file_info(r'C:\WINDOWS\system32\calc.exe', 'FileVersion') 

출처 : https://mail.python.org/pipermail//python-list/2006-November/402797.html


기본적으로 제공해주는 ctypes와 array 모듈... 처음에 API도 없다고 떠서 한참 고민했다.


get_file_info의 두번째 파라미터인 info에는 Comments, CompanyName, FileDescription, InternalName, LegalCopyright, OriginalFilename, ProductVersion, ProductName, FileVersion 등등이 들어갈 수 있다.


python Get File Version from binary

저작자 표시 비영리
신고

'프로그래밍' 카테고리의 다른 글

python ctypes GetFileVersion  (0) 2016.11.09
python 윈도우 한글문제  (0) 2016.04.26
python unicode unescape (html unescape)  (0) 2015.11.07
django standard install..  (0) 2015.10.13
Convert Facebook username to id  (0) 2015.04.12
[파밍 크롤러] pharming crawler  (1) 2015.01.28

python 윈도우 한글문제

Posted by nopsled
2016.04.26 21:30 프로그래밍
아오 인코딩 때문에 4시간은 삽질한거 같다.



문제점_____________________________________


1. 윈도우 cmd 쉘에서는 한글이 자꾸 깨진다.

2. raw_input으로 입력받아서 urllib.quote()로 url encoding해주면 윈도우와 리눅스는 다른 결과값이 나온다.




주절주절___________________________________


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

import sys

reload(sys)

sys.setdefaultencoding('utf-8')

print u'한글' # 고정으로 변수에 한글을 넣을 경우 맨앞에 u를 붙인다.

print repr(raw_input('input korean : ')) # 윈도우 cmd 쉘에서 "한글" 단어를 입력할시 '\xc7\xd1\xb1\xdb'로 보여진다.

#print repr(raw_input('input korean : ')) # 리눅스 bash 쉘에서 "한글" 단어를 입력할시 '\xed\x95\x9c\xea\xb8\x80'로 보여진다.



삽질하다가 알게된건 다음과 같다.

윈도우 cmd 쉘에서 입력 받은 한글(\xc7\xd1\xb1\xdb)은 euc-kr로 되어 있는 것이고,

리눅스 bash 쉘에서 입력 받은 한글( \xed\x95\x9c\xea\xb8\x80)은 utf-8로 되어 있는 것이다.




해결방법___________________________________


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

import sys

reload(sys)

sys.setdefaultencoding('utf-8')

print repr(raw_input('input korean : ').decode('euc-kr').encode('utf-8')) # '\xed\x95\x9c\xea\xb8\x80' 결과는 결국 utf-8로 나오고 잘 출력된다.









저작자 표시 비영리
신고

'프로그래밍' 카테고리의 다른 글

python ctypes GetFileVersion  (0) 2016.11.09
python 윈도우 한글문제  (0) 2016.04.26
python unicode unescape (html unescape)  (0) 2015.11.07
django standard install..  (0) 2015.10.13
Convert Facebook username to id  (0) 2015.04.12
[파밍 크롤러] pharming crawler  (1) 2015.01.28

python unicode unescape (html unescape)

Posted by nopsled
2015.11.07 15:12 프로그래밍


시작하기 전에,

  이거 때문에 엄청난 삽질을 했다... 물론 엄청 안되서 삽질을 했지만.. 파이썬의 인코딩 형식은 \u로 시작한다. 하지만 html에서는 %u로 시작했기 때문에 unescape가 불가능 했던 것이다... 이 간단한 것 때문에 매~우 삽질을 했다.





방법은?

#-*- coding:utf8 -*-

#!/usr/bin/python

import sys

reload(sys)

sys.setdefaultencoding('utf-8')


word = unicode('%uC548%uB155%uD558%uC138%uC694%7E%21%20%uC774%uAC74%20%uBB38%uC790%uC5F4%uC785%uB2C8%uB2E4.%24_%24'.replace('%u','\\u'), 'unicode-escape')

print word 

출력 결과 : 안녕하세요%7E%21%20이건%20문자열입니다.%24_%24




  %7E%21~ 이건 무엇이냐면, URL Encode되어 있는 문자열이다. 그래서 이걸 어떻게 URL Decode 하냐면 다음과 같다.




#-*- coding:utf8 -*-

#!/usr/bin/python

import sys, urllib

reload(sys)

sys.setdefaultencoding('utf-8')


word = unicode('%uC548%uB155%uD558%uC138%uC694%7E%21%20%uC774%uAC74%20%uBB38%uC790%uC5F4%uC785%uB2C8%uB2E4.%24_%24'.replace('%u','\\u'), 'unicode-escape')

print urllib.unquote(word) 

출력 결과 : 안녕하세요~! 이건 문자열입니다.$_$



이렇게 쉽게 쉽게 할 수 있다.

저작자 표시 비영리
신고

'프로그래밍' 카테고리의 다른 글

python ctypes GetFileVersion  (0) 2016.11.09
python 윈도우 한글문제  (0) 2016.04.26
python unicode unescape (html unescape)  (0) 2015.11.07
django standard install..  (0) 2015.10.13
Convert Facebook username to id  (0) 2015.04.12
[파밍 크롤러] pharming crawler  (1) 2015.01.28

django standard install..

Posted by nopsled
2015.10.13 10:57 프로그래밍

I have to development about web project..

html and php is old.. so, i decided to use django!! django is so useful and quick and idk about web programming. but this is so good idea about using python


django division project and application. project's big notion, application's into project's small notion.

so we building about standard setting in django.

* [important] ah, django must installed!! *



1. we bulding about django project (big notion)

nopsled@localhost:/var/www (=`ω´=)$ django-admin.py startproject project

nopsled@localhost:/var/www (=`ω´=)$ ls

?/                  project/         _________.php*      index.php           p2p_crawler.tar.gz  phpmyadmin/         test@.php

nopsled@localhost:/var/www (=`ω´=)$

# we created project!!



2. confirm running django server.

nopsled@localhost:/var/www/project (=`ω´=)$ python manage.py runserver 8000

Performing system checks...


System check identified no issues (0 silenced).


You have unapplied migrations; your app may not work properly until they are applied.

Run 'python manage.py migrate' to apply them.


October 13, 2015 - 00:25:50

Django version 1.8.5, using settings 'project.settings'

Starting development server at http://127.0.0.1:8000/

Quit the server with CONTROL-C.


[13/Oct/2015 00:26:08] "GET / HTTP/1.1" 200 1767




3. if you want using database with mysql, modify database in settings.py

DATABASES = {

    'default': {

        'ENGINE': 'django.db.backends.mysql',

        'NAME': 'test', # if you custom database in mysql, modify path.

        'USER': 'root', # set your mysql user

        'PASSWORD': '???????', # set your mysql password

        'HOST':'127.0.0.1', # if you want remote connect, modify it!

        'PORT':'3306', # if you modified mysql default port, modify it too.

    }

}



4. we use django migrate for database.

nopsled@localhost:/var/www/project (=`ω´=)$ python manage.py migrate

>> ERROR : django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named MySQLdb

# but error with MySQLdb is not defined.. we have to use wget and install it.

# or another cause error, using python manage.py syndb

nopsled@localhost:/var/www/SeoulMetro/db (=`ω´=)$ wget https://github.com/farcepest/MySQLdb1/archive/master.zip

# unzip it and use "python setup.py build;sudo python setup.py install" in command line

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib/

# if you error in mac osx, using export path.





5. and create with django application (small notion)

nopsled@localhost:/var/www/project (=`ω´=)$ python manage.py startapp application

nopsled@localhost:/var/www/SeoulMetro (=`ω´=)$ ls

project/   db/           db.sqlite3    manage.py*    application/








THE END.... T.T

저작자 표시 비영리
신고

Convert Facebook username to id

Posted by nopsled
2015.04.12 05:11 프로그래밍

Convert facebook username to id

Convert facebook id to username


프로젝트 때문에 python으로 페이스북 메시지를 보내려고 하는데 문제가 있다.


username으로 설정된 유저들은 메시지가 보내지지 않고 id로 설정된 유저들에게만 메시지가 보내지는 점이었다. 예를 들자면 다음과 같았다.


메시지 보내지는 경우

  - Facebook.com/1000005841626


메시지 보내지지 않는 경우

  - Facebook.com/John.smith


그래서 구글링 결과 facebookd에서 convert할 수 있게 URL이 명시되어 있었다.


Request URI : https://graph.facebook.com/100008210675562  

Response :

{
   "id": "100008210675562",
   "first_name": "\uacbd",
   "gender": "female",
   "last_name": "\ubcf4",
   "link": "https://www.facebook.com/people/\ubcf4\uacbd/100008210675562",
   "locale": "ko_KR",
   "name": "\ubcf4\uacbd"
}

이런식으로 JSON으로 뱉어줘서 사용하기가 편리하다.


끝.

저작자 표시 비영리
신고

[파밍 크롤러] pharming crawler

Posted by nopsled
2015.01.28 16:23 프로그래밍



import sys, socket, urllib, re

#PharmingIp = 1958039481

userNum = 195804344

while True:

    data = urllib.urlopen('http://r.qzone.qq.com/cgi-bin/user/cgi_personal_card?uin=' + str(userNum)).read()

    ip = re.findall("nickname\":\"(.*?)\",", data)

    if len(ip) != 0:

        if ip[0].find('.') > 0:

            try:

                sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

                sock.connect((ip[0], 80))

                sock.send("GET %s HTTP/1.0\r\nHost: %s\r\n\r\n" % ('/', 'naver.com'))

                data = sock.recv(248)

            

                if data.find("NAVER") > 0:

                    print '[************************] ' + ip[0] + ':' + '80 [************************]'

                else:

                    print '[-] This server is not Pharming\t' + ip[0]

            except:

                print '[-] nickname/userNum : ' + ip[0] + '/' + str(userNum)

        else:

            pass

            #print '[-] not ip type.  uNum:' + str(userNum)

    else:

        pass

        #print '[-] data is not exist.  uNum:' + str(userNum)

    userNum+=1

 


comPharming.py




파밍 크롤러


닉네임 파싱해서 IP인 경우 파밍에 사용되는 서버인지 확인해주는 크롤러


얻어 걸리는건 정말 극소수... 없다고 보면 된다. (내가 왜 만들었지..)


20분 낭비..

저작자 표시 비영리
신고

악성코드 자동분석관리 시스템 with telegram-cli, pytg

Posted by nopsled
2014.12.09 10:39 프로그래밍

악성코드 자동분석과 텔레그램 cli를 이용하여 virustotal 및 악성코드 스캐닝 결과를 텔레그램으로 보내는 역할을 하려고 한다.


우분투 환경에서 텔레그램 cli를 이용하여 하려했는데 자꾸 오류가떠서 진행이 안됬다..


구글링을 계속 시도한 결과.. 다음과 같은 명령어를 찾아서 깃에서 크론할 수 있었다.

(텔레그램 CLI가 IPC로 lua스크립트랑 통신이 가능하다고 하여서 더 찾아보니 pytg라고 해서 python과도 IPC통신을 지원하나보다. 그래서 pytg또한 인스톨 방법을 설명한다.)


telegram-cli & lua script

 # sudo apt-get install libreadline-dev libconfig-dev libssl-dev lua5.2 liblua5.2-dev libevent-dev

각종 라이브러리를 설치한다.


 # git clone --recursive https://github.com/vysheng/tg.git && cd tg

--recursive 옵션이 빠져서 설치에 어려움이 있었던 점하나 떄문에 configure는 됬지만 make가 안됬던 점..


 # ./configure & make 

이제 configure와 make를 이용하여 바이너리를 생성한다.


 # telegram-cli -k ../server.pub

추가로 server.pub 키를 -k 파라미터에 줘야하는데 bin디렉토리가 아니라 tg디렉토리에 있으므로 위와 같은 명령어를 사용하였다.


telegram-cli는 IPC로 통신하기 때문에 -s 옵션을 줘서 lua 스크립트로 수신이 가능하고, -p를 사용하면 node.js로 송신이 가능하다고한다. 




telegram -cli & python script

 # sudo apt-get install libreadline-dev libconfig-dev libssl-dev lua5.2 liblua5.2-dev libevent-dev 

마찬가지로 각종 라이브러리를 설치한다.


 # sudo pip install future

 # git clone https://bitbucket.org/luckydonald/pytg2.git && cd pytg2 && sudo python setup.py install

future를 인스톨하고 pytg를 클론한다.


 # git clone https://bitbucket.org/luckydonald/tg-for-pytg2.git && cd tg-for-pytg2

버전 패치라나.. 뭐라나.. 다시 한번더 설치해준다.


# ./configure && make

# ./configure --disable-liblua && make

만약 위 명령어가 에러뜬다면 두번째 줄 명령어를 실행한다. (전 에러없이 잘됬었으므로.. 첫번째를 사용함.)



참고로 php에서 system명령을 사용해서 telegram-cli를 실행함과 동시에 메시지를 보내지지가 않는다.. 이유는 nobody권한으로 실행되기 때문에..


그래서 /tmp 경로에 바이너리를 드랍해놨다.(telegram-cli, server.pub)



#!/usr/bin/python

# -- coding: UTF-8  --

import os, cgi

form = cgi.FieldStorage()

cmd = form['cmd'].value

peer = form['peer'].value

msg = form['msg'].value


print 'Content-type:text/html\n'

allowList = ['상명']

limitWords = ['passwd', '.py', 'mysql', 'root', 'php', 'html']

if peer in allowList:

    # check bad parameter

    for i in range(0, len(limitWords)):

        if msg.find(limitWords[i]) == -1:

            badParameter = 0

        else:

            badParameter = 1

            break

    if badParameter is 0:

        os.system('echo -e \'contact_list\n' + cmd + ' ' + peer + ' ' + msg +'\nsafe_quit\n\' | /tmp/telegram-cli -k /tmp/server.pub -W > /tmp/k.txt')

        print 'Sucessfully sending msessage.'

    else:

        print 'Please msg parameter. :('

else:

    print '''

        Your name is not include allow list.<br>

        allowList = [\'상명\']

    '''

위 스크립트는 메시지를 보내기 위한 스크립트로써 cgi-bin 폴더에 있어야함.




#!/usr/bin/python

import os

from BaseHTTPServer import HTTPServer

from CGIHTTPServer import CGIHTTPRequestHandler


if __name__ == '__main__':

        serv = HTTPServer(("", 8888), CGIHTTPRequestHandler)

        serv.serve_forever() 

그 뒤에는 python cgi서버를 열어서 8888번 포트로 서버운영 및 메시지를 보냈다.



-- 프로젝트 종료.

저작자 표시 비영리
신고

Android eclipse 디렉토리

Posted by nopsled
2014.10.28 17:34 프로그래밍

src : java 코드들이 들어있는 곳(source)

gen : 해당 프로젝트를 빌드하기 위한 자바 파일들이 참조되어 있는 곳

Android * : Android SDK

assets : 바이너리 파일

libs : 라이브러리 파일 (외부 라이브러리를 사용할땐 여기에 포함시킨다.)

res : 리소스 (그림, 레이아웃, XML 파일 등)

res/drawable-hdpi : 리소스 중에서 그림파일들이 들어갈 곳

** drawable : 안드로이드 장치의 해상도가 다양하기 떄문에 해상도에 따라 사용할 이미지를 분류해서 넣어놓기 위해 존재

layout : 레이아웃 XML이 들어있는 폴더로 activity_main.xml이 포함되어 있음.

menu : 메뉴 레이아웃 XML이 들어있음. (기본적으로 Settings 항목 하나가 있는 XML이 들어있음.)

values : 안드로이드 프로그램에서 사용할 값들을 저장한 XML들이 들어있음. (strings.xml에 Hello_World가 들어있음.)

values-v11, values-v14 : 안드로이드 버전 호환성을 위한 것들이 있음

AndroidManifest.xml : 안드로이드 프로젝트를 생성할때 설정한 값들이 들어있음.

저작자 표시 비영리
신고

오토핫키 한글 출력 로직

Posted by nopsled
2014.08.13 09:51 프로그래밍



string_dst = 안녕하세요.

Loop, % strlen(string_dst)/2

{

Tooltip, % substr(string_dst, 1, A_INDEX*2)

Sleep, 500

}

; 디버깅 결과

; MsgBox, 안

; MsgBox, 안녕

; MsgBox, 안녕하

; MsgBox, 안녕하세

; MsgBox, 안녕하세요

; MsgBox, 안녕하세요. 





string_dst = 안녕하세요.

count = 1

Loop, % strlen(string_dst)/2

{

Msgbox, % substr(string_dst, count, 2)

count+=2

} 

 ; 디버깅 결과

; MsgBox, 안

; MsgBox, 녕

; MsgBox, 하

; MsgBox, 세

; MsgBox, 요

; MsgBox, .



추가 내용 : 영문혼합안됨.


저작자 표시 비영리
신고

'프로그래밍' 카테고리의 다른 글

악성코드 자동분석관리 시스템 with telegram-cli, pytg  (0) 2014.12.09
Android eclipse 디렉토리  (0) 2014.10.28
오토핫키 한글 출력 로직  (0) 2014.08.13
Python 주민등록번호 검증  (0) 2014.05.06
AutoHotKey 파일 구하기  (0) 2014.04.01
php MD5  (0) 2014.03.30

Python 주민등록번호 검증

Posted by nopsled
2014.05.06 02:09 프로그래밍

1
2
3
4
5
6
7
8
9
kssn = raw_input("주민등록번호 : ")
logic = [2,3,4,5,6,7,8,9,2,3,4,5]
number = 0
for i in range(0, len(logic)):
    number += int(kssn[i]) * int(logic[i])
if 11-(number%11) == int(kssn[12]):
    print "이 주민등록번호는 유효한 주민등록번호 입니다."
else:
    print "이 주민등록번호는 유효하지 않은 주민등록번호 입니다."


저작자 표시 비영리
신고

'프로그래밍' 카테고리의 다른 글

Android eclipse 디렉토리  (0) 2014.10.28
오토핫키 한글 출력 로직  (0) 2014.08.13
Python 주민등록번호 검증  (0) 2014.05.06
AutoHotKey 파일 구하기  (0) 2014.04.01
php MD5  (0) 2014.03.30
Microsoft-IIS/6.0 webdav remote authentication bypass scanner v0.1  (0) 2014.03.28

티스토리 툴바