Difference between revisions of "Source Obfuscation (日本語)"

m (関連)
m
 
(One intermediate revision by the same user not shown)
Line 13: Line 13:
 
== 2) Lua ソースをバイトコードへコンパイル。 ==
 
== 2) Lua ソースをバイトコードへコンパイル。 ==
  
Lua コンパイラは Lua ソースコードをコンパイル済みの Lua ソースコードである機械語(コード化)へ変換するために使用することができます。
+
Lua コンパイラは Lua ソースコードをコンパイル済みの Lua ソースコードである機械語(コード化)へ変換できます。
  
標準では LÖVE 0.8.0 以降にある大半のバージョンにおいて LuaJIT を使用してビルドされています。この場合は、この様な方法で'''非可逆(破壊)的'''にスクリプトをコンパイルすることができます:
+
標準では LÖVE 0.8.0 以降にある大半のバージョンにおいて LuaJIT でビルドされています。この場合は、この様な方法で'''非可逆(破壊)的'''にスクリプトをコンパイルできます:
  
 
<source lang="bash">
 
<source lang="bash">
Line 21: Line 21:
 
</source>
 
</source>
  
これを避けるためには、 [LuaDec](http://luadec.luaforge.net/) などの Lua 逆コンパイラを使用することができます。
+
これを避けるには、 [https://github.com/bobsayshilol/luajit-decomp luajit-decomp] などの LuaJIT 逆コンパイラを使用できます。
  
 
''注釈: このバイトコードはプラットフォームを超えて非常に良好に動作するのに対して、 LuaJIT を使用してビルドされていない LÖVE のバージョンでは動作しません。現在の LÖVE では LuaJIT 2.0 を使用していますが、将来的には、下位互換性のない LuaJIT 2.1 へ変更される場合があることに注意を払ってください。''
 
''注釈: このバイトコードはプラットフォームを超えて非常に良好に動作するのに対して、 LuaJIT を使用してビルドされていない LÖVE のバージョンでは動作しません。現在の LÖVE では LuaJIT 2.0 を使用していますが、将来的には、下位互換性のない LuaJIT 2.1 へ変更される場合があることに注意を払ってください。''
  
LuaJIT を使用してビルドされていない LÖVE のバージョンの場合は、この様な方法で'''非可逆(破壊)的'''にスクリプトをコンパイルすることができます:
+
LuaJIT を使用してビルドされていない LÖVE のバージョンの場合は、この様な方法で'''非可逆(破壊)的'''にスクリプトをコンパイルできます:
  
 
<source lang="bash">
 
<source lang="bash">
Line 31: Line 31:
 
</source>
 
</source>
  
これを避けるためには、 [luajit-decomp](https://github.com/bobsayshilol/luajit-decomp) などの Lua 逆コンパイラを使用することができます。
+
これを避けるためには、 [https://github.com/bobsayshilol/viruscamp/luadec LuaDec] などの Lua 逆コンパイラを使用することができます。
  
 
''注釈: このバイトコードは使用中の動作環境 (Windows, OSX, Linux) および特定のアーキテクチャ (x86, x86_64, ARM) でのみ動作します。''
 
''注釈: このバイトコードは使用中の動作環境 (Windows, OSX, Linux) および特定のアーキテクチャ (x86, x86_64, ARM) でのみ動作します。''
 
(標準で LÖVE はLuaJIT を使用するため、通常は .luac ファイルを参照します)
 
  
 
LuaJIT によるコンパイル作業全体を行うために .love の作成を行う単純な Bash スクリプトがあります。
 
LuaJIT によるコンパイル作業全体を行うために .love の作成を行う単純な Bash スクリプトがあります。
Line 64: Line 62:
 
* [[LuaC (日本語)|LuaC]]
 
* [[LuaC (日本語)|LuaC]]
 
* [[Game_Distribution (日本語)|Game Distribution]]
 
* [[Game_Distribution (日本語)|Game Distribution]]
* [https://love2d.org/forums/search.php?keywords=Obfuscation フォーラムの検索結果]
+
* (フォーラムのスレッド)
  
 
== そのほかの言語 ==
 
== そのほかの言語 ==
 
{{i18n|Source Obfuscation }}
 
{{i18n|Source Obfuscation }}

Latest revision as of 07:29, 23 June 2019

配布されたゲームが LÖVE を使用して開発されたコードであると気づいた利用者が容易にソースコードへアクセスを阻止するための一般的な方法は三種類あります。

O.png 違法行為の阻止を求めるならば、これらいかなる全ての解決策で目的が達成されると思わないでください。  


O.png いかなる難読化技法を用いようとも、コードの解析を粘り強く行おうとする連中に対して、ピザとコーラの過剰摂取、意欲減退、睡眠不足、そして作業進行速度を遅らせるだけに過ぎません。  


1) .love ファイルを LOVE バイナリへ連結。

各プラットフォームに対する作業方法の関連情報は Game_Distribution を参照してください。

これを避けるには、zip ファイルを連結された実行可能ファイルとして扱ってください。

2) Lua ソースをバイトコードへコンパイル。

Lua コンパイラは Lua ソースコードをコンパイル済みの Lua ソースコードである機械語(コード化)へ変換できます。

標準では LÖVE 0.8.0 以降にある大半のバージョンにおいて LuaJIT でビルドされています。この場合は、この様な方法で非可逆(破壊)的にスクリプトをコンパイルできます:

luajit -b main.lua main.lua

これを避けるには、 luajit-decomp などの LuaJIT 逆コンパイラを使用できます。

注釈: このバイトコードはプラットフォームを超えて非常に良好に動作するのに対して、 LuaJIT を使用してビルドされていない LÖVE のバージョンでは動作しません。現在の LÖVE では LuaJIT 2.0 を使用していますが、将来的には、下位互換性のない LuaJIT 2.1 へ変更される場合があることに注意を払ってください。

LuaJIT を使用してビルドされていない LÖVE のバージョンの場合は、この様な方法で非可逆(破壊)的にスクリプトをコンパイルできます:

luac -o main.lua main.lua

これを避けるためには、 LuaDec などの Lua 逆コンパイラを使用することができます。

注釈: このバイトコードは使用中の動作環境 (Windows, OSX, Linux) および特定のアーキテクチャ (x86, x86_64, ARM) でのみ動作します。

LuaJIT によるコンパイル作業全体を行うために .love の作成を行う単純な Bash スクリプトがあります。

#!/bin/sh
# 使用方法: ./bytecode-love.sh <ソース・ディレクトリ>
WD=`pwd` # 作業ディレクトリの判定。
TEMP=`mktemp -d` # 一時ディレクトリの作成。
cp -Rv $1/* $TEMP # ソースコードを一時ディレクトリへ複写します。
cd $TEMP # 一時ディレクトリへ移動します。
for file in $(find . -iname "*.lua") ; do # 各 lua ファイルに対して再帰処理を行います。
 luajit -b ${file} ${file} # コードを LuaJIT でコンパイルします。
done
zip -r $WD/$1-linux-`arch`.love * # 結果として zip ファイルを出力します。
rm -rf $TEMP # 後始末を行います。

3) Lua ソースコードの難読化を行うために設計されたツールの使用。

Lua ソースの難読化のために利用できる様々なツールがあります。

http://lua-users.org/wiki/LuaTools

前述したとおり、これらのツールはコードの難読化を行いますが、それに対して熟練プログラマは解析を行い難読化される前のコードと類似するものへ復元することができます。

関連

そのほかの言語