[태그:] Python

콘솔 환경에서 악성 스크립트 분석하기! (1)

나중에 작업 환경이 리눅스로 바뀐다면 Malzilla 같은 툴 없이 분석을 쉽게 하기 위해 노가다로 스크립트를 작성해서 한번 찬찬히 분석을 진행해 보았습니다. 제가 작성한 스크립트들이 거지같더라도 이해해 주시길 바라며 분석할 대상 URL은 hxxp://202.133.245.100/exam.asp 입니다. (주의! 함부로 접속하지 마세요.) 먼저 wget을 이용하여 해당 스크립트를 다운로드 하여 살펴보도록 하겠습니다. [byjjoon@ByJJoon Script Analysis]$ wget http://211.234.118.207/main.html –2010-05-09 19:15:35– http://211.234.118.207/main.html Connecting …

Python 으로 구글 검색 결과 받아오기

Python으로 구글 검색 결과를 받아오는 코드를 작성하다 pygoogle 이라는 라이브러리 있는 것을 확인하였으나 더이상 SOAP API 를 구글에서 제공하지 않아 AJAX API를 이용하여 결과를 받아 올 수 있다고 한다. 샘플 코드는 아래와 같다. #!/usr/bin/python import urllib import simplejson query = urllib.urlencode({'q' : 'damon cortesi'}) url = 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&%s' % (query) search_results = urllib.urlopen(url) json = simplejson.loads(search_results.read()) …

자동으로 XOR 키를 찾아 디코딩 해주는 스크립트

XOR로 인코딩 하여 내부적으로 혹은 다른 모듈로 복호화를 진행하는 악성코드들이 발견되고 있습니다. 따라서 XOR로 인코딩 된 파일 확보 시 XOR 키를 찾아서 다시 디코딩 작업을 거쳐야 하는데 이런 과정을 자동화 해주는 스크립트를 작성해 보았습니다. 간단하게 https://jjoon.net/page/?p=149 글에 나왔던 파일에 대해 자동으로 디코딩 해주는 스크립트라 보면 될 거 같습니다. #!/usr/bin/python import operator, sys def find_key(filename): file …

URL to Country script

도메인으로 국가를 알아보기 위해 아래와 같은 스크립트를 작성해 보았습니다. 우선 IP별 국가 리스트 DB 파일을 아래 링크에서 다운로드 합니다. http://geolite.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip 다운로드 한 파일명은 "db.csv" 로 변경하여 사용하면 됩니다. #!/usr/bin/python import sys, socket , re def url2ip(url): url = socket.gethostbyname_ex(url) url = str(url[2]) url = url.split(',') url = re.sub('[\[\]\']', '', url[0]) return url def decimal2hex(s): s …

Python 스크립트를 EXE 파일로! py2exe

Python 스크립트를 EXE 파일로 만드는 py2exe 사용법에 대해 포스팅 합니다. 공식 튜토리얼 : http://www.py2exe.org/index.cgi/Tutorial 먼저 py2exe 모듈을 다운로드 합니다. py2exe 공식 사이트 : http://www.py2exe.org 다운로드 링크에서 자신의 Python 버젼에 맞는 파일을 다운로드 하여 설치하도록 합니다. 설치가 끝났다면 이제 실습을 해보도록 하겠습니다. 먼저 폴더를 하나 만든 후 해당 폴더안에 EXE로 만들고자 하는 Python 스크립트 파일을 복사해 …

The Python Challenge – Level 22

http://www.pythonchallenge.com/pc/hex/copper.html 위 페이지의 소스를 보면 아래와 같은 주석이 있다. <!– or maybe white.gif would be more bright–> white.gif 파일을 좀 더 밝게 해란다. 또 PIL을 이용해야 하는 문제인가보다. white.gif 파일을 확인하여 보면 gif로 애니메이션 파일이다. 각 프레임별로 이미지를 뽑아서 밝기를 높혀보면 점이 나오는 것을 알 수 있다. 이 점들이 움직이는 대로 선을 그려 보면 문자가 …

The Python Challenge – Level 21

해당 문제는 20번에서 받은 파일을 이용하여 푸는 문제 이다. "invader"를 거꾸로 하여 압축을 풀고 나면 package.pack 파일이 나오게 된다. 해당 파일을 Hex Editor로 열어 확인하여 보면 헤더가 [78 9C] 로 시작함을 알 수 있다. 구글링을 하여보니 zlib 관련 파일로 확인되었다. 따라서 zlib 라이브러리를 사용하여 압축을 해제한다. 해제하면 다시 zlib 관련 파일이 나오며 계속해서 안풀릴때 까지 …

The Python Challenge – Level 20

http://www.pythonchallenge.com/pc/hex/idiot2.html 첫 페이지에 접속하면 이미지만 하나 달랑 주어진다. 이 이미지를 살펴보면 파일명이 unreal.jpg 이다. 이미지 파일에 무언가 있을듯하여 살펴보면 다음과 같다. 우선 해당 파일일 요청 시 헤더를 살펴보면 Range가 특이한 걸 알 수 있다. 따라서 Range를 변경시켜 가다보면 특정 메세지를 받을 수 있고 최종 파일을 다운로드 할 수 있게 된다. 아래는 특정 메세지 및 최종 …

The Python Challenge – Level 19

http://www.pythonchallenge.com/pc/hex/bin.html 소스를 보면 왠 Base64로 인코딩된 데이터들이 있다. 이 데이터들을 디코딩 하여 wav 파일로 만들어 보면 "Sorry" 라는 말만 나올뿐 어떤 메세지도 들을 수 없었다. 이것저것 해보다 해당 wav 파일의 width 값을 변경하니 들리지 않던 메세지가 나왔다… 그 메세지는 직접 들어보시길 -_- #!c:\python26\python.exe import urllib, base64, wave url = urllib.urlopen('http://butter:[email protected]/pc/hex/bin.html') data = url.readlines() url.close() data …

The Python Challenge – Level 18

http://www.pythonchallenge.com/pc/return/balloons.html 비슷한 두개의 그림이 보이며 소스를 보면 "it is more obvious that what you might think" 라는 메세지가 있다. 두 그림의 확실한 차이점은 밝기 이다. 따라서 밝기를 영어로 bright 이니 bright.html 로 접속해 보니 ness 라는 메시지가 나왔다. 따라서 아래 페이지를 확인할 수 있었다. http://www.pythonchallenge.com/pc/return/brightness.html 이 페이지 소스에는 deltas.gz 파일이 소스에 들어 있었다. deltas.gz 파일 …