「逆アセンブル」とは?わかりやすく解説!【逆コンパイル・対策
「逆アセンブル」とは、「実行ファイル(.exeなど)からアセンブリソースコードを"擬似的"に復元する技術」です。
あくまで「擬似的に」なので完全復元ではありません。
逆アセンブルでソースコードを復元することができれば、アプリケーションの改造が可能になります。
色を変えたり、表示を変えたり、ステータスを変えたり自由自在。ソフトウェアハック、つまりチートです。
ですがマスターするにはそれ相応の知識が必要です。
逆アセンブルはかなりマニア向けの技術といえるでしょう。
逆アセンブルと似ている技術に「逆コンパイル」というのもあります。
どちらも実行ファイルからソースコードを復元する、という点では同じです。
このような「実行ファイルからソースコードを復元する技術」のことを、専門用語で「リバースエンジニアリング」と呼んだりします。余裕があれば覚えてあげてくださいね。
アセンブリって何?
「アセンブリ」というのは、機械語(パソコンが唯一理解することができる電気信号のこと)に変換することができる言語のことです。
アセンブリ言語は、こんな感じ。
.globl main
main:
movl $4,%eax
movl $1,%ebx
movl $msg,%ecx
movl $13,%edx
int $0x80
movl $1,%eax
movl $0,%ebx
int $0x80
.data
msg: .asciz "Hello,World\n"
出展:http://rabbitfoot141.hatenablog.com/entry/2016/05/01/124410
ちなみに機械語は、こんな感じ。
機械語で「こんにちは」と書いてあります。
111000111000000110010011111000111000001010010011111000111000000110101011111000111000000110100001111000111000000110101111
これはあくまで機械語を無理矢理0と1で表現しているだけにすぎません。
実際は「電気が流れたか/電気が流れていないか」もしくは「記憶素子がオンか/記憶素子がオフか」というような「状態」を表現していると考えてください。
「逆アセンブル」と「逆コンパイル」の違いは何?
逆アセンブルは、「アセンブラでアセンブルしたソースコード」を復元するのに対し
逆コンパイルは、「コンパイラでコンパイルしたソースコード」を復元します。
それほど大きな違いはありませんが、逆アセンブルの方が復元精度が高めです。
逆アセンブルする目的は?
実行ファイルの処理内容の解析
逆アセンブルすることで、擬似的とはいえソースコードが丸裸になります。
勉強熱心な方は「このアプリ、一体どんな処理になってんだ・・・?」と処理解析に利用できるかもしれません。
ようは研究の一環ということです。
アプリケーションの改造
逆アセンブルを悪用する人の大半はこれが目的でしょう。
アプリケーションの改造!
逆アセンブルによって、アプリケーションの改造・拡張・チート機能の追加などを行うことができます。
当然ですが、それらの行為は重大な規約違反です。
改造アプリケーションの無断配布・改造アプリケーションでのオンライン参加などは、絶対に行わないようにしましょう。
逆アセンブルを対策する方法
大抵のアプリケーション開発者は「せっかく頑張って書いたソースコード、他人に読まれたくないなぁ」と考えるものです。
ソースコードがバレてしまったら、盗作・改造が可能になってしまいますからね。
そこで「逆アセンブル対策」です。
専門用語で「難読化」ともいいます。
アプリケーションを開発する際は、ソースコードを守るためにも、積極的に難読化を取り入れていきましょう。
難読化は、「難読化ツール」を使用して行います。ツールの使用方法などはここでは割愛しますが、ググればすぐに見つかります。
逆アセンブルのやり方は?
逆アセンブルは「逆アセンブル用のツール」を使用して行います。
有名なツール:「OllyDbg」
ツールを使用するとはいえ、ボタン1つでハイ完了!ってわけにはいきません。
前提として「アセンブラ言語を理解する能力」が必要ですし、アセンブラ言語を読むこと自体かなり根気がいる作業です。