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化することによる脆弱性を用いたexploitを書いた

背景 @inaz2氏のツイートでこの脆弱性を知り、exploitを書くに至った。デストラクタ等が自動実行される。ちなみにPythonのpickleにも同様の脆弱性がある https://t.co/Xkw3KBE3Es / PHPのunserialize関数に外部由来の値を処理させると脆弱性の原因になる htt…

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を以下のように書くといい。 from setuptools import setup import o…

Python3ではexefile()がない

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

Pythonのsource distributionとeggとwheel

wheelファイルなるものを見かけたので調べてみた。 それぞれの作り方 source distribution python setup.py sdist egg setup.pyにfrom distutils.core import setup ではなく from setuptools import setupと書かないと生成されない 。 python setup.py bdis…

fixYabinaryをPython2, 3 両対応にした。

fixYabinaryとは やばいなりをfixするPythonライブラリ。foremost的な。 fixYabinary 0.2.0 : Python Package Index fixYabinaryというPythonライブラリを作った。 - 脱力系日記 Python2, 3 両対応にしたので、どう変えたかをメモ。 .encode("hex") ファイル…

fixYabinaryというPythonライブラリを作った。

この内容はチョット古いです。あきらめて英語版読みましょう。 fixYabinayとは やばいなりをfixするライブラリです。CTFに使えるかもしれない。 ばいなり、やばいなりー。 インストール方法 pip install fixYabinary 使い方 look(file_path) バイナリをバイナリ…

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

_(アンダーバー)から始まる変数はPythonでは不可視を意味し、意識しなくて良い(使われない)という意図を伝えることができるようである。関数とかクラスの頭に_を書いておくとhelp()を実行したときにスルーしてもらえる。[python] 年末大感謝祭!初心者脱出の…

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

タイトルのとおり。 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 報告だけかよ... あげた報告だけなのもアレなので、Wea…