蟻ーヴェデルチ

覚悟はいいか?

KDF1

Key Derivation Functions: How many KDFs are there?

KDF1というのを調べる機会があって、結果を確認するためのコードをpythonで書いてみた。KDF1は鍵導出関数というものの一種らしい。

from binascii import unhexlify
from hashlib import sha1
from math import ceil

Z = ''.join(chr(x) for x in range(0, 16))
Hash = sha1(Z).digest()

d = int(ceil((float)(len(Z)) / len(Hash)))
T = ''
other = 'Hello KDF1'

for c in range(0, d): 
    C = unhexlify('%08X' % c)
    T = T + sha1(Z + C + other).digest()

print('Z:    ' + Z.encode('hex'))
print('KDF1: ' + T[:len(Z)].encode('hex'))

便宜上sha1にしているけれど、別のアルゴリズムでもOKなはず。実はこれでええのかイマイチ自信はない!

pycryptoと遊んでみる

こんにちは、deusx'sキッチンの時間です。
暗号とか詳しく知らんしという、ふわっとした状態でpycryptoと遊んでいます。

dlitz/pycrypto · GitHub
PyCrypto API Documentation

何でも良かったんだけど、最初にやったのがpycryptoだったので。

from Crypto.Cipher import AES 
from binascii import hexlify, unhexlify

key = ''.join(chr(x) for x in range(0, 16)) # AES-128
iv = unhexlify('00' * 16) # initialization vector 16 bytes
origin = 'Hello pycrypto!' * 16 # n * 16 bytes

en = AES.new(key, AES.MODE_CBC, iv).encrypt(origin)
de = AES.new(key, AES.MODE_CBC, iv).decrypt(en)

# hex dump
print('[key]: ' + key.encode('hex'))
print('[iv]:  ' + hexlify(iv))
print('[origin]:\n' + origin.encode('hex'))
print('[en]:\n' + en.encode('hex'))
print('[de]:\n' + de.encode('hex'))

# answer comparison
print('[origin]:\n' + origin)
print('[de]:\n' + de) 

ボクは頭賢くないので実際に動作を確認しながら、少しずつ勉強していってる次第であります。

gdbを使ったandroidとの遊び方

こんにちは、deusx'sキッチンの時間です。
androidと遊んでて、最近覚えたことをメモする。たぶんuserdebug(suとgdbserverが動けば、user buildでも可?)前提で、自分でビルドできる人用のメモだと思う。

adb forward tcp:5039 tcp:5039
adb shell gdbserver --attach :5039 TARGET_PID

開発環境に下記のtoolchainを入れてパスを通し、arm用のgdbを使えるようにする。
platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7 - Git at Google

arm-linux-androideabi-gdb SOURCE_PATH/out/target/product/hoge/symbols/system/bin/TARGET_BIN
(gdb) set solib-search-path SOURCE_PATH/out/target/product/hoge/symbols/system/bin:SOURCE_PATH/out/target/product/hoge/symbols/system/lib
(gdb) directory SOURCE_PATH
(gdb) target remote :5039
(gdb) continue

TARGET_PIDに自分の作成したapkのpidを指定して、TARGET_BINにapp_processを指定すると色々調べられる。ちなみにICSでしか確認していない。

参考文献

Android gdb debugging · keesj/gomo Wiki · GitHub

ファイルの末尾のX行だけ消す

もっと巧い方法がある気がするが、

LAST=`wc -l hoge | awk '{print $1}'`
START=`expr $LAST - X + 1`
sed -i ${START}','${LAST}'d' hoge

とりあえずこれで4000個くらいのファイルの末尾のX行を消したった。