この記事は、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のトライアル版は、こちらのサイトからダウンロードできます。
では、一例を見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
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を使用すると、すべてが非常に複雑になります。それでは、難読化されたコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
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 は、ランダムに生成されたジャンクコードを追加することで、ソースコードをより読みにくくします。悪意のあるプログラマーがコードをリバースエンジニアリングして、プログラムから貴重な情報のハッキングを防ぎたいのであれば、是非このツールの導入を検討してください。
Design. Code. Compile. Deploy.
Start Free Trial Upgrade Today
Free Delphi Community Edition Free C++Builder Community Edition