解析補助用 Rubyスクリプト

毎回ごそごそ作るのもめんどくさいので、この記事に溜めていこうと決意した5分前。


16進2桁区切りでバイナリが記述されたファイルをバイナリファイルに変換(日本語でおk)
a = File.read( ARGV[0] )
a.split("\n").each do |v|
  v.split(" ").each do |b|
    print b.to_i(16).chr if b.length == 2
  end
end
Zlib 解凍

0x78 0x9C とかがきたら解凍。

require 'zlib'

z = Zlib::Inflate.new()
data = File.read( ARGV[0] )                                                                                                                                  
buf = z.inflate(data)                                                                                                                                         
z.close                                                                                                                                                       
                                                                                                                                                              
print buf
何か分からないファイルをXOR総当たりで調べてそれっぽいファイルを保存する

xortoolという便利なものがあるみたいなので、Rubyに書きなおし中。。
書きなおしたけど、普通にpythonで使った方がよいね。

ROTしてくれる
a = "fbzr shpx fragrapr"
tbl = "abcdefghijklmnopqrstuvwxyz"
for k in 0..tbl.length-1
  b = a
  for i in 0..b.length-1
    r = tbl.index(a[i])
    b[i] = tbl[(r+1)%tbl.length] if r != nil
  end
  puts b
end
文字の出現頻度をカウントして表示
a = File.read("file_of_a_bitch");
cnt = Hash.new
for j in 0..a.length-1
  cnt[a[j]] = ((cnt[a[j]]==nil)?0:cnt[a[j]]) + 1
end
cnt = cnt.to_a.sort{|a,b|
  (b[1]<=>a[1])*2 + (a[0]<=>b[0])
}
cnt.each{|c|
  k = c[0]
  v = c[1]
  printf("%02x %c %" + cnt[0][1].to_s.length.to_s + "d ",k,k,v)
  (1..(v*20/cnt[0][1])).each{|m| print "l"}
  puts ""
}