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

難読化コード

pointこの用語のポイント

pointソースコードだよ

pointぐちゃぐちゃして読みにくくなっているよ

point解読や解析をやりにくくするのが目的だよ

スポンサーリンク

簡単に書くよ

難読化コード(読:ナンドクカコード 英:obfuscated code)とは

人間語で書いたプログラムの元ネタを「ソースコード」と言うのですけどね。ぐちゃぐちゃで読みにくい書き方にすることで、パッと見で処理の内容が分からないようにしたソースコードのこと
です。


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」と表示されます。

もう一度、2つのソースコードを並べて書いてみますね。

■ソースコード1
var num = 0; //1から10まで加算する数字の元

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


■ソースコード2
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の方がパッと見で分かりやすいですよね。
ソースコード2の方は、改行もしていないし、補足説明も書いていないし、ごちゃごちゃしていて読み解くのが大変です。

この話で登場したソースコード2のような

パッと見で分かりにくい書き方になっているソースコード

が難読化コードです。

なお、難読化コードを作るときはコンピュータさんの力を借りるのが一般的です。

難読化コード11

実際の処理を作りこむときに分かりにくい書き方をしていたら、自分でも間違えちゃいそうですからね。
まずは普通に読みやすい形で書いたソースコードを用意して、それをプログラムとかで変換して難読化コードにするのが一般的です。


image piyo2

一言でまとめるよ

まぁ「難読化コード」って単語が出てきたら「読みにくくしたソースコード(人間語で書いたプログラムの元ネタ)なんだな~」と お考えください。

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

おまけ

■訳してみるよ

「難読化」は日本語ですね。
「code(コード)」は今回は「source code(ソースコード)」の略です。
「source code(ソースコード)」はIT用語の「ソースコード」です。
「source(ソース)」の意味は「源」とか「起源」とか「根源」とかです。
「code(コード)」の意味は「記号」とか「暗号」とか「符号」とか「コード」とかです。
何となく くっつけると

難読化した源の記号

となります。




書籍画像
わわわ説明術コラム
宣伝だよ
「分かった!」と思わせる説明の技術 知識ゼロの相手にも伝わるようになる本
エンジニア育成現場の「失敗」集めてみた。 42の失敗事例で学ぶマネジメントのうまい進めかた
つくって、壊して、直して学ぶ Git&GitHub 入門