![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
Ruby1.9.3を使用しています。
ruby 1.9.3p551 (2014-11-13 revision 48407) [x86_64-linux]
たのしいRuby第4版8章の簡単なRubyをベースに質問します。
http://tanoshiiruby.github.io/4/list/#ch08
ソース(List 8.10 : hello_module.rb)
--
module HelloModule # module文
Version = "1.0" # 定数の定義
def hello(name) # メソッドの定義
puts "Hello, #{name}."
end
module_function :hello # helloをモジュール関数として公開する
end
p HelloModule::Version #=> "1.0"
HelloModule.hello("Alice") #=> Hello, Alice.
include HelloModule # インクルードしてみる
p Version #=> "1.0"
hello("Alice") #=> Hello, Alice.
--
普通に実行すると
[root@host]# ruby hello.rb
"1.0"
Hello, Alice.
"1.0"
Hello, Alice.
と実行できますが、このソースを簡単な難読化ツールで読みづらくして実行すると
http://d.hatena.ne.jp/kurimura/20080824
--
def _(_)
r="''<<"+_.split("").map{|_|
_=_.ord;
return "~-_" if _==0
(["_"]*(_&3)+["__"]*(_>>2&3)+["___"]*(_>>4&3)+["____"]*(_>>6&3))*"+"
}*"<<"
"->{_=-~($$-$$);__=_<<_+_;___=_<<__;____=__<<__;%s}[]"%r
end
puts"->&_{_}[&:\"\#{#{_"method"}}\"][$$,:\"\#{#{_"eval"}}\"][#{_([*$<]*"")}]"
--
→これをconver-kigou.rbで保存する
難読化実行コマンド
cat hello.rb | ruby convert-kigou.rb > hello.nandoku
[root@host ]# ruby hello.nandoku
"1.0"
Hello, Alice.
hello.nandoku:1:in `eval': undefined method `include' for 3081:Fixnum (NoMethodError)
from hello.nandoku:1:in `eval'
from hello.nandoku:1:in `[]'
from hello.nandoku:1:in `<main>'
と二つ目のincludeのところでエラーになります。
include HelloModule # インクルードしてみる
この部分なのは間違いないのですが、なぜできないのかがわかりません。
(じゃあシンプルなRuby実行すればいいじゃん。という話なのですがちょっとこれはクリアしたいんです。すいません)
eval と includeの相性が悪そうな気がしていますが、アドバイスをいただけると大変ありがたいです。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
難読度は下がりますが、
convert-kigou.rbの最終行を以下に変更すれば良いかもしれません。
puts"->&_{_}[&:\"\#{#{_"method"}}\"][Object,:\"\#{#{_"eval"}}\"][#{_([*$<]*"")}]"
休み中の、良い頭の体操になりました。
No.1
- 回答日時:
開発者に聞かないことにはねぇー。
リンク先のページでは、
>手持ちのRuby1.9の処理系だと動いたけどなぜ動くのか自分でもいまいち理解していない。
・・・なので、第三者には答えられないだろうと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Ruby プログラミング 3 2023/06/09 14:30
- オープンソース Flaskでサーバー立ち上げに関して 1 2023/08/12 21:02
- アプリ Android studio 初心者 Hello Android!しか表示されない 1 2023/08/01 08:47
- CM ANAのCMのナレーションがどなたなのか知りたいです。 1 2023/01/18 16:54
- 英語 "Hello" の語源は何でしょうか?中国語の「好」Hǎo ではないでしょうか? 2 2022/04/01 10:23
- 日本語 Hello! Can you please tell me if the sentence belo 3 2023/04/25 22:31
- Java マイクラでPythonのプログラミングができません 3 2023/05/28 07:15
- JavaScript ifreamをリロードしたい 1 2022/05/03 16:15
- 英語 和訳お願いします 3 2022/10/09 07:13
- その他(学校・勉強) Japanese schools tests 1 2022/08/19 14:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
あせんうぶり言語
-
(再質問)エクセルのマクロボ...
-
前回の質問の続き
-
Accessで文字列のバイト数読み込み
-
実行時エラー450:引数の数が一...
-
Ruby on railsをrails sで立ち...
-
教えてください
-
初心者プログラミング
-
100万件越えCSVから条件を満た...
-
ビーリアルのユーザー名を変え...
-
1、Rstudioで回帰直線を求める...
-
Beautiful Soupのインストール...
-
英数字を含む文字列(0-9,A-Z)...
-
Atomの補完機能
-
これらは書誌情報だと思うので...
-
情報の表現。()内がどうしても...
-
pythonのerrorコード
-
三項でたとえば交換って
-
WinSCPで画像のように puttyを...
-
パソコンのスクリーンセーバー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Ruby interpreter (CUI) 2.2.3 ...
-
RubyでNo such file or directo...
-
Rubyのソースを難読化すると「u...
-
rubyでコマンドプロンプトを使...
-
RubyでexeファイルをつくるExer...
-
Rubyでpdfファイルを読み込む方法
-
Rubyでローカルにあるファイル...
-
Ruby1.9.2でマジックコメントが...
-
Ruby interpreter (CUI) 2.2.3p...
-
rubyプログラムからrubyプログ...
-
【本物のハッカーさん大至急助...
-
Rubyのrandについて
-
rubyのforeach構文について
-
windows7で複数のrbファイルを...
-
プログラムに興味を持つ者です...
-
RubyとMeadow(Emacs)について
-
小文字wと大文字Wの区別
-
システムエンジニアの適正について
-
web上のhtmlファイルから文字デ...
-
VB.NETで階乗を求めるプログラ...
おすすめ情報