【朗報】 ソースコードの書き方の癖を分析すれば誰が書いたのかほぼ特定できることが判明 [転載禁止]©2ch.net
1 :
イス攻撃(栃木県)@転載は禁止:
精度95%以上! ソースコードは指紋、作者はほぼ特定できる
ほぼドンピシャでバレバレです。
スペースやタブ、大文字やアンダーバーを組み合わせた命名規則、コメント…コードの書き方には、
人によってスタイルがありますよね。それはもう指紋のようなもので、それさえ見えれば、誰がコードを
書いたかほとんどわかってしまう…そんな驚きの研究結果が発表されました。
米ドレクセル大学、メリーランド大学、プリンストン大学、独ゲッティンゲン大学の共同チームの研究によると、
自然言語処理と機械学習によるコード分析により、95%の精度で作者は特定できるそうです。
解析されるのは、レイアウトや語彙の特性と、「抽象構文木(AST)」です。ASTとは、「コードの書き方からまったく
影響を受けずに、コードの型の特性をとらえる」もので、つまり、関数の名前、コメント、スペース入れ方などの
クセ以上のものを探し出し、作者を特定するカギにする、というわけです。
研究チームが開発した機械学習ソフトウェアで、Google Code Jamに公開されているコードの分析を試しに
行ってみたところ、あるひとりの人が書いた630行のコードを分析すれば、95%の精度でその作者が特定できたそうです。
コードの行数を増やして1,900行にすると、特定の精度は97%になるとか!
このコード解析、すぐに使えそうな分野が思い浮かびますよね。そう、当局がハッカーを見つけたり、
オンライン詐欺の犯人を特定したり、という使い方です。あと、他人のコードをちょっと拝借、なんていうケースも
バレちゃったりするんでしょうか。「特定されたら困る!」という人は、今から誰かのコードの書き方をそっくり
マネする練習を始めた方がいいかもしれない…ですかね?
http://www.gizmodo.jp/2015/02/your-coding-style-is-like-a-digital-fingerprint.html
2 :
膝十字固め(dion軍)@転載は禁止:2015/02/12(木) 08:42:40.19 ID:ct0Ou2BZ0
そんな驚かない
そうすか
4 :
ラダームーンサルト(神奈川県)@転載は禁止:2015/02/12(木) 08:44:09.38 ID:1JJCOOyg0
へー
ソースはブルドックがいいよ
昔からよくわかっているよ
7 :
キングコングニードロップ(関東・甲信越)@転載は禁止:2015/02/12(木) 08:44:47.30 ID:xn5aB6M9O
ゆうすけ
8 :
イス攻撃(東京都)@転載は禁止:2015/02/12(木) 08:45:39.25 ID:jihSHDI10
インデント論争
プロジェクト毎に異なるコーティング規準に沿って書いた各コードを
全て俺の書いたものと判断できるのかな?
改変時は元のソースの癖や規約を完全にコピーするから
俺の改変箇所に関しては不可能だ
わざと色んな書き方混ぜてクセでばれないようにしてる
12 :
クロイツラス(チベット自治区)@転載は禁止:2015/02/12(木) 08:47:54.10 ID:95S2KjJ20
>今から誰かのコードの書き方をそっくりマネする練習を始めた方がいいかもしれない…ですかね?
わかってないじゃんおまえw
つかおまえ文筆業で餌食ってるくせに、文体で作者特定できるくらいでいちいち驚くのかよ
>>9 ロジックの組み立て方でバレることもあるんだよなぁ
コードなんて大体その日の気分で変わる
>当局がハッカーを見つけたり、
オンライン詐欺の犯人を特定したり、という使い方です。
コンパイルか難読化してたら意味ないだろこれ…だれがわざわざ素のソースコード晒すんだ
16 :
メンマ(茸)@転載は禁止:2015/02/12(木) 08:52:26.12 ID:AVx9aAIr0
俺が書くとベーシックみたいだとよく言われる
>>15 これ
プログラミングど素人が書いた記事だわ
18 :
タイガースープレックス(家)@転載は禁止:2015/02/12(木) 08:54:58.82 ID:BW9Bgm8s0
いまだに軍事や情報の世界だと、政府が野良プログラマーや自由主義研究者を
恐れているというけど、これもその方面のパフォーマンスなのかねぇ。
#include <con> /* /dev/ttys */
>>15 古いハナシだけど、RSAやPGPの公開時にはひと悶着あった。
RSAやDESの時代には、政府や有料顧客には優先して鍵長の長さが大きいものを
提供していたけど、いまの時代、パソコンもネット環境も安い、無料でコンパイラ等
のツールやドキュメントが手に入る状況だと、ちょっと入門書読めば素人でも、暗号
復号プログラムや、ハッキングツールを作成できるからもはや優先顧客だけに暗号
のシステムや解析・侵入プログラムを配布するのは不可能。
FBIやNSAなんかは早くから盗聴可能な状況を維持すべきと主張してたりしてる。
いまは結局、ユーザーに全てのプログラムのテクノロジーを委ねることができる世界
になっちゃったけど、それでも、プログラムを公開配布すればその作者の特徴は簡単
に追えるよっていうプロモーションなんじゃないのかと。
ほぼ毎行コメント書いてあるのは俺のだ
22 :
タイガードライバー(SB-iPhone)@転載は禁止:2015/02/12(木) 09:09:12.27 ID:ZY/gYSjH0
俺のは100%特定される自信あるわ
ソースコードに名前書いてるし
23 :
メンマ(茸)@転載は禁止:2015/02/12(木) 09:10:05.00 ID:HMR+WIU+0
名前書いとけよ
lintで整形しとくのは鉄則ってことか
意味が全くわからん俺にとって、お前ら全員かっこいいわ
27 :
リキラリアット(WiMAX)@転載は禁止:2015/02/12(木) 09:17:16.72 ID:rU82gMSz0
圧縮して難読化してもばれるものなのかな
自分のソース以外読みにくくて仕方がないってことはそういうことだろうな
30 :
タイガードライバー(SB-iPhone)@転載は禁止:2015/02/12(木) 09:38:42.66 ID:ZY/gYSjH0
複数のコーディングスタイル混ぜたりされなきゃ、なんとかなれられる
メーカーやプライベートビルダーで違いが出るのはここだな
32 :
フライングニールキック(茸)@転載は禁止:2015/02/12(木) 09:49:24.36 ID:BAUkP5cD0
標準化ってなんだったんだろ
33 :
ショルダーアームブリーカー(愛知県)@転載は禁止:2015/02/12(木) 09:51:10.67 ID:pQBq8wDh0
これはコンパイル済みのプログラムをリバースエンジニアリングしても分かるってこと?そんな馬鹿なw
作者の名前がコメントに書いてあるし
>>33 >>解析されるのは、レイアウトや語彙の特性と、「抽象構文木(AST)」です。ASTとは、「コードの書き方からまったく
>>影響を受けずに、コードの型の特性をとらえる」もので、つまり、関数の名前、コメント、スペース入れ方などの
>>クセ以上のものを探し出し、作者を特定するカギにする、というわけです。
という話だから、逆コンパイルものはダメじゃないのかな
36 :
フォーク攻撃(関東・甲信越)@転載は禁止:2015/02/12(木) 09:59:36.43 ID:ydSa4TcvO
>>16 大きくはmain以下にズラッと
ひたすら命令が続く書き方を好む人間と
object単位で処理を分割する書き方を好む人間に分かれるな
前者は初心者、スクリブト書き、組み込みコード書きなどの
短い書き捨てプログラムを書く人間
後者はシステムエンジニア大規模アプリケーション
サーバー開発者
ミドルウェア開発者などの長いメンテナンスが必要なプログラムを書く人間
これは適性があるから
書くプログラムにも反映されるな
俺はパッチだらけの汚いプログラムを見るとゴミだと思うが
その方が心からうれしい人間もいるみたいだから
癖はあるんだと思うわw
37 :
サッカーボールキック(dion軍)@転載は禁止:2015/02/12(木) 10:08:26.14 ID:hvLWYA980
学生数が分かってる上に、他のコードと比較も出来る。
社会経験を経てコピペしたり、犯罪用にクセを隠したりされたら
何十万人から一人を特定するとか無理でしょ
38 :
張り手(関西・北陸)@転載は禁止:2015/02/12(木) 10:09:42.75 ID:9UrBs321O
しかしイスラム国は特定できないという不思議
39 :
ファルコンアロー(catv?)@転載は禁止:2015/02/12(木) 10:11:59.28 ID:T4zh+jBw0
ゆうちゃん、バレバレですやん
実行コードから割り出してウィルス作ってる奴特定しろよ
41 :
カーフブランディング(庭)@転載は禁止:2015/02/12(木) 10:23:19.46 ID:pcqkpjG/0
K&Rとか山ほどいるし自動整形もあるから無理じゃね
42 :
ハーフネルソンスープレックス(家)@転載は禁止:2015/02/12(木) 10:38:05.37 ID:6SlMyCF30
一文字グローバル変数の時代が来たか
43 :
ハーフネルソンスープレックス(家)@転載は禁止:2015/02/12(木) 10:38:59.25 ID:6SlMyCF30
オープンソースが前提のコード解析しただけだろ
44 :
ハーフネルソンスープレックス(家)@転載は禁止:2015/02/12(木) 10:41:54.94 ID:6SlMyCF30
統計的な有意さは、個人を特定するためにあるわけじゃない
45 :
垂直落下式DDT(九州地方)@転載は禁止:2015/02/12(木) 10:55:39.92 ID:EVduyLwoO
これ心理学だと分かって当たり前の話なんだよね
みんな文章・文体・書き方を癖だと思っているだろうけど、
実際は心の動き・動機付け・IQレベルを「癖」と言っているんだよ
例えば
>>9 >プロジェクト毎に異なるコーティング規準に沿って書いた各コードを
>全て俺の書いたものと判断できるのかな?
真面目な性格で懐疑的だけど信じないとは言っていない。という「癖」
>>10 >改変時は元のソースの癖や規約を完全にコピーするから
>俺の改変箇所に関しては不可能だ
完璧だと思い込み話を聞こうとしない、一方的に言う。という「癖」
>>11 >わざと色んな書き方混ぜてクセが分からなく
これが一番特定しやすい。どの「癖」をチョイスするかに最も特徴が出るので
アルファベットの羅列である英文は特定が難しそう
3種の言語(かな・カナ・仮名)を使う日本語は簡単そう
↑関係ない。見るのは文章ではなく心の動きだから
では、アルファベットの羅列で何種類もの言語のあるソースコードは?
>>8-11も自分が書いたコードと他人が書いたコードが違う事は理解してる
つまりコードにも「癖」は存在する
あとは「癖」を見つけて、分類して、特定する。それだけ
自分のスタイルでコードを書き上げた後に、
ある程度コールグラフを展開するだけで認識できなくなると思うわ
完全ベタに変換してもいいけど。
47 :
ときめきメモリアル(芋)@転載は禁止:2015/02/12(木) 11:13:16.76 ID:E3fah8KS0
データに無い新しい人のソースは分から無いだろ
>>1 これ、当たり前。
論理設計段階のフローチャートですら癖でるからな。
俺、大学の卒論の一部でシステム作ったけど、その後後輩が別論文で丸コピしたの使ったらしく、教授に怒られてた。
ボイドメインボイドwwwww
50 :
サソリ固め(庭)@転載は禁止:2015/02/12(木) 12:33:55.87 ID:udolfTtu0
ソース見られるとか
スクリプトレベルの話か?
51 :
サソリ固め(庭)@転載は禁止:2015/02/12(木) 12:35:09.30 ID:udolfTtu0
>>47 いずれ開発ツールはオンライン専用になるし
大学や企業にはソース提供させるんじゃね?
エリートN速民ならレスのクセで相手がわかり、
更に禿か、童貞か、無職かまで判別可能
俺も変数名にAKBメンバの名前付けちゃうしな〜
>>55 俺の先輩のモーヲタみたいな事やめれ(´・ω・`)
後から見た人、ドン引くから。
古いコードのメンテでおにゃんこクラブの名前とかあったらどうしよう…
要するに、匿名掲示板に匿名で書いてても「誰が書いたか?」は、意外とバレバレだって事だ。
10 goto 10
60 :
グロリア(やわらか銀行)@転載は禁止:2015/02/12(木) 16:58:54.24 ID:A2lpD7UK0
ほぼコピペで作ってるからばれない
ネット上のサンプルの集合体でもバレるもんなのか
62 :
ジャンピングDDT(中国地方)@転載は禁止:2015/02/12(木) 17:19:07.81 ID:pac5GcBa0
いまさら記事にするようなことかな
穴埋めの書き殴りか?
63 :
ツームストンパイルドライバー(東京都)@転載は禁止:2015/02/12(木) 17:23:31.53 ID:YjUdIeZD0
日本の奴隷はコーディング規約を守っているのでバレません
64 :
リバースネックブリーカー(東京都)@転載は禁止:2015/02/12(木) 17:25:29.51 ID:nC+KbA3U0
ちょっと前の自分のコードは読み解かないと何をやってるのかよくわからない
おたふくソースには、なつめ椰子の実が入ってるんだろ。
66 :
チェーン攻撃(WiMAX)@転載は禁止:2015/02/12(木) 17:41:53.60 ID:dpT7fTdq0
だからこのツールを逆の発想で使えば、コーディング規約守ってるかどうかのチェックに使えるんじゃないの
67 :
リバースネックブリーカー(公衆電話)@転載は禁止:2015/02/12(木) 17:45:16.59 ID:NcJD2YiA0
PRINT "HELLO WORLD"
100人ぐらい居てれば、できる奴が書いたコードは、誰が書いたのかは見ただけで分かる。
平凡プログラマーとして優秀な奴が書いたコードは、誰が書いたのかはわからないが、
そんな奴の方が珍しいので、消去法で特定できる。
if(null != var)
と
if(var != nll)
どっちが好き?
ret = nll
if(bool){ ret=var }
と
if(bool){ ret=var }
else{ret = nll}
どっちが好き?
70 :
ショルダーアームブリーカー(東京都)@転載は禁止:2015/02/12(木) 17:56:40.61 ID:7sCIGv2n0
ret = (bool)?var:nul;
お前らの環境でコンパイルした跡、バイナリエディタで開いてみ
72 :
アルゼンチンバックブリーカー(茸)@転載は禁止:2015/02/12(木) 18:36:02.74 ID:+/FmWlmP0
それより聞いてくれ
C言語の本読みながら、書いてあるのと
同じプログラムを書いたのに、eclipseで実行すると必ずエラーが出る
どうすりゃいいんだ?
大企業のシステムに関わる事が多いから標準化がガッチガチで
個人の癖を出す隙すら無いです
74 :
ファイナルカット(禿)@転載は禁止:2015/02/12(木) 18:48:15.74 ID:RDhUQw860
75 :
ローリングソバット(茸)@転載は禁止:2015/02/12(木) 18:49:05.13 ID:CNcv+6kz0
そりゃそうさな。自分でも癖があるコードだな〜って思うようなコードを書いてるw。
1+2+3+・・・+n 指定されたnまで加算する
これをループで作るやつはバカってのは分かる
77 :
ドラゴンスクリュー(SB-iPhone)@転載は禁止:2015/02/12(木) 19:01:07.58 ID:5mw7LC5I0
コピペの組合せでもコピペした人がわかる?
78 :
リバースネックブリーカー(公衆電話)@転載は禁止:2015/02/12(木) 19:03:02.31 ID:NcJD2YiA0
>>76 同意。このほうが読みやすいよね:
n0 + 1 = n1
n1 + 1 = n2
n2 + 1 = n3
n3 + 1 = n4
n4 + 1 = n5
79 :
トペ スイシーダ(芋)@転載は禁止:2015/02/12(木) 19:05:20.47 ID:8ah8fzm70
マジで!?
ごめんなさい
謝ります
81 :
ダブルニードロップ(SB-iPhone)@転載は禁止:2015/02/12(木) 19:33:54.77 ID:kkEeoOQv0
>>79 n 次第でスタックオーバーフローするじゃね
コピーペーストするだけの奴のはわからん
83 :
ダブルニードロップ(SB-iPhone)@転載は禁止:2015/02/12(木) 19:38:12.38 ID:kkEeoOQv0
>>83 環境に依るのは当然として、実際には可読できるところが結構あったりする。
自分の作ったパッケージ名、その階層、ライブラリのバージョンとか。
可読できない部分にもあれこれ指紋を残してる。
悪いことする奴は当然その辺まで神経使わんといかんから大変だなと
86 :
タイガードライバー(SB-iPhone)@転載は禁止:2015/02/12(木) 21:15:17.49 ID:ZY/gYSjH0
みんなギャグでいってるんだよな?
等差数列とか言ったら安価ついてつまんねとか言うんだよな??
87 :
キン肉バスター(新疆ウイグル自治区)@転載は禁止:2015/02/12(木) 21:21:38.03 ID:h5I5eu8i0
難読化ツールで変数名とか変換してやればいいじゃないw
88 :
フルネルソンスープレックス(dion軍)@転載は禁止:2015/02/12(木) 21:29:46.80 ID:Q6bN43IB0
違う名前をコメントに入れてもダメなのかな
こだわりはあるよ
if()なら命令文;でもいいけど
絶対{}で括る
こうした方が見やすいから
whileは極力使わない
無限ループが怖いから
foreachよりはfor()の方を
選ぶ
中の変数をループ内で再利用する時があるから
など
90 :
キン肉バスター(新疆ウイグル自治区)@転載は禁止:2015/02/12(木) 21:49:46.79 ID:h5I5eu8i0
>>45 対して知りもしないのに、上から目線でつい語ってしまう「癖」
最近流行りだかなんだか知らんが
honya(hanya)をhonya (hanya)
って ( の前にスペース空けるの何なの?イラッとする
普通はコーディング規約に沿って書くから分からんだろ
93 :
魔神風車固め(庭)@転載は禁止:2015/02/12(木) 22:30:15.55 ID:gMFCj92a0
94 :
垂直落下式DDT(九州地方)@転載は禁止:2015/02/12(木) 23:59:57.60 ID:EVduyLwoO
>>77 1つだけでは分からないけど、見比べるべき対象が増えればいずれ特定できる
大きなものを2つ組み合わせたり、小さなものを細かく組み合わせたり
コピペは思っている以上に性格が出やすい
95 :
スパイダージャーマン(兵庫県)@転載は禁止:2015/02/13(金) 00:04:09.35 ID:61+SPiyv0
俺をクビにしたら困るように、わざと難解な関数型言語を口八丁で提案してオレにしか分からないように
グチャグチャに書いてる。
96 :
アンクルホールド(catv?)@転載は禁止:2015/02/13(金) 00:07:36.17 ID:LCWjjuK80
{は行末に置かずに、改行する派だ
98 :
ランサルセ(catv?)@転載は禁止:2015/02/13(金) 00:19:13.84 ID:OhY3D/mk0
>>97 後からネストふえる場合を考えると
中身1行でも開きと閉じの桁を揃えた方が得策だな
>>97 if (hoge == hage) {
printf("aho¥n);
}
だな
100 :
ウエスタンラリアット(千葉県)@転載は禁止:2015/02/13(金) 00:52:03.62 ID:InRWNDuq0
そーすか(o^w^o)
>>69 var!=nullの方が好きだけど、実用性ではnull!=varを選んでしまう。
あと、ret=bool?var:nullの方が好き。
102 :
アンクルホールド(catv?)@転載は禁止:2015/02/13(金) 01:18:24.16 ID:LCWjjuK80
>>69 (setq ret (and bool var))
103 :
キドクラッチ(関東・甲信越)@転載は禁止:2015/02/13(金) 01:22:19.38 ID:gG1j4AHJO
>>68 ゴイスーなプログラムは大抵は外人が書いてるな
しかし、外人と言えどもピンキリなのも事実w
日本人のプログラムは標準の技術を使わないで
単純にゴリゴリ書かれてる事が多いから
そっ閉じしたくなる事が多いw
104 :
キドクラッチ(関東・甲信越)@転載は禁止:2015/02/13(金) 01:24:22.31 ID:gG1j4AHJO
>>73 それは標準化じゃなくてローテクで
ゴリゴリ書いてあるだけだろw
105 :
キドクラッチ(関東・甲信越)@転載は禁止:2015/02/13(金) 01:25:59.45 ID:gG1j4AHJO
106 :
フライングニールキック(神奈川県)@転載は禁止:2015/02/13(金) 01:28:26.59 ID:A+F5vL250
>>45 大したことも言っていないのに知ったかして心理学の講釈を垂れる癖
当たり前ならお前が解析するアルゴリズムを作ってみろってんだスットコどっこい
107 :
アイアンクロー(チベット自治区)@転載は禁止:2015/02/13(金) 01:31:08.36 ID:0gouUnZY0
変数名以外なら誰が書いてもIDEの整形機能で同じになる
108 :
セントーン(catv?)@転載は禁止:2015/02/13(金) 01:32:05.48 ID:kufkxGQW0
>コメント…コードの書き方には、
三点リーダー 基本的には「…」×2、つまり「……」の形で使用します。
コメント……コードの書き方には、↑
109 :
断崖式ニードロップ(東京都)@転載は禁止:2015/02/13(金) 01:35:50.41 ID:hyr3Jvw50
つ python
110 :
レッドインク(埼玉県)@転載は禁止:2015/02/13(金) 01:37:00.68 ID:Qp9eWRk90
Pythonなら誰が書いても一緒だよ。
コメント欄に自分の名前かハンネ入れるからあんまり関係ないw
112 :
タイガースープレックス(SB-iPhone)@転載は禁止:2015/02/13(金) 01:51:48.32 ID:Q5nSGRoz0
名前にいつも悩む
113 :
タイガースープレックス(SB-iPhone)@転載は禁止:2015/02/13(金) 01:55:07.33 ID:Q5nSGRoz0
>>76 なんかの雑誌にドヤ解説あったな
為になった
114 :
雪崩式ブレーンバスター(九州地方)@転載は禁止:2015/02/13(金) 02:23:56.09 ID:NnYhDtgzO
>>106 心理学では既に論理化されてるテーマだと言ってるだけ
アルゴリズムが作られたことは素晴らしいけど、
真新しい論理ではなく既存の論理の範疇なんだわ
あなたが
>>9-11なら、勝手に引用して悪かった。すまん
んなの当たり前じゃんw
116 :
グロリア(四国地方)@転載は禁止:2015/02/13(金) 02:47:59.65 ID:pmA7IOo00
文章の癖でもほぼ特定できるがな…
117 :
スリーパーホールド(神奈川県)@転載は禁止: