難読化コード
ソースコードだよ
ぐちゃぐちゃして読みにくくなっているよ
解読や解析をやりにくくするのが目的だよ
簡単に書くよ
難読化コード(読:ナンドクカコード 英:obfuscated code)とは
人間語で書いたプログラムの元ネタを「ソースコード」と言うのですけどね。ぐちゃぐちゃで読みにくい書き方にすることで、パッと見で処理の内容が分からないようにしたソースコードのこと
です。
詳しく書くよ
順番に見ていきましょう。
まずは予備知識として「ソースコード」と「難読化」について説明します。
「そんなの説明されなくても知ってるよ!」な人は適当に読み飛ばしてください。
ソースコードは「人間語で書いたプログラムの元ネタ」です。
プログラムを作って動かすまでの一般的な流れは
1.人間語でプログラムの元ネタを書く
2.元ネタを人間語から機械語に翻訳する
3.翻訳された指示に従って、コンピュータさんが お仕事する
です。
コンピュータさんは人間語が分かりません。
人間様はコンピュータさんの言葉が分かりません。
プログラムは人間様が作るものです。
そこで最初は人間様が分かる言葉でプログラムを作ります。
コンピュータさんに対する「あれをやれ」「これをやれ」な命令を人間語で書くのです。
次に人間語で書いたプログラムの元ネタをコンピュータさんが分かる言葉に翻訳します。
実際に お仕事をするのは、コンピュータさんですからね。
コンピュータさんが分かる言葉に変換する必要があるのです。
コンピュータさんが分かる言葉に翻訳したので、コンピュータさんは命令の内容を理解できます。
指示に従って、お仕事をしてくれるでしょう。
かなり簡略化した説明ですけどね。
これがプログラムを作るときの流れです。
この話で登場した
人間語で書いたプログラムの元ネタ
を「ソースコード」と言います。
難読化は「ソースコードとかを、パッと見で処理の内容が分からないように、ぐちゃぐちゃで読みにくい書き方にすること」です。
なんで わざわざ そんなことをするかというと、中身を見て勝手にパクったり、あるいは好き勝手に改造したりされるのを防ぐためです。
身も蓋もない言い方をすれば「悪い人に対する嫌がらせ」ですね。
以上を踏まえて
難読化したソースコード
が「難読化コード」です。
今回 登場する「コード」は「ソースコード」の省略表現ね。
例えば、そうですね。
以下のような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のような
パッと見で分かりにくい書き方になっているソースコード
が難読化コードです。
なお、難読化コードを作るときはコンピュータさんの力を借りるのが一般的です。
実際の処理を作りこむときに分かりにくい書き方をしていたら、自分でも間違えちゃいそうですからね。
まずは普通に読みやすい形で書いたソースコードを用意して、それをプログラムとかで変換して難読化コードにするのが一般的です。
一言でまとめるよ
まぁ「難読化コード」って単語が出てきたら「読みにくくしたソースコード
(人間語で書いたプログラムの元ネタ)なんだな~」と お考えください。
おまけ
■訳してみるよ
「難読化」は日本語ですね。
「code(コード)」は今回は「source code(ソースコード)」の略です。
「source code(ソースコード)」はIT用語の「ソースコード」です。
「source(ソース)」の意味は「源」とか「起源」とか「根源」とかです。
「code(コード)」の意味は「記号」とか「暗号」とか「符号」とか「コード」とかです。
何となく くっつけると
難読化した源の記号
となります。






