obfuscate

$Id: obfuscate.html,v 0.1 2001-04-05 17:12:28+09 daiti-m Exp $

obfuscate は, C言語のソースをそれと等価な, 読みやすい:-) 形式に変換す るプログラムです。Lisp (scheme)用に書くほうが実装は容易ですが, ユーザ が少ないと想像されるため ;_; C言語用に製作しました。
思想的背景については, 別ページをどうぞ。

obfuscate は, たとえば以下のソース (nkf.c の一部)を 下のように変換します。

 int push_hold_buf(c2, c1)
    int c2,
                    c1; {
    if(hold_count >= HOLD_SIZE*2)
        return (EOF);
    hold_buf[hold_count++] = c2;
    hold_buf[hold_count++] = c1;
    return ((hold_count >= HOLD_SIZE*2) ? EOF : hold_count); } 
obfuscate 後:
 int lll____(ll_ll__, ll_lll_)
    int ll_ll__,
                    ll_lll_; {
    if(l__l____ >= l___ll_*2)
        return (EOF);
    l___lll_[l__l____++] = ll_ll__;
    l___lll_[l__l____++] = ll_lll_;
    return ((l__l____ >= l___ll_*2) ? EOF : l__l____); } 

もちろん, これは正常にコンパイルに通ります。 次のファイルを

% gcc -DDEFAULT_CODE_EUC -o nkf nkf0.c
としてコンパイルしてみて下さい。 ちなみに, nkf0.c の中はかなりすごいことになっています (特に後半)。

nkf0.c (obfuscated)
% obfuscate nkf.c > nkf0.c
nkf.c (original nkf 1.71)
ftp://ftp.ie.u-ryukyu.ac.jp/pub/software/kono/nkf171.shar

obfuscate には他にも, 辞書を使って名前を任意の単語に置き換える機能も あります。

download

download: obfuscate-0.1.tar.gz

注: あくまで実験用です。実用を目指しているわけではありませんので, 通らないソースについてはご容赦下さい。ただ, 仕様でないバグレポート は歓迎します。

usage

% obfuscate [options] qux.c > quux.c

options:
-o outfile
出力結果を格納するファイル名 (デフォルトは標準出力)。
--cpp="cpp"
#include を内部で処理する際の C プリプロセッサを指定. デフォルトは 'gcc -E'.
--cppflags=".."
cpp に渡すフラグ. -Dfoobar, -I.. など.
--generator="{make_bitstring|dict_random|dict_sequence}"
token 名を生成する generator 関数名. デフォルトは make_bitstring (自分で追加可能)。
--dict="dictionary"
generator に dict_random または dict_sequence を指定したときに 使われる辞書。デフォルトは /usr/dict/words.
--force-replace
デフォルトでは標準出力に変換結果を書き出すが, このオプションが指定 されると元のファイルを上書きする。

obfuscate gallery

sary.c (in sary-1.0.3.tar.gz) (sorry ^^; for satoru)
original
obfuscated
made with: % obfuscate --cppflags="-DHAVE_CONFIG_H -I. -I. -I.. -I/usr/local/lib/glib/include -I/usr/local/include -D_REENTRANT -DG_LOG_DOMAIN=\"Sary\" -I.. " sary0.c > sary.c
mksary.c (in sary-1.0.3.tar.gz) (お勧め)
original
obfuscated
made with: % obfuscate --cppflags="-DHAVE_CONFIG_H -I. -I. -I.. -I/usr/local/lib/glib/include -I/usr/local/include -D_REENTRANT -DG_LOG_DOMAIN=\"Sary\" -I.. " --generator=dict_sequence --dict="../../../communism.dic" mksary0.c > mksary.c
more will be added..

関連リンク:


daiti-m@is.aist-nara.ac.jp
Last modified: Sat Apr 7 02:38:04 JST 2001