謎の文字列を変換するpythonスクリプト

ちまたで噂のSQLインジェクション埋め込まれるという謎の文字列。気になってたんだけどXORで解けるというのを発見した方がいて、胸のつかえがとれた気がします。平文←→謎文字列の変換スクリプトを書いたので載せておきます。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
u'''
sqlxor.py 
謎文字列解読スクリプト
修正の必要が *もしあれば* http://d.hatena.ne.jp/kkomiyama/20090117に載せるように
します。

解説:
ord(i): 対象文字をascii文字コードに変換
mg[enum%10] : 2番目、12番目、22番目のiにはmgリストの2番目を当てがう
chr ( ord(i) ^ mg[enum%10] ) : 上記2つのXORを取得した後、文字コードを文字に変換

pythonのリスト内包表記(list comprehension)を使って書いてます。シンプルにやるな

--
for enum,i in enumerate(t_plain):
    t= chr ( ord(i) ^ mg[enum%10] )  
    t_crypt.append(t)
--
となります。
'''

import sys

mg=(0,1,2,3,4,4,6,4,1,9)
def crypt(t_plain) :
    print "Before: " , t_plain
    t_crypt=[ chr(ord(i) ^ mg[enum%10]) for enum,i in enumerate(t_plain)]
    print "Result: " , ''.join(t_crypt)
        
def main() :
    if len(sys.argv) == 1:
        print "Error. Please specify strings to process."
        print "Usage:", sys.argv[0] , " Strings_to_convert"
    else:
        crypt(sys.argv[1])

if __name__ =='__main__':
    main()

使用方法

上のソースをコピって、適当な名前に保存。tekitou.py "<変換したい文字列>”で変換できるはず。平文なら謎文字列に、謎文字列なら平文に変換します。

[MB] sparky[~/bin]: ./sqlxor.py http://blog.sparky.jp
Before:  http://blog.sparky.jp
Result:  huvs>+)fmfg/qsevm}/cp

Shellにもよるんですが、引数は”(ダブルクォート)、’(シングルクォート)あるいは個別にエスケープする必要があります。多分。

うーん

攻撃者の真の狙いはなんだろね。今のところ韓国と日本が集中的に狙われているみたいだけど。