かずきち。の日記

サーバサイドエンジニアのつぶやき

コンパイルって何?Chrome拡張を逆コンパイルしてソースコードを入手する方法

「逆」コンパイルとは一体何でしょうか?

まずは逆コンパイルの前にコンパイルからお話をしましょう。
コンパイルがわからないと話ができませんから…

料理に置き換えれば、レシピ本を見て料理を作ることがコンパイルです。

e-words.jp
引用:
https://e-words.jp/w/%E9%80%86%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%AB.html

コンパイルとは、プログラミング言語で書かれたコンピュータプログラム(ソースコード)を解析し、コンピュータが直接実行可能な形式のプログラム(オブジェクトコード)に変換すること。そのためのソフトウェアをコンパイラ(compiler)という。

なので、クックパッドを見ながら料理を進めていくことは「コンパイル」=「レシピ通り料理」をしているんです。
でも今回説明したいのは「逆」コンパイルです。

逆とついているので完成しているソフトウェアからどんな構成でプログラミングコードを書いていたか逆算することです。
もっと身近な例でいうと

レストランで美味しい料理を食べて、「隠し味にコーヒーを使っているね」みたいに当てる行為です。

隠し味にコーヒーを使っていることがわかれば、自分で美味しい料理が作れますからね。
似たようなことで科学技術もどうやってこの機能を実装しているんだろうと解析をすることがあります。

https://jp..com/Guide/iPhone+12+-12+Pro%E3%81%AE%E5%88%86%E8%A7%A3/137669jp..com

よく家電などでは新商品が出ると分解レポートというものがあがります。
これは新商品がどのような技術を用いて作られているか競合他社が分析するためでもあります。
よく日本の技術が海外に流出するみたいな

www.nikkei.com
引用:
https://www.nikkei.com/article/DGXZQOUC305B10Q2A830C2000000/

我が国の技術流出が問題だみたいな記事はよく見ます。
これを「リバースエンジニアリング」といいます。

ja.wikipedia.org
引用:
https://ja.wikipedia.org/wiki/%E3%83%AA%E3%83%90%E3%83%BC%E3%82%B9%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%83%AA%E3%83%B3%E3%82%B0

あなたが使っているパソコンにもどのように動作しているかわからないソフトが沢山あるはず

Chrome拡張がどのように動いているかわからないです。
私は最近Chrome拡張をよく作っているので、優秀なアプリを解析してどのような内部構造になっているのか見ます。
自分で頭使って、良いプログラムを書くより他人が書いた優秀なプログラムを読んだほうがいいから。

ja.wikipedia.org
引用:
https://ja.wikipedia.org/wiki/%E3%83%9A%E3%82%A2%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0

ペアプログラミングのように複数人でものを作ったほうがいいよということです。

今回はすでに市場に出回っている優秀な製品(プログラム)を分解して、どうやって作られているか解析することを目的とします

自分でプログラミングコード書いてて、もっと優秀な書き方あるよなーと思ったときに
すでに市場に流通しているものからパクったほうが早いわけです。
それを実現してくれるアプリがありまして...

chrome.google.com

このアプリがすごいです。

ネット上で公開されているプログラムソースをぶっこ抜いて保存してくれます。
これで他人が作ったコードを解析して、少し手直しすればいいわけです。
世界で50,000人超が使っているアプリでもっと有名になってもいいはずくらい素晴らしいアプリですが、これを使うと元ソースが見えてしまいますという代物です。
この拡張機能とっても優秀で、会社でこれ作ってみたいなこと言われても
近い機能を持ったプログラムを解析して自分なりにアレンジすれば完成なので、かなり便利で愛用しています。
大学入試の問題も答えから逆算して回答を作っていくみたいな傾向があるので、ただの暗記分野では使えません。