Python

Pythonスクリプトに対してユニットテストするときのディレクトリ構成

フレームワークを使って開発しているとユニットテスト用にディレクトリが用意されていることもあるが、単体のPythonスクリプトに対してユニットテストを書くときはディレクトリ構成を考える必要がある。やはりユニットテストとそれ以外は違うディレクトリに…

pysandboxの話

Python Advent Calendar 2015の15日目担当の たけまる(@tkmru)です。 今日はSECCON 2015 九州大会で見かけたpysandboxの話をしようと思います。 pysandboxとは Pythonで作られたsandboxのひとつで、2010年から2013年まで開発が行われていましたが、設計上の…

setup.pyの操作まとめ

はじめに setup.pyはつくったモジュールの情報を書いておくファイル。 モジュールの名前やバージョン、作者、ライセンスなどなど。 たまにしか使わないし忘れるのでメモ。 操作いろいろ モジュールのインストール python setup.py install long_description…

Pythonから外部コマンドを実行する

関数がいくつかあってややこしいのでメモ。 非推奨の方法 osモジュールや、commandsモジュールを使う方法は古いので非推奨となっている。 osモジュールを使う osモジュールのsystem()を使う。この関数は標準 C 関数のsystem() を使って実装されている。戻り…

Pythonの外部入力をunpickle化することによる脆弱性を検証した

背景 @inaz2氏のツイートでこの脆弱性を知り、exploitを書くに至った。 unpickleによる脆弱性 Pythonには、listやdictなどのオブジェクトをバイトストリームに変換するためのpickleという標準モジュールがあり、オブジェクトをバイトストリームに変換するこ…

VMの検知について

マルウェアを解析する際にはVMで解析を行うことが多いので、VMを検知してアンチデバッキングするマルウェアが存在する。それらが用いる手法についてまとめた。 1. TSCを用いる TSC(IA32_TIME_STAMP_COUNTER_MSR: TSC_MSR)とは、CPUクロックごとに加算される6…

ハニポで収集したマルウェアで使用されているpackerを調べてみた。

