「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典イメージぴよ画像「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

難読化

pointこの用語のポイント

point読みにくくするよ

point内容自体は変えないよ

point解読や解析をやりにくくする目的でやるよ

スポンサーリンク

簡単に書くよ

難読化(読:ナンドクカ 英:obfuscation)とは

読みにくくすること。
もう少し具体的に書くと

人間語で書いたプログラムの元ネタを「ソースコード」と言うのですけどね。ソースコードとかを(処理の内容自体は同じだけど)ぐちゃぐちゃで読みにくい書き方にすることで、解読や解析を やりにくくすること
です。


image piyo

詳しく書くよ

順番に見ていきましょう。
まずは予備知識として「ソースコード」について説明します。
「そんなの説明されなくても知ってるよ!」な人は適当に読み飛ばしてください。

ソースコードは「人間語で書いたプログラムの元ネタ」です。

難読化

プログラムを作って動かすまでの一般的な流れは

1.人間語でプログラムの元ネタを書く
2.元ネタを人間語から機械語に翻訳する
3.翻訳された指示に従って、コンピュータさんが お仕事する


です。

難読化2

コンピュータさんは人間語が分かりません。

難読化3

人間様はコンピュータさんの言葉が分かりません。

難読化4

プログラムは人間様が作るものです。
そこで最初は人間様が分かる言葉でプログラムを作ります。
コンピュータさんに対する「あれをやれ」「これをやれ」な命令を人間語で書くのです。

難読化5

次に人間語で書いたプログラムの元ネタをコンピュータさんが分かる言葉に翻訳します。
実際に お仕事をするのは、コンピュータさんですからね。
コンピュータさんが分かる言葉に変換する必要があるのです。

難読化6

コンピュータさんが分かる言葉に翻訳したので、コンピュータさんは命令の内容を理解できます。
指示に従って、お仕事をしてくれるでしょう。

難読化7

かなり簡略化した説明ですけどね。
これがプログラムを作るときの流れです。

この話で登場した

人間語で書いたプログラムの元ネタ

を「ソースコード」と言います。

難読化8

以上を踏まえて

ソースコードとかを、パッと見で処理の内容が分からないように、ぐちゃぐちゃで読みにくい書き方にする

のが「難読化」です。

難読化9

なんで わざわざ そんなことをするかというと、中身を見て勝手にパクったり、あるいは好き勝手に改造したりされるのを防ぐためです。
身も蓋もない言い方をすれば「悪い人に対する嫌がらせ」ですね。

難読化10

もちろん、難読化したからといって解読されるのを完全には防げません。
ぐちゃぐちゃ状態のものを見ることは、できます。
気合の入った人であれば、ぐちゃぐちゃ状態のものを解析して悪いことをするでしょう。

そのため過信は禁物ですが、難読化することにより相手の「よっしゃ!中身を見て悪いことをしてやるぜ!」な心をへし折る効果が期待できるのです。
ぐちゃぐちゃ状態を解析するのは大変ですからね。

それでは実際に難読化の例を見てみましょう。

例えば、そうですね。
以下のようなJavaScriptで書いたソースコードがあったとします。

var num = 0; //1から10まで加算する数字の元

//1から10まで加算する
for(i = 1; i <= 10; i++){
    num = num + i;
}
//1から10まで加算された数字を表示
alert(num);


これは数字を1から10まで足して、その結果を表示してくれるプログラムです。
動かすと画面に「55」と表示されます。
パッと見で何となく やっていることが分かりますよね。

これを難読化すると、例えば以下のようなソースコードになります。

function a(b,c){var g,h;g=d(b,c);h=0;h=g+h;return h;}function d(e,f){return e+f;}var k=0,l=0;for(o=1;o<=10;o++){l=a(k,o);k=l;}alert(l);

実は、これも、やっていることは さっきのコードと一緒です。
数字を1から10まで足して、その結果を表示してくれるプログラムです。
動かすと画面に「55」と表示されます。

いかがでしょう?
パッと見で、やっていることが分かりますか?

中身を理解するには「えっとー、ここで ここに値を入れてて~、あれ?こっちは何で これをやっているの?」と時間がかかるはずです。

今回は簡単な例だったので、ちょっと気合を入れれば解析できるでしょうけどね。
これが1,000行、10,000行のプログラムだったらゲンナリしますよね。

このような

中身を読みにくくすることによって悪い人をゲンナリさせる防御策

が難読化です。

あっ、そうそう。

難読化するときは読みにくくする前の元ネタを残しておいてくださいね。
残しておかないと、何か変更を加えたいときに涙目になれます。
ご注意ください。


image piyo2

一言でまとめるよ

まぁ「難読化」って単語が出てきたら「読みにくくして、解読しにくくするんだな~」と お考えください。

一番上に戻るよ
スポンサーリンク
書籍画像061
書籍画像049


書籍画像
わわわ説明術コラム
宣伝だよ
エンジニア育成現場の「失敗」集めてみた。 42の失敗事例で学ぶマネジメントのうまい進めかた
「分かった!」と思わせる説明の技術 知識ゼロの相手にも伝わるようになる本【Audible】
タヌキとキツネ