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); }
| |
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 の中はかなりすごいことになっています
(特に後半)。
obfuscate には他にも, 辞書を使って名前を任意の単語に置き換える機能も
あります。
download
- Perl 5.005以降 + Parse::Lex ライブラリが必要です。
- Parse::Lex は CPAN から簡単にインストールできます。
中のドキュメントをご覧下さい。
- 構造体メンバについて, 不可避な理由によりうまく変換できないことが
あります。詳しくは readme をお読み下さい。
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