はじめに ハニーポット dionaeaで収集した209の検体がどんなpackerを用いてるのか調べた。 運用中のdionaeaに対し、nmap -sSした結果は以下のとおり。 Starting Nmap 6.46 ( http://nmap.org ) at 2015-02-03 01:12 JST Nmap scan report for <ipアドレス> Host is up (0</ipアドレス>…

.pyじゃないPythonスクリプトをimportする

拡張子が.pyじゃないPythonスクリプトをimportできると、/usr/local/binにあった実行可能ファイルが実はPython製だった時にPythonから利用しやすくなって便利になる。シェルスクリプト書くより便利な気がする。impモジュールのload_souceを使うことでできる…

jpegとかをpdfに変換したり、まとめたりできるim2pdfつくった。

背景 資料をスキャンしたときに、出力形式をpdfにファイル名をtest.pdfにしてもtest.pdf.jpgで出てきてつらかったので作った。スキャンむずかしい... im2pdfとは jpegとかのimageをpdfに変換するコマンドラインツール。複数のファイルをpdfにまとめたりもで…

PNG向けのLSB方式のsteganographyを書いた。

LSB方式とは LSBとはleast significant bitの略で、末尾のビットのことである。LSB方式のsteganographyとはLSBを書き換えることで、あまり見た目に影響させずにデータを隠すものである。 コード Python2、3両対応。RGBまたはRGBAなPNGにのみ対応。Pillowとい…

Pythonではrot13とかunicode_escapeをエンコーディングに指定できる

タイトルの通りでこんなコードが書ける。 # coding: rot13 cevag('Uryyb').rapbqr('rot13') #print('Uryyb').encode('rot13')と同じ # 出力結果は Hello # coding: unicode_escape \u0070\u0072\u0069\u006E\u0074\u0028\u0027\u0048\u0065\u006C\u006C\u006…

作ったPythonライブラリを任意のコマンド名で実行できるようにする

前、自作ライブラリをコマンドで使えるようにするときに知ったけど、完全に記憶から飛んでたのでメモ。たとえば、test.pyがあってそれをtestというコマンド名で実行したいときは、setup.pyでscriptsに指定してあげるといい。 from setuptools import setup i…

Python3ではexefile()がない

execfile()とはファイルに対して構文解釈を行う組み込み関数である。 Python3ではそのexefile()がない。execfile()は以下のように動作する。 >> execfile("test.py") # test.pyの中身は print 1+1 2 Python3ではexec()で代用する。 exec()は文字列に対し構文…

Pythonのsource distributionとeggとwheel

wheelとeggの違いが分からないので調べた。 それぞれの作り方 source distribution python setup.py sdist egg setup.pyにfrom distutils.core import setup ではなく from setuptools import setupと書かないと生成されない 。 python setup.py bdist_egg w…

Pythonにおける_(アンダーバー)

_(アンダーバー)から始まる変数はPythonでは不可視を意味し、意識しなくて良い(使われない)という意図を伝えるために使われる。関数とかクラスの頭に_を書いておくとhelp()を実行した際にスルーしてもらえる。のx, y = y, x項より引用。 def fib(n): x, y = …

自分の過去ツイートを取得してみたら数が合わなかったがツイ消しのせいだった。

タイトルのとおり。 3200件のツイートを取得出来るはずが、数件取得できなかった。 ツイ消しした分が取得できないのかなーと思い、ツイ消ししてから取得するとツイ消しした分だけ所得件数が減ったのでそうだと思われる。ツイ消ししても、ツイートがあったこ…

IDを用いたeventの設定の仕方。

wxPythonでIDを使ってeventの設定をしてみた。eventと、eventを設定する部品のIDを一緒にする。 # coding: UTF-8 import wx ID_EVENT = 101 class MyFrame(wx.Frame): def __init__(self, parent, ID, title): wx.Frame.__init__(self, parent, ID, title, s…

wx.PySimpleApp() と wx.App()

wx.App()とwx.PySimpleApp()の違いを調べていると、 wxPython Style Guide - wxPyWikiを見つけた。 これの6項目を見ると、 6. wx.App() now has the same built in functionality as wx.PySimpleApp(),so there is no need for the latter. Note: The above …

list以外でも内包表記できる。

Python2では2.7から、3では3.1からできる。 もともとは3.1での新機能だったが、2.7にバックインポートされた。 setで内包表記 setだから重複要素が省ける。 >>> s = {v for v in 'ABCDABCD' if v not in 'CB'} >>> print s set(['A', 'D']) #list内包表記だ…

wxPythonでHTMLを出力する。

wxPythonでHTMLをプラウザで見るのと同じように出力する。 wx.html.HtmlWindowを使うことで可能となる。 # coding: UTF-8 import wx import wx.html class MyHtmlFrame(wx.Frame): def __init__(self, parent, title): wx.Frame.__init__(self, parent, -1, …

Ellipsisを知った。

Ellipsis(...)とは高次元配列のスライスで使われる特殊な値である。numpyでよく使われるようだ。公式ドキュメントでは 拡張スライス文と同時に用いられる特殊な値です。 と書かれているが、ちょっと不親切だと思う。Python2ではEllipsisでEllipsisを返す。 >…

double colonを使ったスライスを知った。

double colonを使ったスライスを知ったのでメモ。Pythonのスライスはa[start:end:step]のように書くことができる。 a[::3]だと3つごとに要素を返す。 コード例 15 Extended Slicesより引用。 >>> L = range(10) >>> L[::2] [0, 2, 4, 6, 8] >>> L[::-1] [9, …

天気予報取得するPythonスクリプト書いた。

どっから情報とるの? Weather Hacksという天気情報をJSON形式で配布しているサービスを使った。 コードはブログに載せるにはちょっと長いのでgithubにあげた。→https://github.com/tkmru/weatherhacks 地域情報を取るコード Weather Hacksを使うにあたり必…