この記事は、Md. Ehsanul Haque Kanan氏のブログの抄訳です
最近では、悪意のあるプログラマーが最新の技術を利用して、ライセンスやコピー防止の仕組みを回避し、収益に影響を与えています。 またハッカーが、個人情報の盗難や脅迫などの悪質な目的のために、ユーザーの機密データを保護および暗号化するために講じた措置を破ってデータを盗み出そうとすることもよくあります。このような違反行為は、開発チームや企業に深刻な経済的損失を与えます。
C++の開発者であれば、自分のC++アプリケーションを保護するために、「コードの難読化」と呼ばれる技術を使用するのも一つの方法です。悪意のあるプログラマーがコードをリバースエンジニアリングしようとした場合、コードを非常に理解しにくくすることができます。このブログでは、その詳細についてご紹介します。
Table of Contents
C++コード難読化ツールとは?
C++コード難読化ツールは、C++プログラムの動作を変えずに、ソースコードを人間には理解しにくく加工するツールです。その結果、ハッカーはあなたのプログラムから貴重な情報を盗むのに苦労することになります。また、競合他社がコードをリバースエンジニアリングするのを防ぐことができ、C++のソースコードと知的財産を大幅に保護することができます。
何故 C++コード難読化ツールを使用する必要があるのか?
- 複雑さを実現するために難読化のレイヤーを生成することで、プログラムをより理解しにくく加工
- 定数値をランダムに生成することで、重要な情報を隠蔽
- ソースコードを難読化することで、知的財産を保護
2021年に最も優れたC++コード難読化ツールは?
こちらの知る限りでは、CodeMorph C/C++ Code Obfuscatorは、2021年にソースコードを保護するための素晴らしいソリューションです。CodeMorph C/C++ Code Obfuscatorは、アセンブリの「ジャンク」命令をランダムに生成し、インラインコードやマクロコードとしてプログラムに挿入します。その結果、C++ソースコードは非常に理解しにくいものになります。
CodeMorph C++ Code Obfuscatorがソースコードを保護する方法
CodeMorph C++ Code Obfuscator は、難読化のレイヤーを追加することで、あなたのソースコードを保護します。その結果、プログラムは複雑になり、理解できなくなります。そのため、悪意のあるプログラマーがコードを改変することが、より困難となります。
CodeMorph Code Obfuscatorのトライアル版の入手方法は、Draupnir Software社へお問い合わせください。
では、一例を見てみましょう。
void read_data(void *data, int bits_of_data, unsigned char *bit_stream,
unsigned long &bit_offset)
{
int i;
int n;
while (bits_of_data > 0)
{
n = bits_of_data > 8 ? 8 : bits_of_data;
*(unsigned char*)data = 0;
for (i = 0; i < n; i++)
{
if (read_bit(bit_stream, bit_offset))
{
(*(unsigned char*)data) |= (1 << i);
}
bit_offset++;
}
data = ((unsigned char*)data) + 1;
bits_of_data -= n;
}
}
ご覧のとおり、コードは非常に理解しやすいものです。 単純なforループに加えて、いくつかのif-else文があります。 結果的に競合他社から、このコードを簡単にリバースエンジニアリングされてしまい、競争面において優位な立場を与えてしまいます。 ただし、CodeMorph C++ Code Obfuscatorを使用すると、すべてが非常に複雑になります。それでは、難読化されたコードを見てみましょう。
void read_data(void *data, int bits_of_data, unsigned char *bit_stream,
unsigned long &bit_offset)
{
// junk instruction begin
__asm
{
jz _P01
jnz _P01
_emit 0e8h
_P01:
}
// junk instruction end
int i;
// junk instruction begin
__asm
{
jz _P01
jnz _P01
_emit 0e9h
_P01:
}
// junk instruction end
int n;
// junk instruction begin
__asm
{
clc
jnb _P01
_emit 0e8h
_emit 0e8h
_P01:
}
// junk instruction end
while (bits_of_data > 0)
{
// junk instruction begin
__asm
{
jz _P01
jnz _P01
_emit 09ah
_emit 0e8h
_P01:
}
// junk instruction end
n = bits_of_data > 8 ? 8 : bits_of_data;
// junk instruction begin
__asm
{
clc
jnb _P01
_emit 0e8h
_emit $e8h
_P01:
}
// junk instruction end
*(unsigned char*)data = 0;
// junk instruction begin
__asm
{
jl _P01
_P02: jmp _P03
_emit 0e8h
_P01: jz _P02
_P03:
}
// junk instruction end
for (i = 0; i < n; i++)
{
if (read_bit(bit_stream, bit_offset))
{
(*(unsigned char*)data) |= (1 << i);
}
// junk instruction begin
__asm
{
jle _P01
jg _P01
_emit 0e8h
_P01:
}
// junk instruction end
bit_offset++;
}
// junk instruction begin
__asm
{
clc
jnb _P01
_emit 0e8h
_emit 0e8h
_P01:
}
// junk instruction end
data = ((unsigned char*)data) + 1;
// junk instruction begin
__asm
{
jc _P01
jnc _P01
_emit 0e8h
_P01:
}
// junk instruction end
bits_of_data -= n;
// junk instruction begin
__asm
{
jz _P01
jnz _P01
_emit 0e8h
_P01:
}
// junk instruction end
}
}
ご覧のとおり、CodeMorph C ++ CodeObfuscatorはジャンク命令をソースコードに挿入し、プログラムの実行ロジックを隠蔽しています。つまり、プログラムの動作を変わらず、ソースコードの構造全体は大きく変わっています。この結果、悪意のあるプログラマーがソースコードを変更することは非常に困難となります。 このように、CodeMorph C ++ Code Obfuscatorは、ハッカーから知的財産を保護するのに役立ちます。
CodeMorph C++ Code Obfuscatorを使用すべきでしょうか?
C++ Code Obfuscator は、ランダムに生成されたジャンクコードを追加することで、ソースコードをより読みにくくします。悪意のあるプログラマーがコードをリバースエンジニアリングして、プログラムから貴重な情報のハッキングを防ぎたいのであれば、是非このツールの導入を検討してください。
Reduce development time and get to market faster with RAD Studio, Delphi, or C++Builder.
Design. Code. Compile. Deploy.
Free Delphi Community Edition Free C++Builder Community Edition







