パスワードを忘れた? アカウント作成
9847 story
プログラミング

自分のコードの証とは? 167

ストーリー by Acanthopanax
書いた証 部門より

tamo 曰く、 "ZDNet Australia の記事によると、gpl-violations.org は GPL 違反を見付けるために、バイナリ中のメッセージを検索したりしているそうです。たとえばその創立者 Harald Welte が書いた Netfilter は'Rusty needs more caffeine.' というメッセージを出すので、無断で使用しているのがすぐ分かるそうです。皆さんは自分の書いたコードに、あとから見分けられるような特徴を付けておられますか? また、そうするための良い方法などがあればお聞かせください。"

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • 特になにも・・・ (スコア:3, おもしろおかしい)

    by wadatch (6649) on 2005年03月21日 19時01分 (#711772) 日記
    縦読みしたら自分の名前とか出たら・・・と妄想してしまいました。

    これだけだと中身がないので、オフトピ気味ですが・・・。
    中学校のプログラミングの授業で、みんなにプログラムをコピーされるのにぶち切れてプロテクトもどきを作ったことならあります。
    コピー方法が「F-BASIC386エディタで自分のソースを読み込んで別名保存する。OSを使ってのコピーはなぜかみんな出来ない」というものでした。
    なので、適当なテキストファイルを読みに行って、自分のFDにはそのテキストファイルを予め用意しておくようにする。それが存在しなければ警告を出すコードを仕込みました。
    数日後、学級会が開催されました(笑)
    ソースくらい読もうよ、と思ったものです。
    • by Anonymous Coward on 2005年03月21日 19時22分 (#711779)
      学級会が開かれた理由は?
      「wadatchさんがいじわるしてコピーさせてくれません.
      そういうのはいけないとおもいます.」
      とか?

      #オフトピ故にAC
      親コメント
      • Re:特になにも・・・ (スコア:5, おもしろおかしい)

        by Anonymous Coward on 2005年03月21日 19時34分 (#711783)
        良子「wadatch君は悪くないとおもいます。みんなが課題をちゃんとしないから・・・」
        悪男「良子、なんでwadatchをかばうんだよ~」
        良子「え?そんなんじゃ・・・」
        全員「あ~~」
        悪男「wadatchと良子はアッチッチ~」
        全員「アッチッチ~」

        泣きながら教室を出て行く良子。
        廊下に正座させられ給食抜きになる悪男。

        という一連の流れが頭に浮かびました。
        親コメント
      • by Ryo.F (3896) on 2005年03月21日 21時38分 (#711832) 日記
        そーでーす。RMSくんもLinusくんもコピーして良いって言ってましたぁ。

        #あえてID。
        親コメント
    • by Anonymous Coward on 2005年03月21日 20時47分 (#711805)
      ソース読まないどころか、実行さえしていないって事ですよね。

      さらにオフトピですが、TAとして大学生の物理のレポート採点していたとき、
      元レポートから手書きコピーしてゆく間に、数式の"・"(掛け算の意味)
      が"-"(マイナス)に段々劣化コピーされてゆく様がなかなか笑えました。
      曖昧に書いてた奴もすぱっと間違いにしてやりました。
      次元を考えれば一発でわかる間違いなのに、その努力すら惜しむなんて。
      親コメント
      • by Anonymous Coward on 2005年03月21日 23時32分 (#711876)
        自分はソースコード添削の手伝いをした事が。

        最初は盗用なんて見抜けないのですが、慣れるにつれて変数名や 改行位置を変えた程度の盗用であれば、簡単に見抜けるようになりました。
        もっとも、自分も盗用こそしなかったものの、「いざとなれば デキる奴のをコピーして、変数名や改行位置を変えれば問題ない」と 思ってたので、「考えが甘すぎだったなぁ」と添削しながら思いましたわ。

        親コメント
      • by Namany (19002) on 2005年03月21日 20時56分 (#711806) 日記
        元々の黒板の字が曖昧でノートに写し間違えたということもあるんだよなぁ。
        特に大学だと未知の記号が増えてくる上、担当講師ごとに表記が違ったりするから。

        #だから前の方の席で講義を受けることを心がけていたんだけど、それでもなぁ……
        親コメント
      • Motorola, Acer, AOpen, Buffalo も、たぶんコードすら読まずに
        パクっているわけで、悪い学生とまったく同じレベルですね。(^^;

        まあ GPL 違反の場合は「えっ、フリーじゃなかったの?」ということ
        なのでしょうから、最初から隠すつもりがないのでしょうが。
        親コメント
      • by kicchy (4711) on 2005年03月21日 21時32分 (#711829)
        物理でもひとつ間違いやすいこととしては・・・・

        やはり、手書きのプサイ(Ψ)とファイ(φ)。

        # レポートのお供にシュレディンガー音頭
        親コメント
  • あるけど教えない (スコア:3, すばらしい洞察)

    by Anonymous Coward on 2005年03月21日 20時12分 (#711794)
    水戸黄門は,越後のちりめん問屋のご隠居一行だと思っているからこそ油断して情報の隠蔽に緩みが出るわけでしょ.初めから印籠を出して水戸黄門であるぞ~とかいって歩いていたら,悪代官は絶対尻尾を出さないと思いますよ.印籠は最後の切り札.秘密のコードも同じようなものだと思いますが.
    • Re:あるけど教えない (スコア:2, すばらしい洞察)

      by Anonymous Coward on 2005年03月21日 20時32分 (#711801)
      いや、「ある、ある」と言っておけば、
      ホントはそんなもの無いとしても、悪さしようとする人
      への抑止効果になると思います。
      「監視カメラ作動中」とおなじかな。
      親コメント
      • by Sakura Avalon (12557) on 2005年03月21日 23時25分 (#711874)
        「監視カメラ作動中」とあって、いちばん目立っているカメラに注意を向けておいて実は隠しカメラで撮影しているのがかなり有効。最近、銀行やらコンビニやら街頭カメラやらで使われてますね。機種にもよりますがATMに内蔵されたカメラなんてこれでもかというほどクリアに写ってますし。それに比べるとATMコーナー天井付近にあるカメラ映像は見劣りします。服とか人の動きとかを見るのにはよいけど。
        という事で、ソースコードも目立つところにあからさまな印を付けておき、本当のサインは全体の中にこっそり混ぜておくのです。

        #私の場合コーディング規約が特に限定されてないときは、独自のスタイルで書くのでだいたい分かるんですけどね。並び方にしてもネーミングにしても。
        親コメント
    • by hix (3507) on 2005年03月22日 8時06分 (#711968) 日記
      水戸黄門の印籠のような、見たらひれ伏しちゃうコードかぁ…

      唐突に特権モードに移って「ええい!頭が高い!」とか言いながら他のプロセスを手当たり次第サスペンドしちゃうとか。
      いや殺しはしないですよ。峰打ちぐらいで止めといて、一通りサスペンドして満足したら、元に戻しますよ。

      # そんな手の込んだもん入れたら最初にバレてそこだけ削られるわな…
      親コメント
    • by flatline (5514) on 2005年03月21日 21時06分 (#711814)
      いわれてみれば,防犯思想がないですなぁ>水戸黄門
      一方通行の出口で逆走原付を待ち構えている警官みたいだ.
      親コメント
      • Re:あるけど教えない (スコア:2, すばらしい洞察)

        by TCHIGUILA (7899) on 2005年03月21日 22時28分 (#711848) ホームページ 日記
        オフトピで申し訳ないですが、最後の最後に印籠を見せるのですから、一方通行の[入口]で逆走を待ち構えるのではないかと…(^^;

        #出口で「これこれ君ここからは入れないよ」っていうのは道交法違反の予防にちゃんとなってますから…。
        --
        ちどりの「ち」きっての「き」…
        親コメント
  • by Anonymous Coward on 2005年03月21日 20時23分 (#711798)
    あとで見て恥ずかしくないものにしましょう。

    参考 [archive.org]
  • by whitt (21325) on 2005年03月21日 20時37分 (#711803)
    10年ぐらい前に読んだ本なのですが、
    "Pascal"という文字列が機械語では特定の演算に対応していて、文字列を実行し、レジスタの内容を確認すると、その文字列が書き換えられたかどうかが判定できる、というものがありました。
    x86のシェア(特に商用ソフト)を考えると、x86+特定のコンパイラで文字列にもなる機械語列を用意する、というのはアリかもしれません。
    • by oku (4610) on 2005年03月21日 21時25分 (#711825) 日記

      厳密には文字列と違いますが、IOCCC [ioccc.org] でソース中にマシン語を直接埋め込む コード [ioccc.org] が 受賞した [ioccc.org] ことがあります。

      それから、奈良女の新出先生の UNIX like tools の中にもそういうコードがあったような記憶があります (com2txt とか sos だったかも知れない)。 あれは確か static char [] な文字列だったと思います。 LSI C-86 限定でインラインアセンブラが必要なら、素直に asm を使えばいいのですが、DOS コンパイラ汎用で人間最適化するためのテクニックではなかったかと勝手に想像しています。

      で、何が言いたいかというと、上記の受賞作品の hint にある通り、

      NOTE: If your machine is not a Vax-11 or pdp-11, this program will
      not execute correctly. In later years, machine dependent
      code was discouraged.

      なのではないかと。 ソース配布の長所の一つに「アーキテクチャに依存しない (ようにすることもできる)」点もあるわけですから。

      タレコミのように GPL を前提にするのではなく、 商用ソフトのバイナリを売ることが目的なのであれば 「文字列として、かつマシン語としても有効」である必要はないはずです。 それこそ魔法のデータ列をバイナリ中に埋め込んで 「このソフトに同梱されている fuga.dll 中には、当社が仕込んでおいた hoge という文字列が散見される。 従って、このソフトは盗品である」と主張すればすむわけですから。

      親コメント
  • 俗人化 (スコア:2, 興味深い)

    by kicchy (4711) on 2005年03月21日 19時51分 (#711787)
    仕事でプログラムを書く場合は、
    俗人化しないよう心がけています。

    自分では自分が書いたという証を残さないようにしています。
    だけどきっとそれでもどこかに癖が残ってるはず。

    だから自分のコードの証は、私の書いたコードを見て
    困ってる人に聞いてください。(;´д`)ゞ
    • by naruaki (2658) on 2005年03月21日 20時12分 (#711793) 日記
      ですね。
      元(見本)のコーディング・ルールが、よほど胸糞悪くなる ようなモノでない限り、擬態化するようになりました。

      でも、コメント行の質で、ある程度のスキルと作成者が特定できたりするなぁ。

      親コメント
    • えっと (スコア:2, すばらしい洞察)

      by SteppingWind (2654) on 2005年03月21日 20時22分 (#711797)

      属人化でしょうか?

      # 民俗プログラミングなんてあるのかも

      親コメント
      • by kicchy (4711) on 2005年03月21日 20時44分 (#711804)
        >属人化でしょうか?
        ># 民俗プログラミングなんてあるのかも

        ・・・orz

        # コメントに「俗人化」と書かれているコードは私のものです・・・げふっ
        親コメント
  • 参照先URL [nekosuke.net]をコメントに貼り付けてます。
  • Readme.txtに「このコードには再利用されたことがバイナリからでも
    確実にわかるしかけが作り込まれております」とでも書いておけば、
    内容も理解せずに盗用しようという輩は減るのではないですかね?
    実際には何もしていなくても、です。

    それはそれとして、盗用されたことを知るための手段をちょっと
    検討してみましょうか。

    (a) ファイル名、関数名、外部変数名などの一致
    実世界で盗用が明るみに出るのはこのケースが多いようですね。
    ただ、統一的に変更されていたら証明はかなり手間がかかりそう。

    裁判の場など第三者に直接アピールするのはやはりメッセージだと
    思います。ではどうするか、ですが...。

    (b) 開発者名などのメッセージを入れておく
    特定位置の文字値をコード中でループ制御やらフラグ値などに使い、
    メッセージを変更したらちゃんと動かなくなるようにするわけです。
    C言語ならそうそう簡単にはそのメッセージを無効にできないように
    することも可能ですが、プログラムは汚くなりそう。

    (c) 実行時にメッセージを作る
    適当なテーブルに実行時にこっそりメッセージを組み立てておき、
    特定の場面でメモリのスナップショットをとれば開発者が誰だか
    わかるようにする。組み込み環境だと発見できないかな?
    • by __hage (7886) on 2005年03月22日 0時48分 (#711904)
      バグが決め手になったという例もあったかと思います。
      わざわざバグを入れるやつはまずいないんで、
      同じ状況で同じバグが発現すればデッドコピーだと判断できると。

      あと、非常に有名な例ではゼビウスのやつがあります。
      ゲーム開始時に一定の操作をするとメッセージがでてくるという。
      コピーして改変したやつだと「盗品だ」みたいなメッセージが出ました。

      地図なんかでは、わざとミスを仕込んでおくそうですね。

      話は変わりますが、昔、バイナリに仕掛けを入れたことがあります。
      別に自分が作ったことを主張したいとか、コピーの検出とか、
      わざとバグを仕込んだとかいうんじゃないんですが。

      点取り占いってありますよね。
      作った物自体は単純に起動したらメッセージを出して終わるだけの物です。
      メッセージはバイナリにxor程度の簡単な暗号化を施して入れてあります。
      んで、バイナリエディタなんかで覗いたときに、
      「おまえは出歯亀だ ●一点」
      というメッセージだけはそのまま見えるようにしておいたのでした。

      引掛った人からメイルが来たりして面白かったな。
      親コメント
    • >Readme.txtに「このコードには再利用されたことがバイナリからでも
      >確実にわかるしかけが作り込まれております」とでも書いておけば、
      >内容も理解せずに盗用しようという輩は減るのではないですかね?
      >実際には何もしていなくても、です。

      多分・・・・
      内容を理解せずに盗用する輩は、そんなに熱心にReadme.txtを
      読まないので気づかれないのではないかと・・・・
      親コメント
  • 実は (スコア:1, おもしろおかしい)

    by Anonymous Coward on 2005年03月21日 21時16分 (#711819)
    特殊なバグが仕込んであります。
    2035年にトラブルが発生するシステムは私のプログラムのコピーです。
typodupeerror

ソースを見ろ -- ある4桁UID

読み込み中...