投稿

ラベル(難読化)が付いた投稿を表示しています

ソースコードの難読化とアンチリバースエンジニアリング技術に関するおすすめの書籍

ソースコードの難読化とアンチリバースエンジニアリング技術を専 門的に扱った書籍は、 一般的なプログラミング書籍に比べて数が少ないのが現状です。 これらの技術は、 セキュリティ分野の特定領域に深く関連するため、 情報が分散している傾向があります。 しかし、関連する知識や概念を習得するのに役立つ書籍や、 特定の言語やプラットフォームに特化した書籍は存在します。 以下におすすめの書籍と、学習の方向性についてご紹介します。 1. 幅広い知識の習得に役立つ書籍 (特定の難読化技術に特化しているわけではありません): 「リバースエンジニアリング」 (著: Eldad Eilam):  リバースエンジニアリング全般の基礎から応用までを幅広く解説し ています。 難読化技術がどのようにリバースエンジニアリングの障壁となるの か、その背景にある考え方を理解するのに役立ちます。ただし、 具体的な難読化手法の解説は限定的です。 「Software Protection: Practical Approaches to противодействие Reverse Engineering and Software Piracy」 (著: Michael Ligh, Ali Shah, Mark Graff):  ソフトウェアの保護技術全般について解説しており、 難読化もその一部として紹介されています。 具体的なツールや手法にも触れられていますが、 網羅的ではありません。 「Hacking: The Art of Exploitation, 2nd Edition」 (著: Jon Erickson):  エクスプロイト技術を中心に解説していますが、 プログラムの構造や動作を深く理解することは、 リバースエンジニアリング対策を考える上で重要です。 難読化されたコードがどのように解析されるかのヒントも得られる かもしれません。 2. 特定の言語やプラットフォームに特化した情報源: Android Security Internals (著: Nikolay Elenkov):  Androidアプリのセキュリティに関する書籍で、 難読化ツール (ProGuard, DexGuard など) の利用や、 リバースエンジニアリング対策について解説されています。...

ソースコードの難読化とアンチリバースエンジニアリング

Androidのapkファイルをjadxででコンパイルした際に、例えば電卓みたいな単純なアプリなのに何百ものファイルで構成されていたり、何の機能も持っていないように見えてプログラムの動作に何の寄与もしていないファイルを無数に組み合わせてネストさせ、そのファイルの内一つでも欠けると動作しないように仕込み、本体のメインファイルを巧妙に隠蔽しているものが多数みられた。これは何なのかをGeminiに訊いてみた。 Q.1 何の機能も持たず、プログラムの動作に寄与しないソースコードファイルを複数組み合わせてネストさせ、本体となるメインファイルを隠蔽したり、何の機能も持たずに何の動作にも寄与しないファイルを一つでも欠けさせると動作しないような仕組みを作る方法は何と呼ばれるか? A.1 ご質問の意図されている仕組みは、一般的に「難読化 (Obfuscation)」や、より広範な意味で「アンチリバースエンジニアリング (Anti-Reverse Engineering) 技術」と呼ばれるものの一部として捉えることができます。 特に、  * 意味のないファイルの多層的なネスト: これはコードの構造を複雑にし、解析を困難にするための難読化手法の一つです。  * 依存関係を複雑にする仕組み: 動作に寄与しないファイルを含め、それらが一つでも欠けるとプログラムが動作しないように見せかける手法は、依存性の錯覚やおとりファイルなどと呼ばれることがあります。これもリバースエンジニアリングを妨害する目的で用いられます。 これらの手法は、ソフトウェアの知的財産を保護したり、悪意のあるコードの解析を遅らせたりするために用いられることがあります。 具体的な技術要素としては、以下のようなものが考えられます。  * インクルード/インポートの多用: 多くのプログラミング言語で、別のファイルを読み込む機能があります。意味のないファイルや空のファイルを多数インクルード/インポートすることで、コードの全体像を把握しにくくします。  * 条件分岐の複雑化: 実行されないことが明らかな条件分岐を多数追加し、コードの流れを追いづらくします。  * 間接的な呼び出し: 関数やメソッドの呼び出しを直接行わず、複数の посредник (仲介者) を介することで、処理の流れを複...