とりあえず

ここに置いてみました。 ブログエンジンが完成次第移転する予定です。

Pythonの無名関数で再帰

やたーPythonの無名関数で再帰出来たよー(^o^)ノ import sys, new for i in xrange(10): print i, (lambda n: n if n <= 1 else new.function(sys._getframe().f_code, globals(), None, None, None)(n - 1) + new.function(sys._getframe().f_code, globals(…

プロセスを一時停止/再開するプログラム

プロセスを一時停止/再開するプログラムをPythonで書いた。標準ライブラリのみで行いたかったのでpywin32などサードパーティー製のライブラリは使用していない。 プロセスを一時停止/再開させる(ドキュメント化された)Windows APIは残念ながら存在しないので…

Delphi互換の擬似乱数生成コード

ちょっと必要になったのでDelphi互換の擬似乱数を生成するプログラムを書いた。 Linear congruential generator - Wikipediaを参考にした。 class DelphiRandom: def __init__(self, seed=0): self.seed = seed def __call__(self, max): self.seed = (self.…

再帰下降構文解析による数式の評価

再帰下降構文解析を用いて数式を評価するプログラムを書いた。四則演算と括弧の使用ができる。演算子の優先順位は通常通り。以下にソースコードを示す。 ExpressionEvaluaterはクラスではなく関数にしても良いかもしれない。 #!/usr/bin/env python # coding…

PythonでGUIDを生成する

PythonでGUIDを生成する方法。 標準ライブラリのuuidモジュールを使えば良い。 >>> import uuid >>> str(uuid.uuid4()) '4155f6f5-fa9e-4669-87a1-7ee43a4a70c5'

Google App Engineでエラーが

久しぶりにGoogle App Engineでdev_appserver.pyを起動すると以下のようなエラーが出た。 INFO 2009-10-21 00:00:00,375 py_zipimport.py:108] zipimporter('C:\\Python25\\lib\\site-packages\\simplejson-2.0.9-py2.5-win32.egg', 'simplejson\\') Traceba…

Pythonでバイトコードを書き換える

Pythonでバイトコードを書き換える方法。co_codeがreadonlyなのでcodeオブジェクトをわざわざ作り直している。 以下の例では乗算を累乗に変更している。 import new import opcode def hoge(n): return 2 * n hoge(16) #=>32 piyo = hoge.func_code.co_code.…

htmlentitydefs

こんなモジュールがあるのか。 >>> import htmlentitydefs >>> htmlentitydefs.name2codepoint['copy'] 169 >>> htmlentitydefs.codepoint2name[ord('&')] 'amp'

turtleモジュールでturtle graphics

面白い。

PythonでBrainfuckコンパイラ

PythonでBrainfuckコンパイラを書いた*1。MS-DOS上で実行可能な.COMファイルを出力する。32ビットWindows上で動くはず。 helloworld++++++++>+++++++++++>+++++.>++.+++++++..+++.>-.------------.+.">*2がコンパイル/実行出来ることは確認した。 最適化など…

str.endswithには配列も指定できる

Pythonのstr.endswithには配列も指定できることを知った。 path.endswith(('/','\\'))

様々な書き方

変数pathが、使用しているOSのファイルパスの区切り文字で終わっていなければ区切り文字を終端に付加するプログラム。 import os # 1 if path.endswith(os.path.sep): path += os.path.sep # 2 path += os.path.sep if path.endswith(os.path.sep) else '' #…

__new__

Python 2.6.3 (r263rc1:75186, Oct 2 2009, 20:40:30) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> class Hoge(object): ... def __new__(self): ... return 0 ... >>> Hoge() 0

テンパズルを解く

テンパズルを解くプログラムをPythonで書いた。 C:\>make10.py 1 1 5 8 8/(1-(1/5)) time: 0.0699999332428 sのように使う。CPython 2.6で動作を確認した。 仕組みはいたって簡単で、後置記法の式を生成し計算して演算結果が10なら挿入記法に変換して表示す…

CygwinでSpiderMonkeyのビルド

CygwinでSpiderMonkeyをビルドしたのでメモ。 ここからjs-1.8.0-rc1.tar.gzを落として適当な場所に伸張。 srcディレクトリに移って make -f Makefile.ref OS_ARCH=Linux LD=gcc BUILD_OPT=1を実行。 Linux_All_OPT.OBJディレクトリが出来、その中にjs.exeが…

JavaScriptの勉強

JavaScriptを勉強することにした。 無名関数で再帰できたりジェネレーターがあったりしてちょっとたのしい。 フィボナッチ arguments.calleeを使うと自分自身の関数を参照できる。 var fib = (function() { var memo = {1: 1, 2: 1}; return function(n) { r…

GAEのURL FetchでUser-Agentを指定する

Google App EngineのURL FetchでUser-Agentを指定する方法。 from google.appengine.api import urlfetch urlfetch.fetch('http://taruo.net/e/', headers={'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 6.1; ja; rv:1.9.0.10) Gecko/2009042316 Fir…

PythonでMessageBox

PythonでWin32 APIのMessageBoxを呼ぶ。 pywin32が必要。 呼び出しにはwin32apiモジュールを、定数値にはwin32conモジュールを使う。 import win32api import win32con win32api.MessageBox(0, u"これはめっせーじぼっくすのてすとです!", u"てすと", win32…

DeliciousのFirefoxアドオンでブックマークする際にデフォルトで"do not share"にチェックをいれる

DeliciousのFirefoxアドオンでブックマークする際にデフォルトで"do not share"にチェックをいれる方法。 about:configから以下の名前で値が1の整数値を作成する。 extensions.ybookmarks@yahoo.sharemode元に戻すには値を0にすればよい。

Pythonでバージョンが3以降であることを判別する

Pythonでバージョンが3以降であることを判別する方法。 sys.version_info >= (3, 0, 0) 3であること(3より上のバージョンは含めない)を判別するには以下のようにすればよい。 (4, 0, 0) > sys.version_info >= (3, 0, 0)

buffer overflow

buffer overflow面白い。いつか解説書きたい。 #include <stdio.h> #include <string.h> int secret(); int main(int argc, char **argv) { char buffer[256]; strcpy(buffer, argv[1]); printf("%s", buffer); return 0; } int secret() { puts("secret code"); return 0; } #!</string.h></stdio.h>…

crackme #09 のkeygen

rce

eagle0wlさんのcrackme #09のkeygen(キージェネレーター)を書いた。 初めてまともにアセンブラを使ったが理解が曖昧なので結構苦労した。 eagle0wlさんのkeygen template #03を使わせて貰った。 チュートリアルはいつか書く。 ソースコードの必要な部分だけ…

洞窟物語の改造 - 多重起動防止の解除 -

昨日のエントリに引き続き洞窟物語の改造をしてみる。 今日は多重起動防止の解除だ。オンラインゲームではないのであまり意味はないが気にしない。 多重起動防止の方法にはいくつかあってここが参考になる。 さて、前置きはここまでで早速始めようと思う。 …

洞窟物語の改造

ゲーム改造の練習に洞窟物語を改造してみる。 とりあえずeXeScopeで開いてみると以下のようにデッバガセーブ/消音というメニューがあることが分かる。 この二つのメニューはゲームのプレイ時には表示されていない。Win32 APIを使って削除していると予測する…

日付とUnix Timeの相互変換

RCE関連を扱うと言っておきながら早速別の話題だが気にしない。 Pythonで日付とUnix Timeの相互変換をする。 >>> import time >>> # 日付 -> Unix Time >>> time.mktime((2009,04,25,16,15,0,0,0,0)) 1240643700.0 >>> # Unix Time -> 日付 >>> time.localti…

ブログ開始

ブログを始めてみる。 主にリバースコードエンジニアリングとその周辺、ゲームチートについて取り扱う予定。