「逆アセンブル」とは?わかりやすく解説!【逆コンパイル・対策

基礎

「逆アセンブル」とは、「実行ファイル(.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つでハイ完了!ってわけにはいきません。
前提として「アセンブラ言語を理解する能力」が必要ですし、アセンブラ言語を読むこと自体かなり根気がいる作業です。


Category
9WEB