AIはコンパイル済みバイナリからでも作者のGitHubアカウントを特定できる? 40
ストーリー by hylom
関数名の傾向とかはありそうだが 部門より
関数名の傾向とかはありそうだが 部門より
あるAnonymous Coward曰く、
ソースコードには作者ごとの特徴が現れることから、ソースコードから著者を特定できるというシステムが過去に話題になった。しかし、 米プリンストン大学などの研究によれば、GitHub上で公開されているソースコードを機械学習させることで、それをコンパイルしたバイナリからでも作者のGitHubアカウントを特定することができたという(The Register)。
ソースコードの特徴から作者を特定するというのは、古くから知られた技術であるが、コンパイルされたバイナリではそうした特徴の多くが失われるため、特定は不可能と考えられていた。しかし今回の研究では、機械学習を用いることで逆コンパイルされたソースコードからでも作者が特定できたとのこと。特にGitHubに多くのコードを挙げているプログラマーや、高いスキルを持つプログラマーほど正確に特定できたという。
この技術はマルウェアの作者特定に役立つとみられている。一方で、匿名でソフトウェアを公開したいプログラマーには難しい事態となるだろう。
AIを使って (スコア:2)
AIを使って、プログラマーの癖を隠したソースに変換すればいいんじゃないかな。
そしてAIを使って、隠した癖を暴くソフトを作って。。。略
Re:AIを使って (スコア:1)
そうなったら次は、実装じゃなくて仕様の癖を学習するようになりそう。
Re: (スコア:0)
コンパイラに作者特定難化オプションを設けてはどうでしょうか。
Re: (スコア:0)
GAN ですね。
Re: (スコア:0)
AIは自分の親を探す旅に出ました。
あいつが作ったソフト (スコア:2)
このソフトの作者は、過去にバグの多いソフトを作ったプログラマである。
みたいな事がわかるようになるんですかね。
Re: (スコア:0)
それ、AI不要。
Xcodeとかだとバイナリにコンパイル前のファイルのディレクトがユーザー名が残ってる (スコア:2, 興味深い)
そこからバレちゃう、iPhoneアプリはほとんどそう
Re: (スコア:0)
VSとかも割とコンパイル環境の情報ダダ漏れのバイナリ吐くよね。
それをソースコードレベルの開発者と同定できる情報と呼べるかっていうとあやしいけど。
Re: (スコア:0)
なんでVC++にしか/PDBALTPATH:無いんだろうな?
まただ (スコア:2)
まだAIが独り歩きしている。
なんかAIというコンピューターモジュールがあって誰でも使えるとでもいうのかね?
Re:まただ (スコア:1)
独り歩きするAIとかいよいよSFが実現してて怖すぎんだろ...。
Re:まただ (スコア:2)
独り歩きするAIとかいよいよSFが実現してて怖すぎんだろ...。
AIが独り歩きしていると思ってる人もいるかもしれません。
Re: (スコア:0)
独りよがりが止まらないAI、と書くとちょっと幸せな気分になれませんか
Re: (スコア:0)
ためらわないのがAIですからね
Re: (スコア:0)
何かしら機械学習を使ってるものの総称=AIでもういいんじゃないの?
# AIの意味を厳密化するために "intelligence" の要件を厳しくすると、世の中intelligentでない人間だらけに。
Re:まただ (スコア:2)
情報蓄積してそれを利用して判断していくならばいいんですが情報蓄積もしないでただただ判断するだけでしょう?
Re: (スコア:0)
最近は、AIとコンピュータがほぼ同義で使われてますからね。
おまえAIについて何もわかってないだろ、と突っ込みたくなったら、AIをコンピュータに置き換えればその衝動も抑えられますよ。
Re:まただ (スコア:2)
そうですね、いまのはコンピューターと置き換えられちゃいますね。
いまのAIが決められた判断を決められたようにやる程度から抜け出してないかなあと思うわけです。
もちろん機械学習をして判断に利用する本当のAIもありますけどね。
AI製品をみるとなにか機械学習してますか?というのとその学習によってなにか判断は変わりますか?と思ってしまう。そしてその判断は結局人間が作っているに過ぎない。
Re: (スコア:0)
これさ、逆コンパイルしたソースを、オリジナルを教師データにした学習結果に照らして作者を当てたってことだよね?
単に逆コンパイラが正確にオリジナルを再現した、と言ってるだけでは。
AIとあまり関係ないような。
Re: (スコア:0)
パターンマッチングの性能の問題で人工知能じゃないっですね。
Re: (スコア:0)
それ言ったら今のAIの大半が人工知能じゃなくなっちゃうけどね。
これは学習というフェーズがあるだけ巷に溢れてる似非AIよりマシだと思うよ。
そう簡単ではないだろ (スコア:0)
ゆうちゃんはネット上のサンプルを切り貼りして作ってたし
Re: (スコア:0)
どういう分野でコピペが多いかで、特徴が出るためバレるとみた。
すごいとは思う (スコア:0)
Java・.NET Frameworkとかの中間言語系の言語は変数名まで含まれているし、Delphi系とかもクラス名は見えるし、そうでなくても外部公開の関数名とかリソースの文字列もはよめる。
そこらへんからある程度の傾向はつかめるとは思う。
でもそうじゃなくて逆コンパイルした結果から特定ってのは凄いね。
CとかC++の逆コンパイルの結果なんて最適化のせいか逆コンパイルの性能不足かで何やってるかなんて検討もつかないのに。
Re: (スコア:0)
>Java・.NET Frameworkとかの中間言語系の言語は変数名まで含まれているし、Delphi系とかもクラス名は見えるし、そうでなくても外部公開の関数名とかリソースの文字列もはよめる。
>そこらへんからある程度の傾向はつかめるとは思う。
ゲームのバイナリから「○○ン〇なめたい(コーダの氏名付き)」ってコメントを見つけられたのは
言語は何だったのでしょうか
#あれ、これ、ちゆ12歳で知った知識だったような気がする
Re:すごいとは思う (スコア:1)
「元祖西遊記スーパーモンキー大冒険」でしょうか。
ファミコン時代のゲームなので言語としてはアセンブリですが、リソース・画像なのであんまり言語は関係ないです。
exeとかならバイナリエディタやリソースエディタで覗いて、apkとかjarとかならzipとして解凍したら画像が入ってたみたいな感じでしょうかね。
Re: (スコア:0)
あの頃は余った領域に変なデータ入ってるゲームよくありましたっけね(今もかな?)
Re: (スコア:0)
コメントアウトされた変なコード入ってるWebサイトはよくありますね。
Re: (スコア:0)
ネットアイドルちゆは、日本語に堪能なプログラマを応援しています。
Re: (スコア:0)
マルウェアの実行ファイルは難読化するだろうから、その辺は忘れていいよ
Re: (スコア:0)
GUIDから追跡はできないのかな。
Re: (スコア:0)
現状のGUID/UUID v4にはMACアドレスなどは含まれてないので、まぁ、よほど特徴のある乱数を個人で生成しているとかでない限り、難しいというか無理なのでは。
Re: (スコア:0)
UUIDv4はGUIDじゃないぞ。
組織的開発 (スコア:0)
一応他人のモジュールを含むバイナリも解析できた、と書いてあるが、最近話題になる国家犯罪みたいなレベルのマルウェアだと大量の開発者の手が絡むから、その中の1人1人を解析出来るんだろうか。
Re: (スコア:0)
一人ひとりは識別できないかもしれないけど、コーディングルール起因の規則性から組織は特定できるかも?
Re: (スコア:0)
http://blogs.wankuma.com/jeanne/archive/2006/05/30/29706.aspx [wankuma.com]
これこれwww
特定は不可能と考えられていた (スコア:0)
> 特定は不可能と考えられていた
ほんとかよ。この頃リバースエンジニアリングとかあまりやっていないから少し前の話になるが、GCC 4.8ぐらいのころだと-O2などでも関数の区切りが(インライン展開されないことも当然ままあるので)明瞭であることも多かったし、switch文を使っているか関数ポインタを使っているか、エラー処理にgotoを使っているかどうかなど分かることはたくさんあった。
マルウェア対策にあたっているような研究機関ならある程度作者を特定するような技術を持っていても不思議じゃないと思う。
Re: (スコア:0)
GitHubの様に定量的に観測できる環境が必要だったんだよ
Re: (スコア:0)
定量的に観測できることで逆に過学習のリスクが高まった気がします。
GitHub一強になってしまったので過学習でも実用上問題ないのかもしれません。
そもそも他のデータソースが少なすぎて過学習かどうかすら評価できないかもしれません。